From 213541d3d5dca4592b26123793247acbd0019b84 Mon Sep 17 00:00:00 2001 From: josi Date: Mon, 15 Apr 2024 12:18:26 +0200 Subject: [PATCH] update tiiger --- TIIGER_TLS/PQ_TIIGER_TLS/CHANGES.md | 243 + TIIGER_TLS/PQ_TIIGER_TLS/CMakeCache.txt | 12 +- .../3.28.2/CMakeDetermineCompilerABI_C.bin | Bin 63173 -> 63173 bytes .../3.28.2/CMakeDetermineCompilerABI_CXX.bin | Bin 63192 -> 63192 bytes .../CMakeFiles/3.28.2/CompilerIdC/a.exe | Bin 63248 -> 63248 bytes .../CMakeFiles/3.28.2/CompilerIdCXX/a.exe | Bin 63276 -> 63276 bytes .../CMakeFiles/CMakeConfigureLog.yaml | 180 +- .../CMakeDirectoryInformation.cmake | 4 +- .../PQ_TIIGER_TLS/CMakeFiles/Makefile.cmake | 86 + TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile2 | 16 +- .../CMakeFiles/TargetDirectories.txt | 8 +- .../CMakeFiles/client.dir/DependInfo.cmake | 2 +- .../CMakeFiles/client.dir/build.make | 16 +- .../client.dir/compiler_depend.internal | 330 -- .../client.dir/compiler_depend.make | 981 +--- .../CMakeFiles/client.dir/includes_CXX.rsp | 2 +- .../CMakeFiles/client.dir/objects.a | Bin 23936 -> 23936 bytes .../client.dir/src/client.cpp.obj.d | 62 +- .../CMakeFiles/tiitls.dir/DependInfo.cmake | 30 +- .../CMakeFiles/tiitls.dir/build.make | 128 +- .../tiitls.dir/compiler_depend.internal | 3660 ------------- .../tiitls.dir/compiler_depend.make | 4641 +---------------- .../CMakeFiles/tiitls.dir/includes_CXX.rsp | 2 +- .../tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d | 32 +- .../tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d | 8 +- .../tiitls.dir/lib/tls_cacerts.cpp.obj.d | 10 +- .../tiitls.dir/lib/tls_cert_chain.cpp.obj.d | 24 +- .../tiitls.dir/lib/tls_client_cert.cpp.obj.d | 10 +- .../tiitls.dir/lib/tls_client_recv.cpp.obj.d | 28 +- .../tiitls.dir/lib/tls_client_send.cpp.obj.d | 24 +- .../tiitls.dir/lib/tls_keys_calc.cpp.obj.d | 24 +- .../tiitls.dir/lib/tls_logger.cpp.obj.d | 12 +- .../tiitls.dir/lib/tls_octads.cpp.obj.d | 4 +- .../tiitls.dir/lib/tls_protocol.cpp.obj.d | 28 +- .../tiitls.dir/lib/tls_sal.cpp.obj.d | 90 +- .../tiitls.dir/lib/tls_sockets.cpp.obj.d | 12 +- .../tiitls.dir/lib/tls_tickets.cpp.obj.d | 18 +- .../tiitls.dir/lib/tls_x509.cpp.obj.d | 6 +- TIIGER_TLS/PQ_TIIGER_TLS/Makefile | 8 +- TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results.txt | 82 +- .../PQ_TIIGER_TLS/OQS_TEST_results2.txt | 84 + TIIGER_TLS/PQ_TIIGER_TLS/README.txt | 13 +- TIIGER_TLS/PQ_TIIGER_TLS/client.exe | Bin 3063949 -> 3063949 bytes TIIGER_TLS/PQ_TIIGER_TLS/cmake_install.cmake | 4 +- TIIGER_TLS/PQ_TIIGER_TLS/cookie.txt | 10 +- TIIGER_TLS/PQ_TIIGER_TLS/libclient.dll.a | Bin 63472 -> 63472 bytes TIIGER_TLS/PQ_TIIGER_TLS/libtiitls.a | Bin 433300 -> 433300 bytes TIIGER_TLS/PQ_TIIGER_TLS/sal/README.txt | 2 +- .../sal/{miracllll => miracl-old}/core.a | Bin .../{miracllll => miracl-old}/includes/arch.h | 0 .../{miraclhgj => miracl-old}/includes/big.h | 0 .../includes/big_B160_56.h | 0 .../includes/big_B168_60.h | 0 .../includes/big_B256_56.h | 0 .../includes/big_B288_60.h | 0 .../includes/big_B336_60.h | 0 .../includes/big_B384_56.h | 0 .../includes/big_B384_58.h | 0 .../includes/big_B416_60.h | 0 .../includes/big_B448_58.h | 0 .../includes/big_B448_60.h | 0 .../includes/big_B464_60.h | 0 .../includes/big_B480_56.h | 0 .../includes/big_B512_60.h | 0 .../includes/big_B528_60.h | 0 .../includes/big_B560_58.h | 0 .../includes/big_B584_60.h | 0 .../{miraclhgj => miracl-old}/includes/bls.h | 0 .../includes/bls192.h | 0 .../includes/bls192_BLS24479.h | 0 .../includes/bls256.h | 0 .../includes/bls256_BLS48286.h | 0 .../includes/bls256_BLS48556.h | 0 .../includes/bls256_BLS48581.h | 0 .../includes/bls_BLS12381.h | 0 .../includes/bls_BLS12383.h | 0 .../includes/bls_BLS12443.h | 0 .../includes/bls_BLS12461.h | 0 .../includes/bls_BN158.h | 0 .../includes/bls_BN254.h | 0 .../includes/bls_BN254CX.h | 0 .../includes/bls_BN462.h | 0 .../includes/bls_FP256BN.h | 0 .../includes/bls_FP512BN.h | 0 .../includes/config_big.h | 0 .../includes/config_big_B160_56.h | 0 .../includes/config_big_B168_60.h | 0 .../includes/config_big_B256_56.h | 0 .../includes/config_big_B288_60.h | 0 .../includes/config_big_B336_60.h | 0 .../includes/config_big_B384_56.h | 0 .../includes/config_big_B384_58.h | 0 .../includes/config_big_B416_60.h | 0 .../includes/config_big_B448_58.h | 0 .../includes/config_big_B448_60.h | 0 .../includes/config_big_B464_60.h | 0 .../includes/config_big_B480_56.h | 0 .../includes/config_big_B512_60.h | 0 .../includes/config_big_B528_60.h | 0 .../includes/config_big_B560_58.h | 0 .../includes/config_big_B584_60.h | 0 .../includes/config_curve.h | 0 .../includes/config_curve_ANSSI.h | 0 .../includes/config_curve_BLS12381.h | 0 .../includes/config_curve_BLS12383.h | 0 .../includes/config_curve_BLS12443.h | 0 .../includes/config_curve_BLS12461.h | 0 .../includes/config_curve_BLS24479.h | 0 .../includes/config_curve_BLS48286.h | 0 .../includes/config_curve_BLS48556.h | 0 .../includes/config_curve_BLS48581.h | 0 .../includes/config_curve_BN158.h | 0 .../includes/config_curve_BN254.h | 0 .../includes/config_curve_BN254CX.h | 0 .../includes/config_curve_BN462.h | 0 .../includes/config_curve_BRAINPOOL.h | 0 .../includes/config_curve_C1174.h | 0 .../includes/config_curve_C13318.h | 0 .../includes/config_curve_C1665.h | 0 .../includes/config_curve_C25519.h | 0 .../includes/config_curve_C41417.h | 0 .../includes/config_curve_Ed25519.h | 0 .../includes/config_curve_Ed448.h | 0 .../includes/config_curve_FP256BN.h | 0 .../includes/config_curve_FP512BN.h | 0 .../includes/config_curve_HIFIVE.h | 0 .../includes/config_curve_JUBJUB.h | 0 .../includes/config_curve_MDC.h | 0 .../includes/config_curve_NIST256.h | 0 .../includes/config_curve_NIST384.h | 0 .../includes/config_curve_NIST521.h | 0 .../includes/config_curve_NUMS256E.h | 0 .../includes/config_curve_NUMS256W.h | 0 .../includes/config_curve_NUMS384E.h | 0 .../includes/config_curve_NUMS384W.h | 0 .../includes/config_curve_NUMS512E.h | 0 .../includes/config_curve_NUMS512W.h | 0 .../includes/config_curve_SECP160R1.h | 0 .../includes/config_curve_SECP256K1.h | 0 .../includes/config_curve_SM2.h | 0 .../includes/config_curve_TWEEDLEDEE.h | 0 .../includes/config_curve_TWEEDLEDUM.h | 0 .../includes/config_curve_X448.h | 0 .../includes/config_ff.h | 0 .../includes/config_ff_RSA2048.h | 0 .../includes/config_ff_RSA3072.h | 0 .../includes/config_ff_RSA4096.h | 0 .../includes/config_field.h | 0 .../includes/config_field_ANSSI.h | 0 .../includes/config_field_BLS12381.h | 0 .../includes/config_field_BLS12383.h | 0 .../includes/config_field_BLS12443.h | 0 .../includes/config_field_BLS12461.h | 0 .../includes/config_field_BLS24479.h | 0 .../includes/config_field_BLS48286.h | 0 .../includes/config_field_BLS48556.h | 0 .../includes/config_field_BLS48581.h | 0 .../includes/config_field_BN158.h | 0 .../includes/config_field_BN254.h | 0 .../includes/config_field_BN254CX.h | 0 .../includes/config_field_BN462.h | 0 .../includes/config_field_BRAINPOOL.h | 0 .../includes/config_field_C1174.h | 0 .../includes/config_field_C1665.h | 0 .../includes/config_field_C41417.h | 0 .../includes/config_field_F25519.h | 0 .../includes/config_field_F256PME.h | 0 .../includes/config_field_F256PMW.h | 0 .../includes/config_field_F384PM.h | 0 .../includes/config_field_F448.h | 0 .../includes/config_field_F512PM.h | 0 .../includes/config_field_FP256BN.h | 0 .../includes/config_field_FP512BN.h | 0 .../includes/config_field_HIFIVE.h | 0 .../includes/config_field_JUBJUB.h | 0 .../includes/config_field_MDC.h | 0 .../includes/config_field_NIST256.h | 0 .../includes/config_field_NIST384.h | 0 .../includes/config_field_NIST521.h | 0 .../includes/config_field_SECP160R1.h | 0 .../includes/config_field_SECP256K1.h | 0 .../includes/config_field_SM2.h | 0 .../includes/config_field_TWEEDLEDEE.h | 0 .../includes/config_field_TWEEDLEDUM.h | 0 .../{miraclhgj => miracl-old}/includes/core.h | 0 .../includes/dilithium.h | 0 .../{miraclhgj => miracl-old}/includes/ecdh.h | 0 .../includes/ecdh_ANSSI.h | 0 .../includes/ecdh_BLS12381.h | 0 .../includes/ecdh_BLS12383.h | 0 .../includes/ecdh_BLS12443.h | 0 .../includes/ecdh_BLS12461.h | 0 .../includes/ecdh_BLS24479.h | 0 .../includes/ecdh_BLS48286.h | 0 .../includes/ecdh_BLS48556.h | 0 .../includes/ecdh_BLS48581.h | 0 .../includes/ecdh_BN158.h | 0 .../includes/ecdh_BN254.h | 0 .../includes/ecdh_BN254CX.h | 0 .../includes/ecdh_BN462.h | 0 .../includes/ecdh_BRAINPOOL.h | 0 .../includes/ecdh_C1174.h | 0 .../includes/ecdh_C13318.h | 0 .../includes/ecdh_C1665.h | 0 .../includes/ecdh_C25519.h | 0 .../includes/ecdh_C41417.h | 0 .../includes/ecdh_Ed25519.h | 0 .../includes/ecdh_Ed448.h | 0 .../includes/ecdh_FP256BN.h | 0 .../includes/ecdh_FP512BN.h | 0 .../includes/ecdh_HIFIVE.h | 0 .../includes/ecdh_JUBJUB.h | 0 .../includes/ecdh_MDC.h | 0 .../includes/ecdh_NIST256.h | 0 .../includes/ecdh_NIST384.h | 0 .../includes/ecdh_NIST521.h | 0 .../includes/ecdh_NUMS256E.h | 0 .../includes/ecdh_NUMS256W.h | 0 .../includes/ecdh_NUMS384E.h | 0 .../includes/ecdh_NUMS384W.h | 0 .../includes/ecdh_NUMS512E.h | 0 .../includes/ecdh_NUMS512W.h | 0 .../includes/ecdh_SECP160R1.h | 0 .../includes/ecdh_SECP256K1.h | 0 .../includes/ecdh_SM2.h | 0 .../includes/ecdh_TWEEDLEDEE.h | 0 .../includes/ecdh_TWEEDLEDUM.h | 0 .../includes/ecdh_X448.h | 0 .../{miraclhgj => miracl-old}/includes/ecp.h | 0 .../{miraclhgj => miracl-old}/includes/ecp2.h | 0 .../includes/ecp2_BLS12381.h | 0 .../includes/ecp2_BLS12383.h | 0 .../includes/ecp2_BLS12443.h | 0 .../includes/ecp2_BLS12461.h | 0 .../includes/ecp2_BN158.h | 0 .../includes/ecp2_BN254.h | 0 .../includes/ecp2_BN254CX.h | 0 .../includes/ecp2_BN462.h | 0 .../includes/ecp2_FP256BN.h | 0 .../includes/ecp2_FP512BN.h | 0 .../{miraclhgj => miracl-old}/includes/ecp4.h | 0 .../includes/ecp4_BLS24479.h | 0 .../{miraclhgj => miracl-old}/includes/ecp8.h | 0 .../includes/ecp8_BLS48286.h | 0 .../includes/ecp8_BLS48556.h | 0 .../includes/ecp8_BLS48581.h | 0 .../includes/ecp_ANSSI.h | 0 .../includes/ecp_BLS12381.h | 0 .../includes/ecp_BLS12383.h | 0 .../includes/ecp_BLS12443.h | 0 .../includes/ecp_BLS12461.h | 0 .../includes/ecp_BLS24479.h | 0 .../includes/ecp_BLS48286.h | 0 .../includes/ecp_BLS48556.h | 0 .../includes/ecp_BLS48581.h | 0 .../includes/ecp_BN158.h | 0 .../includes/ecp_BN254.h | 0 .../includes/ecp_BN254CX.h | 0 .../includes/ecp_BN462.h | 0 .../includes/ecp_BRAINPOOL.h | 0 .../includes/ecp_C1174.h | 0 .../includes/ecp_C13318.h | 0 .../includes/ecp_C1665.h | 0 .../includes/ecp_C25519.h | 0 .../includes/ecp_C41417.h | 0 .../includes/ecp_Ed25519.h | 0 .../includes/ecp_Ed448.h | 0 .../includes/ecp_FP256BN.h | 0 .../includes/ecp_FP512BN.h | 0 .../includes/ecp_HIFIVE.h | 0 .../includes/ecp_JUBJUB.h | 0 .../includes/ecp_MDC.h | 0 .../includes/ecp_NIST256.h | 0 .../includes/ecp_NIST384.h | 0 .../includes/ecp_NIST521.h | 0 .../includes/ecp_NUMS256E.h | 0 .../includes/ecp_NUMS256W.h | 0 .../includes/ecp_NUMS384E.h | 0 .../includes/ecp_NUMS384W.h | 0 .../includes/ecp_NUMS512E.h | 0 .../includes/ecp_NUMS512W.h | 0 .../includes/ecp_SECP160R1.h | 0 .../includes/ecp_SECP256K1.h | 0 .../includes/ecp_SM2.h | 0 .../includes/ecp_TWEEDLEDEE.h | 0 .../includes/ecp_TWEEDLEDUM.h | 0 .../includes/ecp_X448.h | 0 .../includes/eddsa.h | 0 .../includes/eddsa_ANSSI.h | 0 .../includes/eddsa_BLS12381.h | 0 .../includes/eddsa_BLS12383.h | 0 .../includes/eddsa_BLS12443.h | 0 .../includes/eddsa_BLS12461.h | 0 .../includes/eddsa_BLS24479.h | 0 .../includes/eddsa_BLS48286.h | 0 .../includes/eddsa_BLS48556.h | 0 .../includes/eddsa_BLS48581.h | 0 .../includes/eddsa_BN158.h | 0 .../includes/eddsa_BN254.h | 0 .../includes/eddsa_BN254CX.h | 0 .../includes/eddsa_BN462.h | 0 .../includes/eddsa_BRAINPOOL.h | 0 .../includes/eddsa_C1174.h | 0 .../includes/eddsa_C13318.h | 0 .../includes/eddsa_C1665.h | 0 .../includes/eddsa_C25519.h | 0 .../includes/eddsa_C41417.h | 0 .../includes/eddsa_Ed25519.h | 0 .../includes/eddsa_Ed448.h | 0 .../includes/eddsa_FP256BN.h | 0 .../includes/eddsa_FP512BN.h | 0 .../includes/eddsa_HIFIVE.h | 0 .../includes/eddsa_JUBJUB.h | 0 .../includes/eddsa_MDC.h | 0 .../includes/eddsa_NIST256.h | 0 .../includes/eddsa_NIST384.h | 0 .../includes/eddsa_NIST521.h | 0 .../includes/eddsa_NUMS256E.h | 0 .../includes/eddsa_NUMS256W.h | 0 .../includes/eddsa_NUMS384E.h | 0 .../includes/eddsa_NUMS384W.h | 0 .../includes/eddsa_NUMS512E.h | 0 .../includes/eddsa_NUMS512W.h | 0 .../includes/eddsa_SECP160R1.h | 0 .../includes/eddsa_SECP256K1.h | 0 .../includes/eddsa_SM2.h | 0 .../includes/eddsa_TWEEDLEDEE.h | 0 .../includes/eddsa_TWEEDLEDUM.h | 0 .../includes/eddsa_X448.h | 0 .../{miraclhgj => miracl-old}/includes/ff.h | 0 .../includes/ff_RSA2048.h | 0 .../includes/ff_RSA3072.h | 0 .../includes/ff_RSA4096.h | 0 .../{miraclhgj => miracl-old}/includes/fp.h | 0 .../{miraclhgj => miracl-old}/includes/fp12.h | 0 .../includes/fp12_BLS12381.h | 0 .../includes/fp12_BLS12383.h | 0 .../includes/fp12_BLS12443.h | 0 .../includes/fp12_BLS12461.h | 0 .../includes/fp12_BN158.h | 0 .../includes/fp12_BN254.h | 0 .../includes/fp12_BN254CX.h | 0 .../includes/fp12_BN462.h | 0 .../includes/fp12_FP256BN.h | 0 .../includes/fp12_FP512BN.h | 0 .../{miraclhgj => miracl-old}/includes/fp16.h | 0 .../includes/fp16_BLS48286.h | 0 .../includes/fp16_BLS48556.h | 0 .../includes/fp16_BLS48581.h | 0 .../{miraclhgj => miracl-old}/includes/fp2.h | 0 .../{miraclhgj => miracl-old}/includes/fp24.h | 0 .../includes/fp24_BLS24479.h | 0 .../includes/fp2_BLS12381.h | 0 .../includes/fp2_BLS12383.h | 0 .../includes/fp2_BLS12443.h | 0 .../includes/fp2_BLS12461.h | 0 .../includes/fp2_BLS24479.h | 0 .../includes/fp2_BLS48286.h | 0 .../includes/fp2_BLS48556.h | 0 .../includes/fp2_BLS48581.h | 0 .../includes/fp2_BN158.h | 0 .../includes/fp2_BN254.h | 0 .../includes/fp2_BN254CX.h | 0 .../includes/fp2_BN462.h | 0 .../includes/fp2_FP256BN.h | 0 .../includes/fp2_FP512BN.h | 0 .../{miraclhgj => miracl-old}/includes/fp4.h | 0 .../{miraclhgj => miracl-old}/includes/fp48.h | 0 .../includes/fp48_BLS48286.h | 0 .../includes/fp48_BLS48556.h | 0 .../includes/fp48_BLS48581.h | 0 .../includes/fp4_BLS12381.h | 0 .../includes/fp4_BLS12383.h | 0 .../includes/fp4_BLS12443.h | 0 .../includes/fp4_BLS12461.h | 0 .../includes/fp4_BLS24479.h | 0 .../includes/fp4_BLS48286.h | 0 .../includes/fp4_BLS48556.h | 0 .../includes/fp4_BLS48581.h | 0 .../includes/fp4_BN158.h | 0 .../includes/fp4_BN254.h | 0 .../includes/fp4_BN254CX.h | 0 .../includes/fp4_BN462.h | 0 .../includes/fp4_FP256BN.h | 0 .../includes/fp4_FP512BN.h | 0 .../{miraclhgj => miracl-old}/includes/fp8.h | 0 .../includes/fp8_BLS24479.h | 0 .../includes/fp8_BLS48286.h | 0 .../includes/fp8_BLS48556.h | 0 .../includes/fp8_BLS48581.h | 0 .../includes/fp_ANSSI.h | 0 .../includes/fp_BLS12381.h | 0 .../includes/fp_BLS12383.h | 0 .../includes/fp_BLS12443.h | 0 .../includes/fp_BLS12461.h | 0 .../includes/fp_BLS24479.h | 0 .../includes/fp_BLS48286.h | 0 .../includes/fp_BLS48556.h | 0 .../includes/fp_BLS48581.h | 0 .../includes/fp_BN158.h | 0 .../includes/fp_BN254.h | 0 .../includes/fp_BN254CX.h | 0 .../includes/fp_BN462.h | 0 .../includes/fp_BRAINPOOL.h | 0 .../includes/fp_C1174.h | 0 .../includes/fp_C1665.h | 0 .../includes/fp_C41417.h | 0 .../includes/fp_F25519.h | 0 .../includes/fp_F256PME.h | 0 .../includes/fp_F256PMW.h | 0 .../includes/fp_F384PM.h | 0 .../includes/fp_F448.h | 0 .../includes/fp_F512PM.h | 0 .../includes/fp_FP256BN.h | 0 .../includes/fp_FP512BN.h | 0 .../includes/fp_HIFIVE.h | 0 .../includes/fp_JUBJUB.h | 0 .../includes/fp_MDC.h | 0 .../includes/fp_NIST256.h | 0 .../includes/fp_NIST384.h | 0 .../includes/fp_NIST521.h | 0 .../includes/fp_SECP160R1.h | 0 .../includes/fp_SECP256K1.h | 0 .../includes/fp_SM2.h | 0 .../includes/fp_TWEEDLEDEE.h | 0 .../includes/fp_TWEEDLEDUM.h | 0 .../{miraclhgj => miracl-old}/includes/hpke.h | 0 .../includes/hpke_ANSSI.h | 0 .../includes/hpke_BLS12381.h | 0 .../includes/hpke_BLS12383.h | 0 .../includes/hpke_BLS12443.h | 0 .../includes/hpke_BLS12461.h | 0 .../includes/hpke_BLS24479.h | 0 .../includes/hpke_BLS48286.h | 0 .../includes/hpke_BLS48556.h | 0 .../includes/hpke_BLS48581.h | 0 .../includes/hpke_BN158.h | 0 .../includes/hpke_BN254.h | 0 .../includes/hpke_BN254CX.h | 0 .../includes/hpke_BN462.h | 0 .../includes/hpke_BRAINPOOL.h | 0 .../includes/hpke_C1174.h | 0 .../includes/hpke_C13318.h | 0 .../includes/hpke_C1665.h | 0 .../includes/hpke_C25519.h | 0 .../includes/hpke_C41417.h | 0 .../includes/hpke_Ed25519.h | 0 .../includes/hpke_Ed448.h | 0 .../includes/hpke_FP256BN.h | 0 .../includes/hpke_FP512BN.h | 0 .../includes/hpke_HIFIVE.h | 0 .../includes/hpke_JUBJUB.h | 0 .../includes/hpke_MDC.h | 0 .../includes/hpke_NIST256.h | 0 .../includes/hpke_NIST384.h | 0 .../includes/hpke_NIST521.h | 0 .../includes/hpke_NUMS256E.h | 0 .../includes/hpke_NUMS256W.h | 0 .../includes/hpke_NUMS384E.h | 0 .../includes/hpke_NUMS384W.h | 0 .../includes/hpke_NUMS512E.h | 0 .../includes/hpke_NUMS512W.h | 0 .../includes/hpke_SECP160R1.h | 0 .../includes/hpke_SECP256K1.h | 0 .../includes/hpke_SM2.h | 0 .../includes/hpke_TWEEDLEDEE.h | 0 .../includes/hpke_TWEEDLEDUM.h | 0 .../includes/hpke_X448.h | 0 .../includes/kyber.h | 0 .../{miraclhgj => miracl-old}/includes/mpin.h | 0 .../includes/mpin192.h | 0 .../includes/mpin192_BLS24479.h | 0 .../includes/mpin256.h | 0 .../includes/mpin256_BLS48286.h | 0 .../includes/mpin256_BLS48556.h | 0 .../includes/mpin256_BLS48581.h | 0 .../includes/mpin_BLS12381.h | 0 .../includes/mpin_BLS12383.h | 0 .../includes/mpin_BLS12443.h | 0 .../includes/mpin_BLS12461.h | 0 .../includes/mpin_BN158.h | 0 .../includes/mpin_BN254.h | 0 .../includes/mpin_BN254CX.h | 0 .../includes/mpin_BN462.h | 0 .../includes/mpin_FP256BN.h | 0 .../includes/mpin_FP512BN.h | 0 .../includes/newhope.h | 0 .../{miraclhgj => miracl-old}/includes/pair.h | 0 .../includes/pair4.h | 0 .../includes/pair4_BLS24479.h | 0 .../includes/pair8.h | 0 .../includes/pair8_BLS48286.h | 0 .../includes/pair8_BLS48556.h | 0 .../includes/pair8_BLS48581.h | 0 .../includes/pair_BLS12381.h | 0 .../includes/pair_BLS12383.h | 0 .../includes/pair_BLS12443.h | 0 .../includes/pair_BLS12461.h | 0 .../includes/pair_BN158.h | 0 .../includes/pair_BN254.h | 0 .../includes/pair_BN254CX.h | 0 .../includes/pair_BN462.h | 0 .../includes/pair_FP256BN.h | 0 .../includes/pair_FP512BN.h | 0 .../includes/randapi.h | 0 .../{miraclhgj => miracl-old}/includes/rsa.h | 0 .../includes/rsa_RSA2048.h | 0 .../includes/rsa_RSA3072.h | 0 .../includes/rsa_RSA4096.h | 0 .../{miraclhgj => miracl-old}/includes/x509.h | 0 .../sal/miracl-winx64-15-04-24/core.a | Bin 0 -> 5925000 bytes .../includes/arch.h | 212 +- .../includes/big.h | 0 .../includes/big_B160_56.h | 1394 ++--- .../includes/big_B168_60.h | 1394 ++--- .../includes/big_B256_56.h | 1394 ++--- .../includes/big_B288_60.h | 1394 ++--- .../includes/big_B336_60.h | 1394 ++--- .../includes/big_B384_56.h | 1394 ++--- .../includes/big_B384_58.h | 1394 ++--- .../includes/big_B416_60.h | 1394 ++--- .../includes/big_B448_58.h | 1394 ++--- .../includes/big_B448_60.h | 1394 ++--- .../includes/big_B464_60.h | 1394 ++--- .../includes/big_B480_56.h | 1394 ++--- .../includes/big_B512_60.h | 1394 ++--- .../includes/big_B528_60.h | 1394 ++--- .../includes/big_B560_58.h | 1394 ++--- .../includes/big_B584_60.h | 1394 ++--- .../includes/bls.h | 0 .../includes/bls192.h | 0 .../includes/bls192_BLS24479.h | 172 +- .../includes/bls256.h | 0 .../includes/bls256_BLS48286.h | 172 +- .../includes/bls256_BLS48556.h | 172 +- .../includes/bls256_BLS48581.h | 172 +- .../includes/bls_BLS12381.h | 174 +- .../includes/bls_BLS12383.h | 174 +- .../includes/bls_BLS12443.h | 174 +- .../includes/bls_BLS12461.h | 174 +- .../includes/bls_BN158.h | 174 +- .../includes/bls_BN254.h | 174 +- .../includes/bls_BN254CX.h | 174 +- .../includes/bls_BN462.h | 174 +- .../includes/bls_FP256BN.h | 174 +- .../includes/bls_FP512BN.h | 174 +- .../includes/config_big.h | 0 .../includes/config_big_B160_56.h | 62 +- .../includes/config_big_B168_60.h | 62 +- .../includes/config_big_B256_56.h | 62 +- .../includes/config_big_B288_60.h | 62 +- .../includes/config_big_B336_60.h | 62 +- .../includes/config_big_B384_56.h | 62 +- .../includes/config_big_B384_58.h | 62 +- .../includes/config_big_B416_60.h | 62 +- .../includes/config_big_B448_58.h | 62 +- .../includes/config_big_B448_60.h | 62 +- .../includes/config_big_B464_60.h | 62 +- .../includes/config_big_B480_56.h | 62 +- .../includes/config_big_B512_60.h | 62 +- .../includes/config_big_B528_60.h | 62 +- .../includes/config_big_B560_58.h | 62 +- .../includes/config_big_B584_60.h | 62 +- .../includes/config_curve.h | 0 .../includes/config_curve_ANSSI.h | 154 +- .../includes/config_curve_BLS12381.h | 154 +- .../includes/config_curve_BLS12383.h | 154 +- .../includes/config_curve_BLS12443.h | 154 +- .../includes/config_curve_BLS12461.h | 154 +- .../includes/config_curve_BLS24479.h | 154 +- .../includes/config_curve_BLS48286.h | 154 +- .../includes/config_curve_BLS48556.h | 154 +- .../includes/config_curve_BLS48581.h | 154 +- .../includes/config_curve_BN158.h | 154 +- .../includes/config_curve_BN254.h | 154 +- .../includes/config_curve_BN254CX.h | 154 +- .../includes/config_curve_BN462.h | 154 +- .../includes/config_curve_BRAINPOOL.h | 154 +- .../includes/config_curve_C1174.h | 154 +- .../includes/config_curve_C13318.h | 154 +- .../includes/config_curve_C1665.h | 154 +- .../includes/config_curve_C25519.h | 154 +- .../includes/config_curve_C41417.h | 154 +- .../includes/config_curve_Ed25519.h | 154 +- .../includes/config_curve_Ed448.h | 154 +- .../includes/config_curve_FP256BN.h | 154 +- .../includes/config_curve_FP512BN.h | 154 +- .../includes/config_curve_HIFIVE.h | 154 +- .../includes/config_curve_JUBJUB.h | 154 +- .../includes/config_curve_MDC.h | 154 +- .../includes/config_curve_NIST256.h | 154 +- .../includes/config_curve_NIST384.h | 154 +- .../includes/config_curve_NIST521.h | 154 +- .../includes/config_curve_NUMS256E.h | 154 +- .../includes/config_curve_NUMS256W.h | 154 +- .../includes/config_curve_NUMS384E.h | 154 +- .../includes/config_curve_NUMS384W.h | 154 +- .../includes/config_curve_NUMS512E.h | 154 +- .../includes/config_curve_NUMS512W.h | 154 +- .../includes/config_curve_SECP160R1.h | 154 +- .../includes/config_curve_SECP256K1.h | 154 +- .../includes/config_curve_SM2.h | 154 +- .../includes/config_curve_TWEEDLEDEE.h | 154 +- .../includes/config_curve_TWEEDLEDUM.h | 154 +- .../includes/config_curve_X448.h | 154 +- .../includes/config_ff.h | 0 .../includes/config_ff_RSA2048.h | 64 +- .../includes/config_ff_RSA3072.h | 64 +- .../includes/config_ff_RSA4096.h | 64 +- .../includes/config_field.h | 0 .../includes/config_field_ANSSI.h | 80 +- .../includes/config_field_BLS12381.h | 80 +- .../includes/config_field_BLS12383.h | 80 +- .../includes/config_field_BLS12443.h | 80 +- .../includes/config_field_BLS12461.h | 80 +- .../includes/config_field_BLS24479.h | 80 +- .../includes/config_field_BLS48286.h | 80 +- .../includes/config_field_BLS48556.h | 80 +- .../includes/config_field_BLS48581.h | 80 +- .../includes/config_field_BN158.h | 80 +- .../includes/config_field_BN254.h | 80 +- .../includes/config_field_BN254CX.h | 80 +- .../includes/config_field_BN462.h | 80 +- .../includes/config_field_BRAINPOOL.h | 80 +- .../includes/config_field_C1174.h | 80 +- .../includes/config_field_C1665.h | 80 +- .../includes/config_field_C41417.h | 80 +- .../includes/config_field_F25519.h | 80 +- .../includes/config_field_F256PME.h | 80 +- .../includes/config_field_F256PMW.h | 80 +- .../includes/config_field_F384PM.h | 80 +- .../includes/config_field_F448.h | 80 +- .../includes/config_field_F512PM.h | 80 +- .../includes/config_field_FP256BN.h | 80 +- .../includes/config_field_FP512BN.h | 80 +- .../includes/config_field_HIFIVE.h | 80 +- .../includes/config_field_JUBJUB.h | 80 +- .../includes/config_field_MDC.h | 80 +- .../includes/config_field_NIST256.h | 80 +- .../includes/config_field_NIST384.h | 80 +- .../includes/config_field_NIST521.h | 80 +- .../includes/config_field_SECP160R1.h | 80 +- .../includes/config_field_SECP256K1.h | 80 +- .../includes/config_field_SM2.h | 80 +- .../includes/config_field_TWEEDLEDEE.h | 80 +- .../includes/config_field_TWEEDLEDUM.h | 80 +- .../includes/core.h | 0 .../includes/dilithium.h | 0 .../includes/ecdh.h | 0 .../includes/ecdh_ANSSI.h | 322 +- .../includes/ecdh_BLS12381.h | 322 +- .../includes/ecdh_BLS12383.h | 322 +- .../includes/ecdh_BLS12443.h | 322 +- .../includes/ecdh_BLS12461.h | 322 +- .../includes/ecdh_BLS24479.h | 322 +- .../includes/ecdh_BLS48286.h | 322 +- .../includes/ecdh_BLS48556.h | 322 +- .../includes/ecdh_BLS48581.h | 322 +- .../includes/ecdh_BN158.h | 322 +- .../includes/ecdh_BN254.h | 322 +- .../includes/ecdh_BN254CX.h | 322 +- .../includes/ecdh_BN462.h | 322 +- .../includes/ecdh_BRAINPOOL.h | 322 +- .../includes/ecdh_C1174.h | 322 +- .../includes/ecdh_C13318.h | 322 +- .../includes/ecdh_C1665.h | 322 +- .../includes/ecdh_C25519.h | 322 +- .../includes/ecdh_C41417.h | 322 +- .../includes/ecdh_Ed25519.h | 322 +- .../includes/ecdh_Ed448.h | 322 +- .../includes/ecdh_FP256BN.h | 322 +- .../includes/ecdh_FP512BN.h | 322 +- .../includes/ecdh_HIFIVE.h | 322 +- .../includes/ecdh_JUBJUB.h | 322 +- .../includes/ecdh_MDC.h | 322 +- .../includes/ecdh_NIST256.h | 322 +- .../includes/ecdh_NIST384.h | 322 +- .../includes/ecdh_NIST521.h | 322 +- .../includes/ecdh_NUMS256E.h | 322 +- .../includes/ecdh_NUMS256W.h | 322 +- .../includes/ecdh_NUMS384E.h | 322 +- .../includes/ecdh_NUMS384W.h | 322 +- .../includes/ecdh_NUMS512E.h | 322 +- .../includes/ecdh_NUMS512W.h | 322 +- .../includes/ecdh_SECP160R1.h | 322 +- .../includes/ecdh_SECP256K1.h | 322 +- .../includes/ecdh_SM2.h | 322 +- .../includes/ecdh_TWEEDLEDEE.h | 322 +- .../includes/ecdh_TWEEDLEDUM.h | 322 +- .../includes/ecdh_X448.h | 322 +- .../includes/ecp.h | 0 .../includes/ecp2.h | 0 .../includes/ecp2_BLS12381.h | 498 +- .../includes/ecp2_BLS12383.h | 498 +- .../includes/ecp2_BLS12443.h | 498 +- .../includes/ecp2_BLS12461.h | 498 +- .../includes/ecp2_BN158.h | 498 +- .../includes/ecp2_BN254.h | 498 +- .../includes/ecp2_BN254CX.h | 498 +- .../includes/ecp2_BN462.h | 498 +- .../includes/ecp2_FP256BN.h | 498 +- .../includes/ecp2_FP512BN.h | 498 +- .../includes/ecp4.h | 0 .../includes/ecp4_BLS24479.h | 536 +- .../includes/ecp8.h | 0 .../includes/ecp8_BLS48286.h | 556 +- .../includes/ecp8_BLS48556.h | 556 +- .../includes/ecp8_BLS48581.h | 556 +- .../includes/ecp_ANSSI.h | 744 +-- .../includes/ecp_BLS12381.h | 744 +-- .../includes/ecp_BLS12383.h | 744 +-- .../includes/ecp_BLS12443.h | 744 +-- .../includes/ecp_BLS12461.h | 744 +-- .../includes/ecp_BLS24479.h | 744 +-- .../includes/ecp_BLS48286.h | 744 +-- .../includes/ecp_BLS48556.h | 744 +-- .../includes/ecp_BLS48581.h | 744 +-- .../includes/ecp_BN158.h | 744 +-- .../includes/ecp_BN254.h | 744 +-- .../includes/ecp_BN254CX.h | 744 +-- .../includes/ecp_BN462.h | 744 +-- .../includes/ecp_BRAINPOOL.h | 744 +-- .../includes/ecp_C1174.h | 744 +-- .../includes/ecp_C13318.h | 744 +-- .../includes/ecp_C1665.h | 744 +-- .../includes/ecp_C25519.h | 744 +-- .../includes/ecp_C41417.h | 744 +-- .../includes/ecp_Ed25519.h | 744 +-- .../includes/ecp_Ed448.h | 744 +-- .../includes/ecp_FP256BN.h | 744 +-- .../includes/ecp_FP512BN.h | 744 +-- .../includes/ecp_HIFIVE.h | 744 +-- .../includes/ecp_JUBJUB.h | 744 +-- .../includes/ecp_MDC.h | 744 +-- .../includes/ecp_NIST256.h | 744 +-- .../includes/ecp_NIST384.h | 744 +-- .../includes/ecp_NIST521.h | 744 +-- .../includes/ecp_NUMS256E.h | 744 +-- .../includes/ecp_NUMS256W.h | 744 +-- .../includes/ecp_NUMS384E.h | 744 +-- .../includes/ecp_NUMS384W.h | 744 +-- .../includes/ecp_NUMS512E.h | 744 +-- .../includes/ecp_NUMS512W.h | 744 +-- .../includes/ecp_SECP160R1.h | 744 +-- .../includes/ecp_SECP256K1.h | 744 +-- .../includes/ecp_SM2.h | 744 +-- .../includes/ecp_TWEEDLEDEE.h | 744 +-- .../includes/ecp_TWEEDLEDUM.h | 744 +-- .../includes/ecp_X448.h | 744 +-- .../includes/eddsa.h | 0 .../includes/eddsa_ANSSI.h | 162 +- .../includes/eddsa_BLS12381.h | 162 +- .../includes/eddsa_BLS12383.h | 162 +- .../includes/eddsa_BLS12443.h | 162 +- .../includes/eddsa_BLS12461.h | 162 +- .../includes/eddsa_BLS24479.h | 162 +- .../includes/eddsa_BLS48286.h | 162 +- .../includes/eddsa_BLS48556.h | 162 +- .../includes/eddsa_BLS48581.h | 162 +- .../includes/eddsa_BN158.h | 162 +- .../includes/eddsa_BN254.h | 162 +- .../includes/eddsa_BN254CX.h | 162 +- .../includes/eddsa_BN462.h | 162 +- .../includes/eddsa_BRAINPOOL.h | 162 +- .../includes/eddsa_C1174.h | 162 +- .../includes/eddsa_C13318.h | 162 +- .../includes/eddsa_C1665.h | 162 +- .../includes/eddsa_C25519.h | 162 +- .../includes/eddsa_C41417.h | 162 +- .../includes/eddsa_Ed25519.h | 162 +- .../includes/eddsa_Ed448.h | 162 +- .../includes/eddsa_FP256BN.h | 162 +- .../includes/eddsa_FP512BN.h | 162 +- .../includes/eddsa_HIFIVE.h | 162 +- .../includes/eddsa_JUBJUB.h | 162 +- .../includes/eddsa_MDC.h | 162 +- .../includes/eddsa_NIST256.h | 162 +- .../includes/eddsa_NIST384.h | 162 +- .../includes/eddsa_NIST521.h | 162 +- .../includes/eddsa_NUMS256E.h | 162 +- .../includes/eddsa_NUMS256W.h | 162 +- .../includes/eddsa_NUMS384E.h | 162 +- .../includes/eddsa_NUMS384W.h | 162 +- .../includes/eddsa_NUMS512E.h | 162 +- .../includes/eddsa_NUMS512W.h | 162 +- .../includes/eddsa_SECP160R1.h | 162 +- .../includes/eddsa_SECP256K1.h | 162 +- .../includes/eddsa_SM2.h | 162 +- .../includes/eddsa_TWEEDLEDEE.h | 162 +- .../includes/eddsa_TWEEDLEDUM.h | 162 +- .../includes/eddsa_X448.h | 162 +- .../includes/ff.h | 0 .../includes/ff_RSA2048.h | 590 +-- .../includes/ff_RSA3072.h | 590 +-- .../includes/ff_RSA4096.h | 590 +-- .../includes/fp.h | 0 .../includes/fp12.h | 0 .../includes/fp12_BLS12381.h | 460 +- .../includes/fp12_BLS12383.h | 460 +- .../includes/fp12_BLS12443.h | 460 +- .../includes/fp12_BLS12461.h | 460 +- .../includes/fp12_BN158.h | 460 +- .../includes/fp12_BN254.h | 460 +- .../includes/fp12_BN254CX.h | 460 +- .../includes/fp12_BN462.h | 460 +- .../includes/fp12_FP256BN.h | 460 +- .../includes/fp12_FP512BN.h | 460 +- .../includes/fp16.h | 0 .../includes/fp16_BLS48286.h | 616 +-- .../includes/fp16_BLS48556.h | 616 +-- .../includes/fp16_BLS48581.h | 616 +-- .../includes/fp2.h | 0 .../includes/fp24.h | 0 .../includes/fp24_BLS24479.h | 472 +- .../includes/fp2_BLS12381.h | 612 +-- .../includes/fp2_BLS12383.h | 612 +-- .../includes/fp2_BLS12443.h | 612 +-- .../includes/fp2_BLS12461.h | 612 +-- .../includes/fp2_BLS24479.h | 612 +-- .../includes/fp2_BLS48286.h | 612 +-- .../includes/fp2_BLS48556.h | 612 +-- .../includes/fp2_BLS48581.h | 612 +-- .../includes/fp2_BN158.h | 612 +-- .../includes/fp2_BN254.h | 612 +-- .../includes/fp2_BN254CX.h | 612 +-- .../includes/fp2_BN462.h | 612 +-- .../includes/fp2_FP256BN.h | 612 +-- .../includes/fp2_FP512BN.h | 612 +-- .../includes/fp4.h | 0 .../includes/fp48.h | 0 .../includes/fp48_BLS48286.h | 462 +- .../includes/fp48_BLS48556.h | 462 +- .../includes/fp48_BLS48581.h | 462 +- .../includes/fp4_BLS12381.h | 698 +-- .../includes/fp4_BLS12383.h | 698 +-- .../includes/fp4_BLS12443.h | 698 +-- .../includes/fp4_BLS12461.h | 698 +-- .../includes/fp4_BLS24479.h | 698 +-- .../includes/fp4_BLS48286.h | 698 +-- .../includes/fp4_BLS48556.h | 698 +-- .../includes/fp4_BLS48581.h | 698 +-- .../includes/fp4_BN158.h | 698 +-- .../includes/fp4_BN254.h | 698 +-- .../includes/fp4_BN254CX.h | 698 +-- .../includes/fp4_BN462.h | 698 +-- .../includes/fp4_FP256BN.h | 698 +-- .../includes/fp4_FP512BN.h | 698 +-- .../includes/fp8.h | 0 .../includes/fp8_BLS24479.h | 730 +-- .../includes/fp8_BLS48286.h | 730 +-- .../includes/fp8_BLS48556.h | 730 +-- .../includes/fp8_BLS48581.h | 730 +-- .../includes/fp_ANSSI.h | 668 +-- .../includes/fp_BLS12381.h | 668 +-- .../includes/fp_BLS12383.h | 668 +-- .../includes/fp_BLS12443.h | 668 +-- .../includes/fp_BLS12461.h | 668 +-- .../includes/fp_BLS24479.h | 668 +-- .../includes/fp_BLS48286.h | 668 +-- .../includes/fp_BLS48556.h | 668 +-- .../includes/fp_BLS48581.h | 668 +-- .../includes/fp_BN158.h | 668 +-- .../includes/fp_BN254.h | 668 +-- .../includes/fp_BN254CX.h | 668 +-- .../includes/fp_BN462.h | 668 +-- .../includes/fp_BRAINPOOL.h | 668 +-- .../includes/fp_C1174.h | 668 +-- .../includes/fp_C1665.h | 668 +-- .../includes/fp_C41417.h | 668 +-- .../includes/fp_F25519.h | 668 +-- .../includes/fp_F256PME.h | 668 +-- .../includes/fp_F256PMW.h | 668 +-- .../includes/fp_F384PM.h | 668 +-- .../includes/fp_F448.h | 668 +-- .../includes/fp_F512PM.h | 668 +-- .../includes/fp_FP256BN.h | 668 +-- .../includes/fp_FP512BN.h | 668 +-- .../includes/fp_HIFIVE.h | 668 +-- .../includes/fp_JUBJUB.h | 668 +-- .../includes/fp_MDC.h | 668 +-- .../includes/fp_NIST256.h | 668 +-- .../includes/fp_NIST384.h | 668 +-- .../includes/fp_NIST521.h | 668 +-- .../includes/fp_SECP160R1.h | 668 +-- .../includes/fp_SECP256K1.h | 668 +-- .../includes/fp_SM2.h | 668 +-- .../includes/fp_TWEEDLEDEE.h | 668 +-- .../includes/fp_TWEEDLEDUM.h | 668 +-- .../includes/hpke.h | 0 .../includes/hpke_ANSSI.h | 246 +- .../includes/hpke_BLS12381.h | 246 +- .../includes/hpke_BLS12383.h | 246 +- .../includes/hpke_BLS12443.h | 246 +- .../includes/hpke_BLS12461.h | 246 +- .../includes/hpke_BLS24479.h | 246 +- .../includes/hpke_BLS48286.h | 246 +- .../includes/hpke_BLS48556.h | 246 +- .../includes/hpke_BLS48581.h | 246 +- .../includes/hpke_BN158.h | 246 +- .../includes/hpke_BN254.h | 246 +- .../includes/hpke_BN254CX.h | 246 +- .../includes/hpke_BN462.h | 246 +- .../includes/hpke_BRAINPOOL.h | 246 +- .../includes/hpke_C1174.h | 246 +- .../includes/hpke_C13318.h | 246 +- .../includes/hpke_C1665.h | 246 +- .../includes/hpke_C25519.h | 246 +- .../includes/hpke_C41417.h | 246 +- .../includes/hpke_Ed25519.h | 246 +- .../includes/hpke_Ed448.h | 246 +- .../includes/hpke_FP256BN.h | 246 +- .../includes/hpke_FP512BN.h | 246 +- .../includes/hpke_HIFIVE.h | 246 +- .../includes/hpke_JUBJUB.h | 246 +- .../includes/hpke_MDC.h | 246 +- .../includes/hpke_NIST256.h | 246 +- .../includes/hpke_NIST384.h | 246 +- .../includes/hpke_NIST521.h | 246 +- .../includes/hpke_NUMS256E.h | 246 +- .../includes/hpke_NUMS256W.h | 246 +- .../includes/hpke_NUMS384E.h | 246 +- .../includes/hpke_NUMS384W.h | 246 +- .../includes/hpke_NUMS512E.h | 246 +- .../includes/hpke_NUMS512W.h | 246 +- .../includes/hpke_SECP160R1.h | 246 +- .../includes/hpke_SECP256K1.h | 246 +- .../includes/hpke_SM2.h | 246 +- .../includes/hpke_TWEEDLEDEE.h | 246 +- .../includes/hpke_TWEEDLEDUM.h | 246 +- .../includes/hpke_X448.h | 246 +- .../includes/kyber.h | 0 .../includes/mpin.h | 0 .../includes/mpin192.h | 0 .../includes/mpin192_BLS24479.h | 272 +- .../includes/mpin256.h | 0 .../includes/mpin256_BLS48286.h | 266 +- .../includes/mpin256_BLS48556.h | 266 +- .../includes/mpin256_BLS48581.h | 266 +- .../includes/mpin_BLS12381.h | 272 +- .../includes/mpin_BLS12383.h | 272 +- .../includes/mpin_BLS12443.h | 272 +- .../includes/mpin_BLS12461.h | 272 +- .../includes/mpin_BN158.h | 272 +- .../includes/mpin_BN254.h | 272 +- .../includes/mpin_BN254CX.h | 272 +- .../includes/mpin_BN462.h | 272 +- .../includes/mpin_FP256BN.h | 272 +- .../includes/mpin_FP512BN.h | 272 +- .../includes/newhope.h | 0 .../includes/pair.h | 0 .../includes/pair4.h | 0 .../includes/pair4_BLS24479.h | 360 +- .../includes/pair8.h | 0 .../includes/pair8_BLS48286.h | 358 +- .../includes/pair8_BLS48556.h | 358 +- .../includes/pair8_BLS48581.h | 358 +- .../includes/pair_BLS12381.h | 366 +- .../includes/pair_BLS12383.h | 366 +- .../includes/pair_BLS12443.h | 366 +- .../includes/pair_BLS12461.h | 366 +- .../includes/pair_BN158.h | 366 +- .../includes/pair_BN254.h | 366 +- .../includes/pair_BN254CX.h | 366 +- .../includes/pair_BN462.h | 366 +- .../includes/pair_FP256BN.h | 366 +- .../includes/pair_FP512BN.h | 366 +- .../includes/randapi.h | 0 .../includes/rsa.h | 0 .../includes/rsa_RSA2048.h | 276 +- .../includes/rsa_RSA3072.h | 276 +- .../includes/rsa_RSA4096.h | 276 +- .../includes/x509.h | 0 TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/core.a | Bin 5928946 -> 5925000 bytes TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/core.a | Bin 7810726 -> 0 bytes .../sal/miraclhgj/includes/.gitignore | 33 - .../sal/miraclhgj/includes/aes.cpp | 803 --- .../sal/miraclhgj/includes/benchtest_all | Bin 924720 -> 0 bytes .../sal/miraclhgj/includes/benchtest_all.cpp | 1462 ------ .../sal/miraclhgj/includes/big.cpp | 1830 ------- .../sal/miraclhgj/includes/bls.cpp | 188 - .../sal/miraclhgj/includes/bls192.cpp | 189 - .../sal/miraclhgj/includes/bls256.cpp | 185 - .../sal/miraclhgj/includes/blsrev.cpp | 165 - .../sal/miraclhgj/includes/blsrev192.cpp | 167 - .../sal/miraclhgj/includes/blsrev256.cpp | 172 - .../sal/miraclhgj/includes/config16.py | 744 --- .../sal/miraclhgj/includes/config32.py | 983 ---- .../sal/miraclhgj/includes/config64.py | 1036 ---- .../sal/miraclhgj/includes/dilithium.cpp | 1224 ----- .../sal/miraclhgj/includes/ecdh.cpp | 394 -- .../sal/miraclhgj/includes/ecp.cpp | 1798 ------- .../sal/miraclhgj/includes/ecp2.cpp | 998 ---- .../sal/miraclhgj/includes/ecp4.cpp | 952 ---- .../sal/miraclhgj/includes/ecp8.cpp | 1118 ---- .../sal/miraclhgj/includes/eddsa.cpp | 409 -- .../sal/miraclhgj/includes/ff.cpp | 1039 ---- .../sal/miraclhgj/includes/fp.cpp | 940 ---- .../sal/miraclhgj/includes/fp12.cpp | 952 ---- .../sal/miraclhgj/includes/fp16.cpp | 610 --- .../sal/miraclhgj/includes/fp2.cpp | 527 -- .../sal/miraclhgj/includes/fp24.cpp | 1018 ---- .../sal/miraclhgj/includes/fp4.cpp | 729 --- .../sal/miraclhgj/includes/fp48.cpp | 1092 ---- .../sal/miraclhgj/includes/fp8.cpp | 732 --- .../sal/miraclhgj/includes/gcm.cpp | 440 -- .../sal/miraclhgj/includes/hash.cpp | 659 --- .../sal/miraclhgj/includes/hmac.cpp | 701 --- .../sal/miraclhgj/includes/hpke.cpp | 281 - .../sal/miraclhgj/includes/kyber.cpp | 812 --- .../sal/miraclhgj/includes/mpin.cpp | 229 - .../sal/miraclhgj/includes/mpin192.cpp | 224 - .../sal/miraclhgj/includes/mpin256.cpp | 224 - .../sal/miraclhgj/includes/newhope.cpp | 517 -- .../sal/miraclhgj/includes/oct.cpp | 446 -- .../sal/miraclhgj/includes/pair.cpp | 1233 ----- .../sal/miraclhgj/includes/pair4.cpp | 1087 ---- .../sal/miraclhgj/includes/pair8.cpp | 1181 ----- .../sal/miraclhgj/includes/rand.cpp | 174 - .../sal/miraclhgj/includes/randapi.cpp | 36 - .../sal/miraclhgj/includes/readme.md | 124 - .../miraclhgj/includes/rom_curve_ANSSI.cpp | 60 - .../miraclhgj/includes/rom_curve_BLS12381.cpp | 113 - .../miraclhgj/includes/rom_curve_BLS12383.cpp | 79 - .../miraclhgj/includes/rom_curve_BLS12443.cpp | 97 - .../miraclhgj/includes/rom_curve_BLS12461.cpp | 79 - .../miraclhgj/includes/rom_curve_BLS24479.cpp | 90 - .../miraclhgj/includes/rom_curve_BLS48286.cpp | 102 - .../miraclhgj/includes/rom_curve_BLS48556.cpp | 107 - .../miraclhgj/includes/rom_curve_BLS48581.cpp | 107 - .../miraclhgj/includes/rom_curve_BN158.cpp | 82 - .../miraclhgj/includes/rom_curve_BN254.cpp | 107 - .../miraclhgj/includes/rom_curve_BN254CX.cpp | 104 - .../miraclhgj/includes/rom_curve_BN462.cpp | 92 - .../includes/rom_curve_BRAINPOOL.cpp | 61 - .../miraclhgj/includes/rom_curve_C1174.cpp | 60 - .../miraclhgj/includes/rom_curve_C13318.cpp | 60 - .../miraclhgj/includes/rom_curve_C1665.cpp | 60 - .../miraclhgj/includes/rom_curve_C25519.cpp | 54 - .../miraclhgj/includes/rom_curve_C41417.cpp | 60 - .../miraclhgj/includes/rom_curve_Ed25519.cpp | 70 - .../miraclhgj/includes/rom_curve_Ed448.cpp | 64 - .../miraclhgj/includes/rom_curve_FP256BN.cpp | 104 - .../miraclhgj/includes/rom_curve_FP512BN.cpp | 109 - .../miraclhgj/includes/rom_curve_HIFIVE.cpp | 61 - .../miraclhgj/includes/rom_curve_JUBJUB.cpp | 59 - .../sal/miraclhgj/includes/rom_curve_MDC.cpp | 61 - .../miraclhgj/includes/rom_curve_NIST256.cpp | 61 - .../miraclhgj/includes/rom_curve_NIST384.cpp | 60 - .../miraclhgj/includes/rom_curve_NIST521.cpp | 60 - .../miraclhgj/includes/rom_curve_NUMS256E.cpp | 68 - .../miraclhgj/includes/rom_curve_NUMS256W.cpp | 60 - .../miraclhgj/includes/rom_curve_NUMS384E.cpp | 61 - .../miraclhgj/includes/rom_curve_NUMS384W.cpp | 60 - .../miraclhgj/includes/rom_curve_NUMS512E.cpp | 61 - .../miraclhgj/includes/rom_curve_NUMS512W.cpp | 60 - .../includes/rom_curve_SECP160R1.cpp | 71 - .../includes/rom_curve_SECP256K1.cpp | 77 - .../sal/miraclhgj/includes/rom_curve_SM2.cpp | 61 - .../includes/rom_curve_TWEEDLEDEE.cpp | 62 - .../includes/rom_curve_TWEEDLEDUM.cpp | 62 - .../sal/miraclhgj/includes/rom_curve_X448.cpp | 55 - .../miraclhgj/includes/rom_field_ANSSI.cpp | 54 - .../miraclhgj/includes/rom_field_BLS12381.cpp | 61 - .../miraclhgj/includes/rom_field_BLS12383.cpp | 64 - .../miraclhgj/includes/rom_field_BLS12443.cpp | 62 - .../miraclhgj/includes/rom_field_BLS12461.cpp | 62 - .../miraclhgj/includes/rom_field_BLS24479.cpp | 62 - .../miraclhgj/includes/rom_field_BLS48286.cpp | 64 - .../miraclhgj/includes/rom_field_BLS48556.cpp | 64 - .../miraclhgj/includes/rom_field_BLS48581.cpp | 64 - .../miraclhgj/includes/rom_field_BN158.cpp | 63 - .../miraclhgj/includes/rom_field_BN254.cpp | 73 - .../miraclhgj/includes/rom_field_BN254CX.cpp | 72 - .../miraclhgj/includes/rom_field_BN462.cpp | 62 - .../includes/rom_field_BRAINPOOL.cpp | 54 - .../miraclhgj/includes/rom_field_C1174.cpp | 54 - .../miraclhgj/includes/rom_field_C1665.cpp | 54 - .../miraclhgj/includes/rom_field_C41417.cpp | 54 - .../miraclhgj/includes/rom_field_F25519.cpp | 64 - .../miraclhgj/includes/rom_field_F256PME.cpp | 62 - .../miraclhgj/includes/rom_field_F256PMW.cpp | 56 - .../miraclhgj/includes/rom_field_F384PM.cpp | 55 - .../sal/miraclhgj/includes/rom_field_F448.cpp | 58 - .../miraclhgj/includes/rom_field_F512PM.cpp | 55 - .../miraclhgj/includes/rom_field_FP256BN.cpp | 67 - .../miraclhgj/includes/rom_field_FP512BN.cpp | 69 - .../miraclhgj/includes/rom_field_HIFIVE.cpp | 55 - .../miraclhgj/includes/rom_field_JUBJUB.cpp | 54 - .../sal/miraclhgj/includes/rom_field_MDC.cpp | 54 - .../miraclhgj/includes/rom_field_NIST256.cpp | 55 - .../miraclhgj/includes/rom_field_NIST384.cpp | 55 - .../miraclhgj/includes/rom_field_NIST521.cpp | 54 - .../includes/rom_field_SECP160R1.cpp | 64 - .../includes/rom_field_SECP256K1.cpp | 60 - .../sal/miraclhgj/includes/rom_field_SM2.cpp | 55 - .../includes/rom_field_TWEEDLEDEE.cpp | 57 - .../includes/rom_field_TWEEDLEDUM.cpp | 57 - .../sal/miraclhgj/includes/rsa.cpp | 184 - .../sal/miraclhgj/includes/share.cpp | 231 - .../sal/miraclhgj/includes/testbls | Bin 703792 -> 0 bytes .../sal/miraclhgj/includes/testbls.cpp | 322 -- .../sal/miraclhgj/includes/testdlthm | Bin 82512 -> 0 bytes .../sal/miraclhgj/includes/testdlthm.cpp | 93 - .../sal/miraclhgj/includes/testecc | Bin 381104 -> 0 bytes .../sal/miraclhgj/includes/testecc.cpp | 623 --- .../sal/miraclhgj/includes/testeddsa | Bin 213784 -> 0 bytes .../sal/miraclhgj/includes/testeddsa.cpp | 191 - .../sal/miraclhgj/includes/testhpke.cpp | 590 --- .../sal/miraclhgj/includes/testhtp.cpp | 714 --- .../sal/miraclhgj/includes/testkyber | Bin 66872 -> 0 bytes .../sal/miraclhgj/includes/testkyber.cpp | 101 - .../sal/miraclhgj/includes/testmpin | Bin 713344 -> 0 bytes .../sal/miraclhgj/includes/testmpin.cpp | 527 -- .../sal/miraclhgj/includes/testnhs | Bin 69040 -> 0 bytes .../sal/miraclhgj/includes/testnhs.cpp | 76 - .../sal/miraclhgj/includes/testx509.cpp | 504 -- .../sal/miraclhgj/includes/x509.cpp | 1170 ----- 1117 files changed, 84896 insertions(+), 135449 deletions(-) create mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/CHANGES.md delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.internal delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.internal create mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results2.txt rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/core.a (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/arch.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/big.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B160_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B168_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B256_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B288_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B336_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B384_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B384_58.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B416_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B448_58.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B448_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B464_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B480_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B512_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B528_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B560_58.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/big_B584_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/bls.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/bls192.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls192_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/bls256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls256_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls256_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls256_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/bls_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/config_big.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B160_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B168_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B256_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B288_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B336_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B384_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B384_58.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B416_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B448_58.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B448_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B464_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B480_56.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B512_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B528_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B560_58.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_big_B584_60.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/config_curve.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_C13318.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_C25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_Ed25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_Ed448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NUMS256E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NUMS256W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NUMS384E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NUMS384W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NUMS512E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_NUMS512W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_curve_X448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/config_ff.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_ff_RSA2048.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_ff_RSA3072.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_ff_RSA4096.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/config_field.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_F25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_F256PME.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_F256PMW.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_F384PM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_F448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_F512PM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/config_field_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/core.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/dilithium.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/ecdh.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_C13318.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_C25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_Ed25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_Ed448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NUMS256E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NUMS256W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NUMS384E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NUMS384W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NUMS512E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_NUMS512W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecdh_X448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/ecp.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/ecp2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp2_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/ecp4.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp4_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/ecp8.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp8_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp8_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp8_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_C13318.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_C25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_Ed25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_Ed448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NUMS256E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NUMS256W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NUMS384E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NUMS384W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NUMS512E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_NUMS512W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ecp_X448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/eddsa.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_C13318.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_C25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_Ed25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_Ed448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NUMS256E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NUMS256W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NUMS384E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NUMS384W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NUMS512E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_NUMS512W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/eddsa_X448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/ff.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ff_RSA2048.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ff_RSA3072.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/ff_RSA4096.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp12.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp12_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp16.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp16_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp16_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp16_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp24.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp24_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp2_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp4.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp48.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp48_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp48_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp48_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp4_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/fp8.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp8_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp8_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp8_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp8_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_F25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_F256PME.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_F256PMW.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_F384PM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_F448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_F512PM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/fp_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/hpke.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_ANSSI.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_BRAINPOOL.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_C1174.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_C13318.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_C1665.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_C25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_C41417.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_Ed25519.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_Ed448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_HIFIVE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_JUBJUB.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_MDC.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NIST256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NIST384.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NIST521.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NUMS256E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NUMS256W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NUMS384E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NUMS384W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NUMS512E.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_NUMS512W.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_SECP160R1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_SECP256K1.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_SM2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_TWEEDLEDEE.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_TWEEDLEDUM.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/hpke_X448.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/kyber.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/mpin.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/mpin192.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin192_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/mpin256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin256_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin256_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin256_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/mpin_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/newhope.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/pair.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/pair4.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair4_BLS24479.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/pair8.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair8_BLS48286.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair8_BLS48556.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair8_BLS48581.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BLS12381.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BLS12383.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BLS12443.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BLS12461.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BN158.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BN254.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BN254CX.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_BN462.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_FP256BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/pair_FP512BN.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/randapi.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/rsa.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/rsa_RSA2048.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/rsa_RSA3072.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-old}/includes/rsa_RSA4096.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-old}/includes/x509.h (100%) create mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/core.a rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/arch.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/big.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B160_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B168_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B256_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B288_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B336_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B384_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B384_58.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B416_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B448_58.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B448_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B464_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B480_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B512_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B528_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B560_58.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/big_B584_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/bls.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/bls192.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls192_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/bls256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls256_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls256_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls256_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/bls_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/config_big.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B160_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B168_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B256_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B288_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B336_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B384_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B384_58.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B416_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B448_58.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B448_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B464_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B480_56.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B512_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B528_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B560_58.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_big_B584_60.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/config_curve.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_ANSSI.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_BRAINPOOL.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_C1174.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_C13318.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_C1665.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_C25519.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_C41417.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_Ed25519.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_Ed448.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_HIFIVE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_JUBJUB.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_MDC.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NIST256.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NIST384.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NIST521.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NUMS256E.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NUMS256W.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NUMS384E.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NUMS384W.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NUMS512E.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_NUMS512W.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_SECP160R1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_SECP256K1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_SM2.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_TWEEDLEDEE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_TWEEDLEDUM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_curve_X448.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/config_ff.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_ff_RSA2048.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_ff_RSA3072.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_ff_RSA4096.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/config_field.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_ANSSI.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_BRAINPOOL.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_C1174.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_C1665.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_C41417.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_F25519.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_F256PME.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_F256PMW.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_F384PM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_F448.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_F512PM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_HIFIVE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_JUBJUB.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_MDC.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_NIST256.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_NIST384.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_NIST521.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_SECP160R1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_SECP256K1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_SM2.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_TWEEDLEDEE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/config_field_TWEEDLEDUM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/core.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/dilithium.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/ecdh.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_ANSSI.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS12381.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS12383.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS12443.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS12461.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS24479.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS48286.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS48556.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BLS48581.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BN158.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BN254.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BN254CX.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BN462.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_BRAINPOOL.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_C1174.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_C13318.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_C1665.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_C25519.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_C41417.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_Ed25519.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_Ed448.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_FP256BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_FP512BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_HIFIVE.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_JUBJUB.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_MDC.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NIST256.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NIST384.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NIST521.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NUMS256E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NUMS256W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NUMS384E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NUMS384W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NUMS512E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_NUMS512W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_SECP160R1.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_SECP256K1.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_SM2.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_TWEEDLEDEE.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_TWEEDLEDUM.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecdh_X448.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/ecp.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/ecp2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BLS12381.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BLS12383.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BLS12443.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BLS12461.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BN158.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BN254.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BN254CX.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_BN462.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_FP256BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp2_FP512BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/ecp4.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp4_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/ecp8.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp8_BLS48286.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp8_BLS48556.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp8_BLS48581.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_ANSSI.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS12381.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS12383.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS12443.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS12461.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS24479.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS48286.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS48556.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BLS48581.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BN158.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BN254.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BN254CX.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BN462.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_BRAINPOOL.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_C1174.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_C13318.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_C1665.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_C25519.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_C41417.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_Ed25519.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_Ed448.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_FP256BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_FP512BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_HIFIVE.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_JUBJUB.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_MDC.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NIST256.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NIST384.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NIST521.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NUMS256E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NUMS256W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NUMS384E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NUMS384W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NUMS512E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_NUMS512W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_SECP160R1.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_SECP256K1.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_SM2.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_TWEEDLEDEE.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_TWEEDLEDUM.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ecp_X448.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/eddsa.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_ANSSI.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_BRAINPOOL.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_C1174.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_C13318.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_C1665.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_C25519.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_C41417.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_Ed25519.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_Ed448.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_HIFIVE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_JUBJUB.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_MDC.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NIST256.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NIST384.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NIST521.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NUMS256E.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NUMS256W.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NUMS384E.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NUMS384W.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NUMS512E.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_NUMS512W.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_SECP160R1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_SECP256K1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_SM2.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_TWEEDLEDEE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_TWEEDLEDUM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/eddsa_X448.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/ff.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ff_RSA2048.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ff_RSA3072.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/ff_RSA4096.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp12.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp12_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp16.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp16_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp16_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp16_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp2.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp24.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp24_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp2_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp4.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp48.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp48_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp48_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp48_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp4_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/fp8.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp8_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp8_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp8_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp8_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_ANSSI.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_BRAINPOOL.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_C1174.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_C1665.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_C41417.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_F25519.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_F256PME.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_F256PMW.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_F384PM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_F448.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_F512PM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_HIFIVE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_JUBJUB.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_MDC.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_NIST256.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_NIST384.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_NIST521.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_SECP160R1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_SECP256K1.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_SM2.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_TWEEDLEDEE.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/fp_TWEEDLEDUM.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/hpke.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_ANSSI.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS12381.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS12383.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS12443.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS12461.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS24479.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS48286.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS48556.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BLS48581.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BN158.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BN254.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BN254CX.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BN462.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_BRAINPOOL.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_C1174.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_C13318.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_C1665.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_C25519.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_C41417.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_Ed25519.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_Ed448.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_FP256BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_FP512BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_HIFIVE.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_JUBJUB.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_MDC.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NIST256.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NIST384.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NIST521.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NUMS256E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NUMS256W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NUMS384E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NUMS384W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NUMS512E.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_NUMS512W.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_SECP160R1.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_SECP256K1.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_SM2.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_TWEEDLEDEE.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_TWEEDLEDUM.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/hpke_X448.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/kyber.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/mpin.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/mpin192.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin192_BLS24479.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/mpin256.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin256_BLS48286.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin256_BLS48556.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin256_BLS48581.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BLS12381.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BLS12383.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BLS12443.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BLS12461.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BN158.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BN254.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BN254CX.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_BN462.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_FP256BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/mpin_FP512BN.h (97%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/newhope.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/pair.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/pair4.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair4_BLS24479.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/pair8.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair8_BLS48286.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair8_BLS48556.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair8_BLS48581.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BLS12381.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BLS12383.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BLS12443.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BLS12461.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BN158.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BN254.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BN254CX.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_BN462.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_FP256BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/pair_FP512BN.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/randapi.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/rsa.h (100%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/rsa_RSA2048.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/rsa_RSA3072.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miraclhgj => miracl-winx64-15-04-24}/includes/rsa_RSA4096.h (96%) rename TIIGER_TLS/PQ_TIIGER_TLS/sal/{miracllll => miracl-winx64-15-04-24}/includes/x509.h (100%) delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/core.a delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/.gitignore delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/aes.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/benchtest_all delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/benchtest_all.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev192.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev256.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config16.py delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config32.py delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config64.py delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/dilithium.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp2.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp4.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp8.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/eddsa.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/gcm.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/hash.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/hmac.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/hpke.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/kyber.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin192.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin256.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/newhope.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/oct.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair4.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair8.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rand.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/randapi.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/readme.md delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_ANSSI.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12381.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12383.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12443.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12461.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS24479.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48286.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48556.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48581.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN158.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254CX.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN462.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BRAINPOOL.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1174.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C13318.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1665.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C25519.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C41417.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed25519.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed448.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP256BN.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP512BN.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_HIFIVE.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_JUBJUB.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_MDC.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST256.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST384.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST521.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256E.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256W.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384E.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384W.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512E.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512W.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP160R1.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP256K1.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SM2.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDEE.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDUM.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_X448.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_ANSSI.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12381.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12383.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12443.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12461.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS24479.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48286.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48556.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48581.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN158.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254CX.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN462.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BRAINPOOL.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1174.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1665.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C41417.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F25519.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PME.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PMW.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F384PM.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F448.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F512PM.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP256BN.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP512BN.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_HIFIVE.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_JUBJUB.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_MDC.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST256.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST384.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST521.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP160R1.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP256K1.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SM2.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDEE.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDUM.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rsa.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/share.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testbls delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testbls.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testeddsa delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testeddsa.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhpke.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhtp.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testkyber delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testkyber.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testmpin delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testmpin.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testnhs delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testnhs.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testx509.cpp delete mode 100644 TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/x509.cpp diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CHANGES.md b/TIIGER_TLS/PQ_TIIGER_TLS/CHANGES.md new file mode 100644 index 0000000..e5fa255 --- /dev/null +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CHANGES.md @@ -0,0 +1,243 @@ +# Change Log +All notable changes to this project will be documented in this file. + +## 2023-11-20 +### Added + +- support for Windows platform: + - pre-processor condition with Windows headers *winsock2.h*, *afunix.h*, *ws2tcpip.h* in tls_sockets.h + + - pre-processor condition in *int setclientsock()* function - changing input argument in *setsockopt()* function for Windows compatibility in tls_sockets.cpp + + - WSA structure inicialization and cleanup in client.cpp file + + - linking *-lws2_32* in CMakeLists.txt + +- *-lstdc++* in CMakeLists.txt for compatibility with gcc + + +## 2023-11-20 +### Added + +- Header file *oqs/oqs.h* and *oqs/oqsconfig.h* from liboqs library + +- linking liboqs library with *-loqs* in CMakeLists.txt + +### Changed + +- Library name in *char *SAL_name()* +- Random number generator *OQS_randombytes()* in *bool SAL_initLib()* + +### Removed +- Unused conditions and functions + +## 2023-12-22 +### Added + +- Notes for dilithium3 functions from liboqs + +## 2024-01-13 +### Changed + +- *void SAL_generateKeyPair()* for kyber768 now working with function from liboqs + +- both *static bool DILITHIUM3_VERIFY()* and *static void DILITHIUM3_SIGN()* now working with functions from liboqs + +### Removed + +- Unused declarations and variables + +## 2024-01-15 +### Changed + +- *bool SAL_generateSharedSecret()* for kyber768 now working with function from liboqs + +### Removed + +- Header file *kyber.h* +- Unused declarations and variables + +## 2024-01-25 +### Added + +- New CA certificate for https://test.openquantumsafe.org/ in tls_cacerts.cpp + +### Changed +- Client certificate update + +## 2024-02-17 +### Added + +- TLS IDs for PQ KEM algorithms based on https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md in tls1_3.h + +- new PQ KEM algorithms in *int SAL_groups()* + +- functions for key generating for kyber512, kyber1024, bikel1, bikel3, bikel5, hqc128, hqc192, hqc256, FrodoKEM-640-AES, FrodoKEM-640-SHAKE, FrodoKEM-976-AES, FrodoKEM-976-SHAKE, FrodoKEM-1344-AES, FrodoKEM-1344-SHAKE in *void SAL_generateKeyPair()* function + +- decapsulation functions for kyber512, kyber1024, bikel1, bikel3, bikel5, hqc128, hqc192, hqc256, FrodoKEM-640-AES, FrodoKEM-640-SHAKE, FrodoKEM-976-AES, FrodoKEM-976-SHAKE, FrodoKEM-1344-AES, FrodoKEM-1344-SHAKE in *bool SAL_generateSharedSecret()* + +### Changed + +- variables for PQ crypto_setting in tls1_3.h file: + - TLS_MAX_KEX_PUB_KEY_SIZE - according the biggest public key size from all available KEM algorithm (FrodoKEM-1344-SHAKE) + - TLS_MAX_KEX_CIPHERTEXT_SIZE - according the biggest ciphertext size from all available KEM algorithm (FrodoKEM-1344-SHAKE) + - TLS_MAX_KEX_SECRET_KEY_SIZE - according the biggest secret key size from all available KEM algorithm (FrodoKEM-1344-SHAKE) + - TLS_MAX_SUPPORTED_GROUPS - need to raise the variable because of adding more KEM algorithms + +27-29 +## 2024-02-26 +### Added + +- listing of KEM key sizes (public and private keys) in client.cpp + +- TLS IDs for PQ signature algorithms in tls1_3.h based on https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md + +- Object IDs for dilitihum2 and dilitihum3 in tls_x509.cpp based on https://github.com/open-quantum-safe/oqs-provider/blob/main/ALGORITHMS.md + +- PQ curve variables for dilitihum2, dilitihum3 and dilitihum5 in tls_x509.h for recognizing used algorithm in further processing + +- PQ signature algorithms dilithium2 and dilithium5 in *int SAL_sigs()* and *int SAL_sigCerts()* + +- verification functions for PQ signature algorithms dilithium2, dilithium5; calling them in *bool SAL_tlsSignatureVerify()* + +- signing functions for PQ signature algorithms dilithium2, dilithium5; calling them in *void SAL_tlsSignature()* + +- listing of all new KEM and dilithium signature algorithms in tls_logger.cpp and client.cpp + +- conditions for certificate verification for dilitihum2, dilithium3 and dilithium5 in tls_cert_chain.cpp + +- functions for public and private key from PQ certificates, setting PQ curve for further processing + +## 2024-02-27 +### Added + +- verification functions for PQ signature algorithms falcon512, falcon1024, SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHA2-192f-simple, SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple, SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple; ; calling them in *bool SAL_tlsSignatureVerify()* + +- signing functions for PQ signature algorithms falcon512, falcon1024, SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHA2-192f-simple, SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple, SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple; ; calling them in *void SAL_tlsSignature()* + +## 2024-02-28 +### Added + +- PQ curve variables for falcon512, falcon1024, SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHA2-192f-simple + +- Object IDs for falcon512, falcon1024, SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHA2-192f-simple + +- conditions for certificate verification for falcon512, falcon1024, SPHINCS+-SHA2-128f-simple, SPHINCS+-SHA2-128s-simple, SPHINCS+-SHAKE-128f-simple, SPHINCS+-SHA2-192f-simple + +- functions for public and private key from PQ certificates, setting PQ curve for further processing + +- listing of all new PQ signature algorithms in tls_logger.cpp and client.cpp + +### Removed +- TLS IDs for unsupported PQ signature algorithms (unsupported by oqsprovider (unable to test them)) - SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple + +- verification functions for unsupported PQ signature algorithms (unsupported by oqsprovider (unable to test them)) - SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple + +- signing functions for unsupported PQ signature algorithms (unsupported by oqsprovider (unable to test them)) - SPHINCS+-SHA2-192s-simple, SPHINCS+-SHA2-256f-simple, SPHINCS+-SHA2-256s-simple, SPHINCS+-SHAKE-128s-simple, SPHINCS+-SHAKE-192f-simple, SPHINCS+-SHAKE-192s-simple, SPHINCS+-SHAKE-256f-simple, SPHINCS+-SHAKE-256s-simple + +### Changed + +- Linux pre-processor condition for BIKE signature algorithm (BIKE is not supported on Windows platform (yet)) in *void SAL_generateKeyPair()* + +- variables for PQ crypto_setting in tls1_3.h file: + - TLS_MAX_SIG_PUB_KEY_SIZE - according the biggest public key size from all available signature algorithms (dilithium5) + - TLS_MAX_SIG_SECRET_KEY_SIZE - according the biggest secret key size from all available signature algorithms (dilithium5) + - TLS_MAX_SIGNATURE_SIZE - according the biggest signature size from all available signature algorithms (SPHINCS+-SHA2-128f-simple or SPHINCS+-SHAKE-128f-simple) + - TLS_MAX_SUPPORTED_SIGS - need to raise the variable because of adding more signature algorithms + - MAX_IBUFF_SIZE - need to raise the variable because of bigger size of certchain (SPHINCS+-SHAKE-128f-simple) + - TLS_X509_MAX_FIELD - need to raise the variable because of bigger size of certchain (SPHINCS+-SHAKE-128f-simple) + +### Tested + +- all KEM protocols and signature algorithms with OpenSSL native server and test.openquantumsafe.org server + +- correct behaviour on Linux and Windows x64 platform + +## 2024-02-29 +### Changed + +- same PQ curve for SPHINCS+-SHA2-128f-simple and SPHINCS+-SHAKE-128f-simple (same size) +- calling verification functions for both SPHINCS+-SHA2-128f-simple and SPHINCS+-SHAKE-128f-simple + +### Removed + +- sign and verify function for SPHINCS+-SHA2-192f-simple (return of wrong expiration date; bug?) +- removed all added changes associated with SPHINCS+-SHA2-192f-simple (ID, OID, curve, conditions) + +## 2024-03-01 +### Added + +- *OQS_TEST_results.txt* with results of testing on test.openquantumsafe.org server + +### Removed + +- unused functions and variables for unsupported algorithms by liboqs or oqsprovider (unable to test them) + +## 2024-03-03 +### Added + +- comments about changes of functions and variables + +- comments on the beggining of every changed file + +- readme with information about building and using the client, summary of all changes, details of testing + +### Removed + +- arduino conditions in files: tls_octads.h, tls_sockets.h, tls_logger.cpp, tls_octads.cpp, tls_sockets.cpp + +- files for arduino - arduino/client.cpp, wifi.h + +- removed unnecessery files: blogs, unused .xpp files + +## 2024-03-03 +### Changed + +- *OQS_randombytes()* used as seed for original miracl rng + +## 2024-03-04 +### Added + +- .exe file for Windows x64 generated with CMake 'MinGW file' instead 'Unix MakeFile' + +- miracl core folders for Windows x64, Windows x86 and Linux Ubuntu 22.04 in sal folder + +- readme in sal folder with guideline for generating miracl core files + +- permanent library linking *-lws2_32* in CMakeLists.txt for Windows compatibility (remove in case of Linux platform) + +### Removed + +- unused conditions and variables from CMakeLists.txt + +## 2024-04-14 +### Added + +- IDs for ML-KEM and ML-DSA + +- functions for key generating for ml-kem512, ml-kem768, ml-kem1024 + +- decapsulation functions for ml-kem512, ml-kem768, ml-kem1024 + +- object IDs for ML-KEM and ML-DSA + +- signing functions for PQ signature algorithms ml-dsa44, ml-dsa65, ml-dsa87; calling them in *void SAL_tlsSignature()* + +- listing of ML-KEMs and ML-DSAs in tls_logger.cpp and client.cpp + +- conditions for certificate verification for ml-dsa44, ml-dsa65, ml-dsa87 in tls_cert_chain.cpp + +- functions for public and private key from PQ certificates, setting PQ curve for further processing + +- new PQ curve to distinguish SPHINCS+-SHA2-128f-simple and SPHINCS+-SHAKE-128f-simple + +### Changed + +- IDs for HQC and Falcon algorithms according to https://github.com/open-quantum-safe/oqs-provider/releases/tag/0.6.0 + +- PQ curves for all PQ signature schemes + +## 2024-04-15 +### Added + +- *OQS_TEST_results2.txt* with results of testing on test.openquantumsafe.org server with new \ No newline at end of file diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeCache.txt b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeCache.txt index c1dc5d3..9fc8ab5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeCache.txt +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeCache.txt @@ -1,5 +1,5 @@ # This is the CMakeCache file. -# For build in directory: d:/DOKUMENTY/diplomovka-final/Scott-cpp-win +# For build in directory: d:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS # It was generated by CMake: C:/mingw64/bin/cmake.exe # You can edit this file to change values found and used by cmake. # If you do not want to change any of the values, simply exit the editor. @@ -104,7 +104,7 @@ CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Value Computed by CMake. -CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/pkgRedirects +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/pkgRedirects //Convert GNU import libraries to MS format (requires Visual Studio) CMAKE_GNUtoMS:BOOL=OFF @@ -240,13 +240,13 @@ CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE //Value Computed by CMake -tiitls1.3_BINARY_DIR:STATIC=D:/DOKUMENTY/diplomovka-final/Scott-cpp-win +tiitls1.3_BINARY_DIR:STATIC=D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS //Value Computed by CMake tiitls1.3_IS_TOP_LEVEL:STATIC=ON //Value Computed by CMake -tiitls1.3_SOURCE_DIR:STATIC=D:/DOKUMENTY/diplomovka-final/Scott-cpp-win +tiitls1.3_SOURCE_DIR:STATIC=D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS ######################## @@ -258,7 +258,7 @@ CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_AR CMAKE_AR-ADVANCED:INTERNAL=1 //This is the directory where this CMakeCache.txt was created -CMAKE_CACHEFILE_DIR:INTERNAL=d:/DOKUMENTY/diplomovka-final/Scott-cpp-win +CMAKE_CACHEFILE_DIR:INTERNAL=d:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS //Major version of cmake used to create the current loaded cache CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 //Minor version of cmake used to create the current loaded cache @@ -335,7 +335,7 @@ CMAKE_GENERATOR_PLATFORM:INTERNAL= CMAKE_GENERATOR_TOOLSET:INTERNAL= //Source directory with the top level CMakeLists.txt file for this // project -CMAKE_HOME_DIRECTORY:INTERNAL=D:/DOKUMENTY/diplomovka-final/Scott-cpp-win +CMAKE_HOME_DIRECTORY:INTERNAL=D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS //ADVANCED property for variable: CMAKE_LINKER CMAKE_LINKER-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MAKE_PROGRAM diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin index d231954abe6ef82ef3d0cf1aa6ae267df682e1a9..8fe06c28d44c1060638b1d882b38a33662a87331 100644 GIT binary patch delta 22 ecmX^5mig#g<_R6lvHxTycKb5zP2YIy^;ZCbwF~zE delta 22 ecmX^5mig#g<_R6lhAX8fcKb3-5ZZX_^;ZCSy9)CF diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin index c0477e1a48069f2cc3e917c5d598d8378021019f..a9b99e7f3e3e15712272db001f4a4136e432370f 100644 GIT binary patch delta 22 ecmccdmifk8<_R6lvHxTycKb3FP2PCx-&X*I01OcT delta 22 ecmccdmifk8<_R6lhAX8fcKb59+HJh`?<)X&1`7=U diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CompilerIdC/a.exe b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CompilerIdC/a.exe index f50e503f7581c777772b75dd6205b6c5b4d77f6e..068042f7aa9924d006c3e6ea5ff42af98a64d246 100644 GIT binary patch delta 22 ccmbR6j(GwQbuh>LlbP7<%k)fh<1Mpq0C=ei#Q*>R delta 22 ccmbR6j(GwQbub&Ol%Ck_%e3Rl##?6J0CcGezyJUM diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CompilerIdCXX/a.exe b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CompilerIdCXX/a.exe index 95e0d1426db50de90f80a7e05a0430d671cb370a..18084ba6c50e8f4fccf88b892e76c7980ea12aa5 100644 GIT binary patch delta 22 ecmZ4Uj(N>H<_R6lG5=&HcKb33*=@WP^bG)b&I(!p delta 22 ecmZ4Uj(N>H<_R6l1}mi}cKb3td9m?U&^G{j$qQ5f diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeConfigureLog.yaml b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeConfigureLog.yaml index d401519..27605d5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeConfigureLog.yaml +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeConfigureLog.yaml @@ -28,7 +28,7 @@ events: Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.exe" The C compiler identification is GNU, found in: - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/3.28.2/CompilerIdC/a.exe + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CompilerIdC/a.exe - kind: "message-v1" @@ -50,7 +50,7 @@ events: Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.exe" The CXX compiler identification is GNU, found in: - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/3.28.2/CompilerIdCXX/a.exe + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/3.28.2/CompilerIdCXX/a.exe - kind: "try_compile-v1" @@ -61,8 +61,8 @@ events: checks: - "Detecting C compiler ABI info" directories: - source: "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b" - binary: "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b" + source: "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p" + binary: "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p" cmakeVariables: CMAKE_C_FLAGS: "" CMAKE_C_FLAGS_DEBUG: "-g" @@ -71,13 +71,13 @@ events: variable: "CMAKE_C_ABI_COMPILED" cached: true stdout: | - Change Dir: 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b' + Change Dir: 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p' - Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_e8c03/fast - C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_e8c03.dir\\build.make CMakeFiles/cmTC_e8c03.dir/build - mingw32-make[1]: Entering directory 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b' - Building C object CMakeFiles/cmTC_e8c03.dir/CMakeCCompilerABI.c.obj - C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c + Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_38c81/fast + C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_38c81.dir\\build.make CMakeFiles/cmTC_38c81.dir/build + mingw32-make[1]: Entering directory 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p' + Building C object CMakeFiles/cmTC_38c81.dir/CMakeCCompilerABI.c.obj + C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c Using built-in specs. COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe OFFLOAD_TARGET_NAMES=nvptx-none @@ -86,8 +86,8 @@ events: Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r5) - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_e8c03.dir\\' - C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles\\cmTC_e8c03.dir\\ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\cc717B8l.s + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_38c81.dir\\' + C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles\\cmTC_38c81.dir\\ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\cciqLujk.s GNU C17 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r5) version 13.2.0 (x86_64-w64-mingw32) compiled by GNU C version 13.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP @@ -106,17 +106,17 @@ events: C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include End of search list. Compiler executable checksum: 7a441bbadf19345f9c279b4b244f7757 - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_e8c03.dir\\' - C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj C:\\Users\\simko\\AppData\\Local\\Temp\\cc717B8l.s + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_38c81.dir\\' + C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj C:\\Users\\simko\\AppData\\Local\\Temp\\cciqLujk.s GNU assembler version 2.42 (x86_64-w64-mingw32) using BFD version (Binutils for MinGW-W64 x86_64, built by Brecht Sanders, r5) 2.42 COMPILER_PATH=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../libexec/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ LIBRARY_PATH=C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../lib/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../ - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.' - Linking C executable cmTC_e8c03.exe - C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_e8c03.dir\\link.txt --verbose=1 - C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_e8c03.dir/objects.a - C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_e8c03.dir/objects.a @CMakeFiles\\cmTC_e8c03.dir\\objects1.rsp - C:\\mingw64\\bin\\gcc.exe -v -Wl,--whole-archive CMakeFiles\\cmTC_e8c03.dir/objects.a -Wl,--no-whole-archive -o cmTC_e8c03.exe -Wl,--out-implib,libcmTC_e8c03.dll.a -Wl,--major-image-version,0,--minor-image-version,0 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.' + Linking C executable cmTC_38c81.exe + C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_38c81.dir\\link.txt --verbose=1 + C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_38c81.dir/objects.a + C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_38c81.dir/objects.a @CMakeFiles\\cmTC_38c81.dir\\objects1.rsp + C:\\mingw64\\bin\\gcc.exe -v -Wl,--whole-archive CMakeFiles\\cmTC_38c81.dir/objects.a -Wl,--no-whole-archive -o cmTC_38c81.exe -Wl,--out-implib,libcmTC_38c81.dll.a -Wl,--major-image-version,0,--minor-image-version,0 Using built-in specs. COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe @@ -128,10 +128,10 @@ events: gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r5) COMPILER_PATH=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../libexec/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ LIBRARY_PATH=C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../lib/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../ - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e8c03.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e8c03.' - C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\ccvQWfYs.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_e8c03.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_e8c03.dir/objects.a --no-whole-archive --out-implib libcmTC_e8c03.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e8c03.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e8c03.' - mingw32-make[1]: Leaving directory 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b' + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_38c81.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_38c81.' + C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\cchzEVFf.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_38c81.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_38c81.dir/objects.a --no-whole-archive --out-implib libcmTC_38c81.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_38c81.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_38c81.' + mingw32-make[1]: Leaving directory 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p' exitCode: 0 - @@ -165,13 +165,13 @@ events: message: | Parsed C implicit link information: link line regex: [^( *|.*[/\\])(ld\\.exe|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b'] + ignore line: [Change Dir: 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p'] ignore line: [] - ignore line: [Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_e8c03/fast] - ignore line: [C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_e8c03.dir\\build.make CMakeFiles/cmTC_e8c03.dir/build] - ignore line: [mingw32-make[1]: Entering directory 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-731u3b'] - ignore line: [Building C object CMakeFiles/cmTC_e8c03.dir/CMakeCCompilerABI.c.obj] - ignore line: [C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c] + ignore line: [Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_38c81/fast] + ignore line: [C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_38c81.dir\\build.make CMakeFiles/cmTC_38c81.dir/build] + ignore line: [mingw32-make[1]: Entering directory 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-cztr8p'] + ignore line: [Building C object CMakeFiles/cmTC_38c81.dir/CMakeCCompilerABI.c.obj] + ignore line: [C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe] ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] @@ -180,8 +180,8 @@ events: ignore line: [Thread model: posix] ignore line: [Supported LTO compression algorithms: zlib zstd] ignore line: [gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh built by Brecht Sanders r5) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_e8c03.dir\\'] - ignore line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles\\cmTC_e8c03.dir\\ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\cc717B8l.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_38c81.dir\\'] + ignore line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles\\cmTC_38c81.dir\\ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\cciqLujk.s] ignore line: [GNU C17 (MinGW-W64 x86_64-ucrt-posix-seh built by Brecht Sanders r5) version 13.2.0 (x86_64-w64-mingw32)] ignore line: [ compiled by GNU C version 13.2.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] ignore line: [] @@ -200,8 +200,8 @@ events: ignore line: [ C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include] ignore line: [End of search list.] ignore line: [Compiler executable checksum: 7a441bbadf19345f9c279b4b244f7757] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_e8c03.dir\\'] - ignore line: [ C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj C:\\Users\\simko\\AppData\\Local\\Temp\\cc717B8l.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_38c81.dir\\'] + ignore line: [ C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj C:\\Users\\simko\\AppData\\Local\\Temp\\cciqLujk.s] ignore line: [GNU assembler version 2.42 (x86_64-w64-mingw32) using BFD version (Binutils for MinGW-W64 x86_64 built by Brecht Sanders r5) 2.42] ignore line: [COMPILER_PATH=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/] ignore line: [C:/mingw64/bin/../libexec/gcc/] @@ -212,12 +212,12 @@ events: ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_e8c03.dir\\CMakeCCompilerABI.c.'] - ignore line: [Linking C executable cmTC_e8c03.exe] - ignore line: [C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_e8c03.dir\\link.txt --verbose=1] - ignore line: [C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_e8c03.dir/objects.a] - ignore line: [C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_e8c03.dir/objects.a @CMakeFiles\\cmTC_e8c03.dir\\objects1.rsp] - ignore line: [C:\\mingw64\\bin\\gcc.exe -v -Wl --whole-archive CMakeFiles\\cmTC_e8c03.dir/objects.a -Wl --no-whole-archive -o cmTC_e8c03.exe -Wl --out-implib libcmTC_e8c03.dll.a -Wl --major-image-version 0 --minor-image-version 0 ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_38c81.dir\\CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_38c81.exe] + ignore line: [C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_38c81.dir\\link.txt --verbose=1] + ignore line: [C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_38c81.dir/objects.a] + ignore line: [C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_38c81.dir/objects.a @CMakeFiles\\cmTC_38c81.dir\\objects1.rsp] + ignore line: [C:\\mingw64\\bin\\gcc.exe -v -Wl --whole-archive CMakeFiles\\cmTC_38c81.dir/objects.a -Wl --no-whole-archive -o cmTC_38c81.exe -Wl --out-implib libcmTC_38c81.dll.a -Wl --major-image-version 0 --minor-image-version 0 ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe] ignore line: [COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe] @@ -236,13 +236,13 @@ events: ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e8c03.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e8c03.'] - link line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\ccvQWfYs.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_e8c03.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_e8c03.dir/objects.a --no-whole-archive --out-implib libcmTC_e8c03.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_38c81.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_38c81.'] + link line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\cchzEVFf.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_38c81.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_38c81.dir/objects.a --no-whole-archive --out-implib libcmTC_38c81.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o] arg [C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe] ==> ignore arg [-plugin] ==> ignore arg [C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll] ==> ignore arg [-plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe] ==> ignore - arg [-plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\ccvQWfYs.res] ==> ignore + arg [-plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\cchzEVFf.res] ==> ignore arg [-plugin-opt=-pass-through=-lmingw32] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lgcc_eh] ==> ignore @@ -266,7 +266,7 @@ events: arg [i386pep] ==> ignore arg [-Bdynamic] ==> search dynamic arg [-o] ==> ignore - arg [cmTC_e8c03.exe] ==> ignore + arg [cmTC_38c81.exe] ==> ignore arg [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o] ==> obj [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o] arg [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o] ==> obj [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o] arg [-LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0] ==> dir [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0] @@ -276,10 +276,10 @@ events: arg [-LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib] ==> dir [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib] arg [-LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../..] ==> dir [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../..] arg [--whole-archive] ==> ignore - arg [CMakeFiles\\cmTC_e8c03.dir/objects.a] ==> ignore + arg [CMakeFiles\\cmTC_38c81.dir/objects.a] ==> ignore arg [--no-whole-archive] ==> ignore arg [--out-implib] ==> ignore - arg [libcmTC_e8c03.dll.a] ==> ignore + arg [libcmTC_38c81.dll.a] ==> ignore arg [--major-image-version] ==> ignore arg [0] ==> ignore arg [--minor-image-version] ==> ignore @@ -332,8 +332,8 @@ events: checks: - "Detecting CXX compiler ABI info" directories: - source: "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq" - binary: "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq" + source: "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o" + binary: "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o" cmakeVariables: CMAKE_CXX_FLAGS: "" CMAKE_CXX_FLAGS_DEBUG: "-g" @@ -342,13 +342,13 @@ events: variable: "CMAKE_CXX_ABI_COMPILED" cached: true stdout: | - Change Dir: 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq' + Change Dir: 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o' - Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_d3ce1/fast - C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_d3ce1.dir\\build.make CMakeFiles/cmTC_d3ce1.dir/build - mingw32-make[1]: Entering directory 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq' - Building CXX object CMakeFiles/cmTC_d3ce1.dir/CMakeCXXCompilerABI.cpp.obj - C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp + Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_d41b0/fast + C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_d41b0.dir\\build.make CMakeFiles/cmTC_d41b0.dir/build + mingw32-make[1]: Entering directory 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o' + Building CXX object CMakeFiles/cmTC_d41b0.dir/CMakeCXXCompilerABI.cpp.obj + C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp Using built-in specs. COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe OFFLOAD_TARGET_NAMES=nvptx-none @@ -357,8 +357,8 @@ events: Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r5) - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d3ce1.dir\\' - C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1plus.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles\\cmTC_d3ce1.dir\\ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\ccX2dQ6R.s + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d41b0.dir\\' + C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1plus.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles\\cmTC_d41b0.dir\\ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\cc5adFuE.s GNU C++17 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r5) version 13.2.0 (x86_64-w64-mingw32) compiled by GNU C version 13.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP @@ -383,17 +383,17 @@ events: C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include End of search list. Compiler executable checksum: 6327a8e4b2efaceec00a9874ea909a3f - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d3ce1.dir\\' - C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj C:\\Users\\simko\\AppData\\Local\\Temp\\ccX2dQ6R.s + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d41b0.dir\\' + C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj C:\\Users\\simko\\AppData\\Local\\Temp\\cc5adFuE.s GNU assembler version 2.42 (x86_64-w64-mingw32) using BFD version (Binutils for MinGW-W64 x86_64, built by Brecht Sanders, r5) 2.42 COMPILER_PATH=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../libexec/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ LIBRARY_PATH=C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../lib/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../ - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.' - Linking CXX executable cmTC_d3ce1.exe - C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_d3ce1.dir\\link.txt --verbose=1 - C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_d3ce1.dir/objects.a - C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_d3ce1.dir/objects.a @CMakeFiles\\cmTC_d3ce1.dir\\objects1.rsp - C:\\mingw64\\bin\\gcc.exe -v -Wl,--whole-archive CMakeFiles\\cmTC_d3ce1.dir/objects.a -Wl,--no-whole-archive -o cmTC_d3ce1.exe -Wl,--out-implib,libcmTC_d3ce1.dll.a -Wl,--major-image-version,0,--minor-image-version,0 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_d41b0.exe + C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_d41b0.dir\\link.txt --verbose=1 + C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_d41b0.dir/objects.a + C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_d41b0.dir/objects.a @CMakeFiles\\cmTC_d41b0.dir\\objects1.rsp + C:\\mingw64\\bin\\gcc.exe -v -Wl,--whole-archive CMakeFiles\\cmTC_d41b0.dir/objects.a -Wl,--no-whole-archive -o cmTC_d41b0.exe -Wl,--out-implib,libcmTC_d41b0.dll.a -Wl,--major-image-version,0,--minor-image-version,0 Using built-in specs. COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe @@ -405,10 +405,10 @@ events: gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r5) COMPILER_PATH=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../libexec/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ LIBRARY_PATH=C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/;C:/mingw64/bin/../lib/gcc/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/;C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../ - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d3ce1.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d3ce1.' - C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\ccra7b3X.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_d3ce1.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_d3ce1.dir/objects.a --no-whole-archive --out-implib libcmTC_d3ce1.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d3ce1.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d3ce1.' - mingw32-make[1]: Leaving directory 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq' + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d41b0.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d41b0.' + C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\cc5YXFnL.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_d41b0.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_d41b0.dir/objects.a --no-whole-archive --out-implib libcmTC_d41b0.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d41b0.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d41b0.' + mingw32-make[1]: Leaving directory 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o' exitCode: 0 - @@ -448,13 +448,13 @@ events: message: | Parsed CXX implicit link information: link line regex: [^( *|.*[/\\])(ld\\.exe|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq'] + ignore line: [Change Dir: 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o'] ignore line: [] - ignore line: [Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_d3ce1/fast] - ignore line: [C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_d3ce1.dir\\build.make CMakeFiles/cmTC_d3ce1.dir/build] - ignore line: [mingw32-make[1]: Entering directory 'D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/CMakeScratch/TryCompile-mcbgwq'] - ignore line: [Building CXX object CMakeFiles/cmTC_d3ce1.dir/CMakeCXXCompilerABI.cpp.obj] - ignore line: [C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp] + ignore line: [Run Build Command(s): C:/mingw64/bin/cmake.exe -E env VERBOSE=1 C:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_d41b0/fast] + ignore line: [C:/mingw64/bin/mingw32-make.exe -f CMakeFiles\\cmTC_d41b0.dir\\build.make CMakeFiles/cmTC_d41b0.dir/build] + ignore line: [mingw32-make[1]: Entering directory 'D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeScratch/TryCompile-f4ei0o'] + ignore line: [Building CXX object CMakeFiles/cmTC_d41b0.dir/CMakeCXXCompilerABI.cpp.obj] + ignore line: [C:\\mingw64\\bin\\gcc.exe -v -o CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj -c C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe] ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] @@ -463,8 +463,8 @@ events: ignore line: [Thread model: posix] ignore line: [Supported LTO compression algorithms: zlib zstd] ignore line: [gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh built by Brecht Sanders r5) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d3ce1.dir\\'] - ignore line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1plus.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles\\cmTC_d3ce1.dir\\ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\ccX2dQ6R.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d41b0.dir\\'] + ignore line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1plus.exe -quiet -v -iprefix C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -D_REENTRANT C:\\mingw64\\share\\cmake-3.28\\Modules\\CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles\\cmTC_d41b0.dir\\ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o C:\\Users\\simko\\AppData\\Local\\Temp\\cc5adFuE.s] ignore line: [GNU C++17 (MinGW-W64 x86_64-ucrt-posix-seh built by Brecht Sanders r5) version 13.2.0 (x86_64-w64-mingw32)] ignore line: [ compiled by GNU C version 13.2.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] ignore line: [] @@ -489,8 +489,8 @@ events: ignore line: [ C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include] ignore line: [End of search list.] ignore line: [Compiler executable checksum: 6327a8e4b2efaceec00a9874ea909a3f] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d3ce1.dir\\'] - ignore line: [ C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj C:\\Users\\simko\\AppData\\Local\\Temp\\ccX2dQ6R.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d41b0.dir\\'] + ignore line: [ C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj C:\\Users\\simko\\AppData\\Local\\Temp\\cc5adFuE.s] ignore line: [GNU assembler version 2.42 (x86_64-w64-mingw32) using BFD version (Binutils for MinGW-W64 x86_64 built by Brecht Sanders r5) 2.42] ignore line: [COMPILER_PATH=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/] ignore line: [C:/mingw64/bin/../libexec/gcc/] @@ -501,12 +501,12 @@ events: ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d3ce1.dir\\CMakeCXXCompilerABI.cpp.'] - ignore line: [Linking CXX executable cmTC_d3ce1.exe] - ignore line: [C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_d3ce1.dir\\link.txt --verbose=1] - ignore line: [C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_d3ce1.dir/objects.a] - ignore line: [C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_d3ce1.dir/objects.a @CMakeFiles\\cmTC_d3ce1.dir\\objects1.rsp] - ignore line: [C:\\mingw64\\bin\\gcc.exe -v -Wl --whole-archive CMakeFiles\\cmTC_d3ce1.dir/objects.a -Wl --no-whole-archive -o cmTC_d3ce1.exe -Wl --out-implib libcmTC_d3ce1.dll.a -Wl --major-image-version 0 --minor-image-version 0 ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.obj' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles\\cmTC_d41b0.dir\\CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_d41b0.exe] + ignore line: [C:\\mingw64\\bin\\cmake.exe -E cmake_link_script CMakeFiles\\cmTC_d41b0.dir\\link.txt --verbose=1] + ignore line: [C:\\mingw64\\bin\\cmake.exe -E rm -f CMakeFiles\\cmTC_d41b0.dir/objects.a] + ignore line: [C:\\mingw64\\bin\\ar.exe qc CMakeFiles\\cmTC_d41b0.dir/objects.a @CMakeFiles\\cmTC_d41b0.dir\\objects1.rsp] + ignore line: [C:\\mingw64\\bin\\gcc.exe -v -Wl --whole-archive CMakeFiles\\cmTC_d41b0.dir/objects.a -Wl --no-whole-archive -o cmTC_d41b0.exe -Wl --out-implib libcmTC_d41b0.dll.a -Wl --major-image-version 0 --minor-image-version 0 ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=C:\\mingw64\\bin\\gcc.exe] ignore line: [COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe] @@ -525,13 +525,13 @@ events: ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/] ignore line: [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d3ce1.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d3ce1.'] - link line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\ccra7b3X.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_d3ce1.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_d3ce1.dir/objects.a --no-whole-archive --out-implib libcmTC_d3ce1.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_d41b0.exe' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_d41b0.'] + link line: [ C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe -plugin C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll -plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\cc5YXFnL.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lkernel32 -m i386pep -Bdynamic -o cmTC_d41b0.exe C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0 -LC:/mingw64/bin/../lib/gcc -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib -LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../.. --whole-archive CMakeFiles\\cmTC_d41b0.dir/objects.a --no-whole-archive --out-implib libcmTC_d41b0.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtend.o] arg [C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/collect2.exe] ==> ignore arg [-plugin] ==> ignore arg [C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/liblto_plugin.dll] ==> ignore arg [-plugin-opt=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe] ==> ignore - arg [-plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\ccra7b3X.res] ==> ignore + arg [-plugin-opt=-fresolution=C:\\Users\\simko\\AppData\\Local\\Temp\\cc5YXFnL.res] ==> ignore arg [-plugin-opt=-pass-through=-lmingw32] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lgcc_eh] ==> ignore @@ -555,7 +555,7 @@ events: arg [i386pep] ==> ignore arg [-Bdynamic] ==> search dynamic arg [-o] ==> ignore - arg [cmTC_d3ce1.exe] ==> ignore + arg [cmTC_d41b0.exe] ==> ignore arg [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o] ==> obj [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o] arg [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o] ==> obj [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/crtbegin.o] arg [-LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0] ==> dir [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0] @@ -565,10 +565,10 @@ events: arg [-LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib] ==> dir [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib] arg [-LC:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../..] ==> dir [C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../..] arg [--whole-archive] ==> ignore - arg [CMakeFiles\\cmTC_d3ce1.dir/objects.a] ==> ignore + arg [CMakeFiles\\cmTC_d41b0.dir/objects.a] ==> ignore arg [--no-whole-archive] ==> ignore arg [--out-implib] ==> ignore - arg [libcmTC_d3ce1.dll.a] ==> ignore + arg [libcmTC_d41b0.dll.a] ==> ignore arg [--major-image-version] ==> ignore arg [0] ==> ignore arg [--minor-image-version] ==> ignore diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeDirectoryInformation.cmake b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeDirectoryInformation.cmake index af27e04..d98b6a9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/CMakeDirectoryInformation.cmake @@ -2,8 +2,8 @@ # Generated by "MinGW Makefiles" Generator, CMake Version 3.28 # Relative path conversion top directories. -set(CMAKE_RELATIVE_PATH_TOP_SOURCE "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win") -set(CMAKE_RELATIVE_PATH_TOP_BINARY "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win") +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS") # Force unix paths in dependencies. set(CMAKE_FORCE_UNIX_PATHS 1) diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile.cmake b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile.cmake index af1a75c..33fe518 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile.cmake +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile.cmake @@ -7,19 +7,99 @@ set(CMAKE_DEPENDS_GENERATOR "MinGW Makefiles") # The top level Makefile was generated from the following files: set(CMAKE_MAKEFILE_DEPENDS "CMakeCache.txt" + "C:/mingw64/share/cmake-3.28/Modules/CMakeCCompiler.cmake.in" + "C:/mingw64/share/cmake-3.28/Modules/CMakeCCompilerABI.c" "C:/mingw64/share/cmake-3.28/Modules/CMakeCInformation.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeCXXCompiler.cmake.in" + "C:/mingw64/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp" "C:/mingw64/share/cmake-3.28/Modules/CMakeCXXInformation.cmake" "C:/mingw64/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeCompilerIdDetection.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineCCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineCXXCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineCompileFeatures.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineRCCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeFindBinUtils.cmake" "C:/mingw64/share/cmake-3.28/Modules/CMakeGenericSystem.cmake" "C:/mingw64/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake" "C:/mingw64/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeMinGWFindMake.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeParseImplicitIncludeInfo.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeParseImplicitLinkInfo.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeParseLibraryArchitecture.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeRCCompiler.cmake.in" "C:/mingw64/share/cmake-3.28/Modules/CMakeRCInformation.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeSystem.cmake.in" "C:/mingw64/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake" "C:/mingw64/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeTestCompilerCommon.cmake" + "C:/mingw64/share/cmake-3.28/Modules/CMakeTestRCCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Borland-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" "C:/mingw64/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Clang-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Cray-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/CrayClang-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/GHS-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/GNU-C-DetermineCompiler.cmake" "C:/mingw64/share/cmake-3.28/Modules/Compiler/GNU-C.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" "C:/mingw64/share/cmake-3.28/Modules/Compiler/GNU-CXX.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/GNU-FindBinUtils.cmake" "C:/mingw64/share/cmake-3.28/Modules/Compiler/GNU.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/IAR-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Intel-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/LCC-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/OrangeC-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/PGI-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/SCO-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/TI-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Tasking-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Internal/FeatureTesting.cmake" + "C:/mingw64/share/cmake-3.28/Modules/Platform/Windows-Determine-CXX.cmake" "C:/mingw64/share/cmake-3.28/Modules/Platform/Windows-GNU-C-ABI.cmake" "C:/mingw64/share/cmake-3.28/Modules/Platform/Windows-GNU-C.cmake" "C:/mingw64/share/cmake-3.28/Modules/Platform/Windows-GNU-CXX-ABI.cmake" @@ -45,6 +125,12 @@ set(CMAKE_MAKEFILE_OUTPUTS # Byproducts of CMake generate step: set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.28.2/CMakeSystem.cmake" + "CMakeFiles/3.28.2/CMakeCCompiler.cmake" + "CMakeFiles/3.28.2/CMakeCXXCompiler.cmake" + "CMakeFiles/3.28.2/CMakeRCCompiler.cmake" + "CMakeFiles/3.28.2/CMakeCCompiler.cmake" + "CMakeFiles/3.28.2/CMakeCXXCompiler.cmake" "lib/tls_sal.cpp" "CMakeFiles/CMakeDirectoryInformation.cmake" ) diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile2 b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile2 index 5131c47..d77a36c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile2 +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/Makefile2 @@ -53,10 +53,10 @@ RM = C:\mingw64\bin\cmake.exe -E rm -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_SOURCE_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_BINARY_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS #============================================================================= # Directory level rules for the build root directory @@ -82,14 +82,14 @@ clean: CMakeFiles/client.dir/clean CMakeFiles/tiitls.dir/all: $(MAKE) $(MAKESILENT) -f CMakeFiles\tiitls.dir\build.make CMakeFiles/tiitls.dir/depend $(MAKE) $(MAKESILENT) -f CMakeFiles\tiitls.dir\build.make CMakeFiles/tiitls.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 "Built target tiitls" + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 "Built target tiitls" .PHONY : CMakeFiles/tiitls.dir/all # Build rule for subdir invocation for target. CMakeFiles/tiitls.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles 16 + $(CMAKE_COMMAND) -E cmake_progress_start D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles 16 $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 CMakeFiles/tiitls.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles 0 .PHONY : CMakeFiles/tiitls.dir/rule # Convenience name for target. @@ -108,14 +108,14 @@ CMakeFiles/tiitls.dir/clean: CMakeFiles/client.dir/all: CMakeFiles/tiitls.dir/all $(MAKE) $(MAKESILENT) -f CMakeFiles\client.dir\build.make CMakeFiles/client.dir/depend $(MAKE) $(MAKESILENT) -f CMakeFiles\client.dir\build.make CMakeFiles/client.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=1,2 "Built target client" + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=1,2 "Built target client" .PHONY : CMakeFiles/client.dir/all # Build rule for subdir invocation for target. CMakeFiles/client.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles 18 + $(CMAKE_COMMAND) -E cmake_progress_start D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles 18 $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 CMakeFiles/client.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles 0 .PHONY : CMakeFiles/client.dir/rule # Convenience name for target. diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/TargetDirectories.txt b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/TargetDirectories.txt index ed11258..7cd7de3 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/TargetDirectories.txt +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/TargetDirectories.txt @@ -1,4 +1,4 @@ -D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/tiitls.dir -D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/client.dir -D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/edit_cache.dir -D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/CMakeFiles/rebuild_cache.dir +D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir +D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir +D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/edit_cache.dir +D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/rebuild_cache.dir diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/DependInfo.cmake b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/DependInfo.cmake index 406360b..3f75f47 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/DependInfo.cmake +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/DependInfo.cmake @@ -8,7 +8,7 @@ set(CMAKE_DEPENDS_LANGUAGES # The set of dependency files which are needed: set(CMAKE_DEPENDS_DEPENDENCY_FILES - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/src/client.cpp" "CMakeFiles/client.dir/src/client.cpp.obj" "gcc" "CMakeFiles/client.dir/src/client.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/src/client.cpp" "CMakeFiles/client.dir/src/client.cpp.obj" "gcc" "CMakeFiles/client.dir/src/client.cpp.obj.d" ) # Targets to which this target links which contain Fortran sources. diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/build.make b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/build.make index af8cbf1..c96fc91 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/build.make +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/build.make @@ -52,10 +52,10 @@ RM = C:\mingw64\bin\cmake.exe -E rm -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_SOURCE_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_BINARY_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS # Include any dependencies generated for this target. include CMakeFiles/client.dir/depend.make @@ -72,16 +72,16 @@ CMakeFiles/client.dir/src/client.cpp.obj: CMakeFiles/client.dir/flags.make CMakeFiles/client.dir/src/client.cpp.obj: CMakeFiles/client.dir/includes_CXX.rsp CMakeFiles/client.dir/src/client.cpp.obj: src/client.cpp CMakeFiles/client.dir/src/client.cpp.obj: CMakeFiles/client.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/client.dir/src/client.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/client.dir/src/client.cpp.obj -MF CMakeFiles\client.dir\src\client.cpp.obj.d -o CMakeFiles\client.dir\src\client.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\src\client.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/client.dir/src/client.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/client.dir/src/client.cpp.obj -MF CMakeFiles\client.dir\src\client.cpp.obj.d -o CMakeFiles\client.dir\src\client.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\src\client.cpp CMakeFiles/client.dir/src/client.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/client.dir/src/client.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\src\client.cpp > CMakeFiles\client.dir\src\client.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\src\client.cpp > CMakeFiles\client.dir\src\client.cpp.i CMakeFiles/client.dir/src/client.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/client.dir/src/client.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\src\client.cpp -o CMakeFiles\client.dir\src\client.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\src\client.cpp -o CMakeFiles\client.dir\src\client.cpp.s # Object files for target client client_OBJECTS = \ @@ -97,7 +97,7 @@ client.exe: sal/miracl/core.a client.exe: CMakeFiles/client.dir/linkLibs.rsp client.exe: CMakeFiles/client.dir/objects1.rsp client.exe: CMakeFiles/client.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable client.exe" + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable client.exe" $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles\client.dir\link.txt --verbose=$(VERBOSE) # Rule to build all files generated by this target. @@ -109,6 +109,6 @@ CMakeFiles/client.dir/clean: .PHONY : CMakeFiles/client.dir/clean CMakeFiles/client.dir/depend: - $(CMAKE_COMMAND) -E cmake_depends "MinGW Makefiles" D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles\client.dir\DependInfo.cmake "--color=$(COLOR)" + $(CMAKE_COMMAND) -E cmake_depends "MinGW Makefiles" D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles\client.dir\DependInfo.cmake "--color=$(COLOR)" .PHONY : CMakeFiles/client.dir/depend diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.internal b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.internal deleted file mode 100644 index f1671be..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.internal +++ /dev/null @@ -1,330 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "MinGW Makefiles" Generator, CMake Version 3.28 - -CMakeFiles/client.dir/src/client.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/src/client.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/inttypes.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_bfibe.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_pqibe.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_protocol.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_tickets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B384_58.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B384_58.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp2_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp12_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp2_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp4_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/pair_BLS12381.h - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.make b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.make index adf4316..c83e634 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.make +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/compiler_depend.make @@ -1,979 +1,2 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "MinGW Makefiles" Generator, CMake Version 3.28 - -CMakeFiles/client.dir/src/client.cpp.obj: src/client.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/inttypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_bfibe.h \ - include/tls_cert_chain.h \ - include/tls_certs.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_pqibe.h \ - include/tls_protocol.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_tickets.h \ - include/tls_x509.h \ - sal/miracl/includes/arch.h \ - sal/miracl/includes/big_B384_58.h \ - sal/miracl/includes/config_big_B384_58.h \ - sal/miracl/includes/config_curve_BLS12381.h \ - sal/miracl/includes/config_field_BLS12381.h \ - sal/miracl/includes/core.h \ - sal/miracl/includes/ecp2_BLS12381.h \ - sal/miracl/includes/ecp_BLS12381.h \ - sal/miracl/includes/fp12_BLS12381.h \ - sal/miracl/includes/fp2_BLS12381.h \ - sal/miracl/includes/fp4_BLS12381.h \ - sal/miracl/includes/fp_BLS12381.h \ - sal/miracl/includes/pair_BLS12381.h - - -sal/miracl/includes/pair_BLS12381.h: - -sal/miracl/includes/fp_BLS12381.h: - -sal/miracl/includes/fp4_BLS12381.h: - -sal/miracl/includes/fp2_BLS12381.h: - -sal/miracl/includes/ecp2_BLS12381.h: - -sal/miracl/includes/core.h: - -sal/miracl/includes/config_field_BLS12381.h: - -include/tls_x509.h: - -include/tls_tickets.h: - -sal/miracl/includes/config_big_B384_58.h: - -include/tls_sal.h: - -include/tls_protocol.h: - -include/tls_logger.h: - -include/tls_keys_calc.h: - -include/tls_client_send.h: - -include/tls_client_recv.h: - -include/tls_cert_chain.h: - -include/tls_bfibe.h: - -include/tls1_3.h: - -C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/wtypes.h: - -C:/mingw64/x86_64-w64-mingw32/include/ws2def.h: - -C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsvc.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsock2.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsock.h: - -C:/mingw64/x86_64-w64-mingw32/include/winnt.h: - -C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h: - -C:/mingw64/x86_64-w64-mingw32/include/winioctl.h: - -C:/mingw64/x86_64-w64-mingw32/include/wingdi.h: - -C:/mingw64/x86_64-w64-mingw32/include/winerror.h: - -C:/mingw64/x86_64-w64-mingw32/include/winefs.h: - -C:/mingw64/x86_64-w64-mingw32/include/windows.h: - -C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h: - -include/tls_certs.h: - -C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h: - -C:/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/urlmon.h: - -C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/unknwn.h: - -C:/mingw64/x86_64-w64-mingw32/include/unistd.h: - -C:/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/mingw64/x86_64-w64-mingw32/include/handleapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/dde.h: - -C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/timeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/mingw64/x86_64-w64-mingw32/include/cguid.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h: - -sal/miracl/includes/ecp_BLS12381.h: - -C:/mingw64/x86_64-w64-mingw32/include/shellapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winspool.h: - -C:/mingw64/x86_64-w64-mingw32/include/poppack.h: - -include/tls_octads.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/windef.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winnls.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h: - -C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h: - -C:/mingw64/include/c++/13.2.0/stdlib.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/sal.h: - -C:/mingw64/x86_64-w64-mingw32/include/processenv.h: - -C:/mingw64/x86_64-w64-mingw32/include/winscard.h: - -C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h: - -C:/mingw64/x86_64-w64-mingw32/include/dlgs.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h: - -sal/miracl/includes/arch.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h: - -C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h: - -C:/mingw64/x86_64-w64-mingw32/include/oaidl.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winperf.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h: - -C:/mingw64/x86_64-w64-mingw32/include/stralign.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h: - -src/client.cpp: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/objidl.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/std_abs.h: - -C:/mingw64/x86_64-w64-mingw32/include/winuser.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdint.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/mcx.h: - -C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/objbase.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/afunix.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpc.h: - -C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/specstrings.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h: - -C:/mingw64/x86_64-w64-mingw32/include/imm.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/wincon.h: - -C:/mingw64/include/c++/13.2.0/cstdlib: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/reason.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/apiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/basetsd.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/tvout.h: - -C:/mingw64/x86_64-w64-mingw32/include/inttypes.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -C:/mingw64/x86_64-w64-mingw32/include/cderr.h: - -C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/commdlg.h: - -C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h: - -C:/mingw64/x86_64-w64-mingw32/include/ddeml.h: - -C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/dpapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h: - -C:/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/mingw64/x86_64-w64-mingw32/include/winver.h: - -C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/fileapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/excpt.h: - -C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h: - -C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h: - -C:/mingw64/x86_64-w64-mingw32/include/getopt.h: - -C:/mingw64/x86_64-w64-mingw32/include/guiddef.h: - -C:/mingw64/x86_64-w64-mingw32/include/stddef.h: - -C:/mingw64/x86_64-w64-mingw32/include/debugapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/heapapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/in6addr.h: - -sal/miracl/includes/fp12_BLS12381.h: - -C:/mingw64/x86_64-w64-mingw32/include/inaddr.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/io.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/jobapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h: - -C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h: - -C:/mingw64/x86_64-w64-mingw32/include/wnnc.h: - -C:/mingw64/x86_64-w64-mingw32/include/minwindef.h: - -C:/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/msxml.h: - -C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h: - -C:/mingw64/x86_64-w64-mingw32/include/nb30.h: - -C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h: - -include/tls_sockets.h: - -C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h: - -C:/mingw64/x86_64-w64-mingw32/include/oleauto.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/servprov.h: - -C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/oleidl.h: - -C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h: - -C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/winreg.h: - -C:/mingw64/x86_64-w64-mingw32/include/process.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/prsht.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h: - -sal/miracl/includes/config_curve_BLS12381.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h: - -C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdio.h: - -sal/miracl/includes/big_B384_58.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/profileapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/propidl.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h: - -C:/mingw64/x86_64-w64-mingw32/include/qos.h: - -C:/mingw64/x86_64-w64-mingw32/include/synchapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h: - -C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h: - -C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/mingw64/x86_64-w64-mingw32/include/ole2.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/mingw64/x86_64-w64-mingw32/include/ctype.h: - -C:/mingw64/x86_64-w64-mingw32/include/mciapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -include/tls_pqibe.h: - -C:/mingw64/x86_64-w64-mingw32/include/sys/types.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h: +# Empty compiler generated dependencies file for client. +# This may be replaced when dependencies are built. diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/includes_CXX.rsp b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/includes_CXX.rsp index 75b7757..d383f49 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/includes_CXX.rsp +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/includes_CXX.rsp @@ -1 +1 @@ --I"D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include" -I"D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl" -I"D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes" +-ID:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include -ID:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl -ID:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/objects.a b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/objects.a index 9ceae7d8ad06b43006a1046903cecf7d9f30ed48..7e98ea69e54469d17d07de015af1642b06d3a037 100644 GIT binary patch delta 26 gcmZqJ&DgM;ae^GPnW5Q6#a2cZAZ@vM72~yN0CLp`hyVZp delta 26 icmZqJ&DgM;ae^GPiJAFE#a2cZ6GIEL&8rx%MFRkG{0NBv diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/src/client.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/src/client.cpp.obj.d index 641b1bc..87d83cb 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/src/client.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/client.dir/src/client.cpp.obj.d @@ -1,5 +1,5 @@ CMakeFiles/client.dir/src/client.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\src\client.cpp \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\src\client.cpp \ C:/mingw64/x86_64-w64-mingw32/include/time.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ @@ -12,14 +12,14 @@ CMakeFiles/client.dir/src/client.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -302,31 +302,31 @@ CMakeFiles/client.dir/src/client.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_protocol.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_tickets.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_bfibe.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/pair_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp12_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp4_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp2_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B384_58.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_protocol.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_cert_chain.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_tickets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_bfibe.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/pair_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp12_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp4_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp2_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/big_B384_58.h \ C:/mingw64/x86_64-w64-mingw32/include/inttypes.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/arch.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/core.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B384_58.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp2_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_pqibe.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_big_B384_58.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_field_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp2_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_pqibe.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/core.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/DependInfo.cmake b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/DependInfo.cmake index a9814f5..f25359a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/DependInfo.cmake +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/DependInfo.cmake @@ -8,21 +8,21 @@ set(CMAKE_DEPENDS_LANGUAGES # The set of dependency files which are needed: set(CMAKE_DEPENDS_DEPENDENCY_FILES - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/ibe/tls_bfibe.cpp" "CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/ibe/tls_pqibe.cpp" "CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_cacerts.cpp" "CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_cert_chain.cpp" "CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_client_cert.cpp" "CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_client_recv.cpp" "CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_client_send.cpp" "CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_keys_calc.cpp" "CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_logger.cpp" "CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_octads.cpp" "CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_protocol.cpp" "CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_sal.cpp" "CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_sockets.cpp" "CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_tickets.cpp" "CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj.d" - "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_x509.cpp" "CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/ibe/tls_bfibe.cpp" "CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/ibe/tls_pqibe.cpp" "CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_cacerts.cpp" "CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_cert_chain.cpp" "CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_client_cert.cpp" "CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_client_recv.cpp" "CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_client_send.cpp" "CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_keys_calc.cpp" "CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_logger.cpp" "CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_octads.cpp" "CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_protocol.cpp" "CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_sal.cpp" "CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_sockets.cpp" "CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_tickets.cpp" "CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj.d" + "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/lib/tls_x509.cpp" "CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj" "gcc" "CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj.d" ) # Targets to which this target links which contain Fortran sources. diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/build.make b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/build.make index c9bcb3e..da39c60 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/build.make +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/build.make @@ -52,10 +52,10 @@ RM = C:\mingw64\bin\cmake.exe -E rm -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_SOURCE_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_BINARY_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS # Include any dependencies generated for this target. include CMakeFiles/tiitls.dir/depend.make @@ -72,226 +72,226 @@ CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: CMakeFiles/tiitls.dir/flags.ma CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: lib/tls_cert_chain.cpp CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cert_chain.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cert_chain.cpp CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cert_chain.cpp > CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cert_chain.cpp > CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.i CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cert_chain.cpp -o CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cert_chain.cpp -o CMakeFiles\tiitls.dir\lib\tls_cert_chain.cpp.s CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: lib/tls_client_recv.cpp CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_recv.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_recv.cpp CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_recv.cpp > CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_recv.cpp > CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.i CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_recv.cpp -o CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_recv.cpp -o CMakeFiles\tiitls.dir\lib\tls_client_recv.cpp.s CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: lib/tls_client_send.cpp CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_send.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_send.cpp CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_send.cpp > CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_send.cpp > CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.i CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_send.cpp -o CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_send.cpp -o CMakeFiles\tiitls.dir\lib\tls_client_send.cpp.s CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: lib/tls_keys_calc.cpp CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_keys_calc.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_keys_calc.cpp CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_keys_calc.cpp > CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_keys_calc.cpp > CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.i CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_keys_calc.cpp -o CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_keys_calc.cpp -o CMakeFiles\tiitls.dir\lib\tls_keys_calc.cpp.s CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: lib/tls_sockets.cpp CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sockets.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sockets.cpp CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sockets.cpp > CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sockets.cpp > CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.i CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sockets.cpp -o CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sockets.cpp -o CMakeFiles\tiitls.dir\lib\tls_sockets.cpp.s CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj: lib/tls_octads.cpp CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_octads.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_octads.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_octads.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_octads.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_octads.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_octads.cpp CMakeFiles/tiitls.dir/lib/tls_octads.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_octads.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_octads.cpp > CMakeFiles\tiitls.dir\lib\tls_octads.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_octads.cpp > CMakeFiles\tiitls.dir\lib\tls_octads.cpp.i CMakeFiles/tiitls.dir/lib/tls_octads.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_octads.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_octads.cpp -o CMakeFiles\tiitls.dir\lib\tls_octads.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_octads.cpp -o CMakeFiles\tiitls.dir\lib\tls_octads.cpp.s CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: lib/tls_logger.cpp CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_logger.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_logger.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_logger.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_logger.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_logger.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_logger.cpp CMakeFiles/tiitls.dir/lib/tls_logger.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_logger.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_logger.cpp > CMakeFiles\tiitls.dir\lib\tls_logger.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_logger.cpp > CMakeFiles\tiitls.dir\lib\tls_logger.cpp.i CMakeFiles/tiitls.dir/lib/tls_logger.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_logger.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_logger.cpp -o CMakeFiles\tiitls.dir\lib\tls_logger.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_logger.cpp -o CMakeFiles\tiitls.dir\lib\tls_logger.cpp.s CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: lib/tls_protocol.cpp CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_protocol.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_protocol.cpp CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_protocol.cpp > CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_protocol.cpp > CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.i CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_protocol.cpp -o CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_protocol.cpp -o CMakeFiles\tiitls.dir\lib\tls_protocol.cpp.s CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: lib/tls_cacerts.cpp CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cacerts.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cacerts.cpp CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cacerts.cpp > CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cacerts.cpp > CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.i CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cacerts.cpp -o CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cacerts.cpp -o CMakeFiles\tiitls.dir\lib\tls_cacerts.cpp.s CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: lib/tls_client_cert.cpp CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_cert.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_cert.cpp CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_cert.cpp > CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_cert.cpp > CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.i CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_cert.cpp -o CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_cert.cpp -o CMakeFiles\tiitls.dir\lib\tls_client_cert.cpp.s CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: lib/tls_tickets.cpp CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_tickets.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_tickets.cpp CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_tickets.cpp > CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_tickets.cpp > CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.i CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_tickets.cpp -o CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_tickets.cpp -o CMakeFiles\tiitls.dir\lib\tls_tickets.cpp.s CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: lib/tls_x509.cpp CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_x509.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_x509.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_x509.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_x509.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_x509.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_x509.cpp CMakeFiles/tiitls.dir/lib/tls_x509.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_x509.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_x509.cpp > CMakeFiles\tiitls.dir\lib\tls_x509.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_x509.cpp > CMakeFiles\tiitls.dir\lib\tls_x509.cpp.i CMakeFiles/tiitls.dir/lib/tls_x509.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_x509.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_x509.cpp -o CMakeFiles\tiitls.dir\lib\tls_x509.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_x509.cpp -o CMakeFiles\tiitls.dir\lib\tls_x509.cpp.s CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: lib/tls_sal.cpp CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_sal.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_sal.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sal.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj -MF CMakeFiles\tiitls.dir\lib\tls_sal.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\tls_sal.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sal.cpp CMakeFiles/tiitls.dir/lib/tls_sal.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/tls_sal.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sal.cpp > CMakeFiles\tiitls.dir\lib\tls_sal.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sal.cpp > CMakeFiles\tiitls.dir\lib\tls_sal.cpp.i CMakeFiles/tiitls.dir/lib/tls_sal.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/tls_sal.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sal.cpp -o CMakeFiles\tiitls.dir\lib\tls_sal.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sal.cpp -o CMakeFiles\tiitls.dir\lib\tls_sal.cpp.s CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: lib/ibe/tls_bfibe.cpp CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj -MF CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_bfibe.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj -MF CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_bfibe.cpp CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_bfibe.cpp > CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_bfibe.cpp > CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.i CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_bfibe.cpp -o CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_bfibe.cpp -o CMakeFiles\tiitls.dir\lib\ibe\tls_bfibe.cpp.s CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: CMakeFiles/tiitls.dir/flags.make CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: CMakeFiles/tiitls.dir/includes_CXX.rsp CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: lib/ibe/tls_pqibe.cpp CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: CMakeFiles/tiitls.dir/compiler_depend.ts - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj -MF CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.obj -c D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_pqibe.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj" + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj -MF CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.obj.d -o CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.obj -c D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_pqibe.cpp CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.i: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.i" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_pqibe.cpp > CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.i + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_pqibe.cpp > CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.i CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.s: cmake_force @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.s" - C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_pqibe.cpp -o CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.s + C:\mingw64\bin\gcc.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_pqibe.cpp -o CMakeFiles\tiitls.dir\lib\ibe\tls_pqibe.cpp.s # Object files for target tiitls tiitls_OBJECTS = \ @@ -331,7 +331,7 @@ libtiitls.a: CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj libtiitls.a: CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj libtiitls.a: CMakeFiles/tiitls.dir/build.make libtiitls.a: CMakeFiles/tiitls.dir/link.txt - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Linking CXX static library libtiitls.a" + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Linking CXX static library libtiitls.a" $(CMAKE_COMMAND) -P CMakeFiles\tiitls.dir\cmake_clean_target.cmake $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles\tiitls.dir\link.txt --verbose=$(VERBOSE) @@ -344,6 +344,6 @@ CMakeFiles/tiitls.dir/clean: .PHONY : CMakeFiles/tiitls.dir/clean CMakeFiles/tiitls.dir/depend: - $(CMAKE_COMMAND) -E cmake_depends "MinGW Makefiles" D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles\tiitls.dir\DependInfo.cmake "--color=$(COLOR)" + $(CMAKE_COMMAND) -E cmake_depends "MinGW Makefiles" D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles\tiitls.dir\DependInfo.cmake "--color=$(COLOR)" .PHONY : CMakeFiles/tiitls.dir/depend diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.internal b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.internal deleted file mode 100644 index 1ebb5e7..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.internal +++ /dev/null @@ -1,3660 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "MinGW Makefiles" Generator, CMake Version 3.28 - -CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/ibe/tls_bfibe.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/inttypes.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_bfibe.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B384_58.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B384_58.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp2_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp12_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp2_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp4_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/pair_BLS12381.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/randapi.h - -CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/ibe/tls_pqibe.cpp - C:/mingw64/include/c++/13.2.0/backward/binders.h - C:/mingw64/include/c++/13.2.0/bit - C:/mingw64/include/c++/13.2.0/bits/alloc_traits.h - C:/mingw64/include/c++/13.2.0/bits/allocator.h - C:/mingw64/include/c++/13.2.0/bits/basic_ios.h - C:/mingw64/include/c++/13.2.0/bits/basic_ios.tcc - C:/mingw64/include/c++/13.2.0/bits/basic_string.h - C:/mingw64/include/c++/13.2.0/bits/basic_string.tcc - C:/mingw64/include/c++/13.2.0/bits/char_traits.h - C:/mingw64/include/c++/13.2.0/bits/charconv.h - C:/mingw64/include/c++/13.2.0/bits/concept_check.h - C:/mingw64/include/c++/13.2.0/bits/cpp_type_traits.h - C:/mingw64/include/c++/13.2.0/bits/cxxabi_forced.h - C:/mingw64/include/c++/13.2.0/bits/cxxabi_init_exception.h - C:/mingw64/include/c++/13.2.0/bits/exception.h - C:/mingw64/include/c++/13.2.0/bits/exception_defines.h - C:/mingw64/include/c++/13.2.0/bits/exception_ptr.h - C:/mingw64/include/c++/13.2.0/bits/functexcept.h - C:/mingw64/include/c++/13.2.0/bits/functional_hash.h - C:/mingw64/include/c++/13.2.0/bits/hash_bytes.h - C:/mingw64/include/c++/13.2.0/bits/invoke.h - C:/mingw64/include/c++/13.2.0/bits/ios_base.h - C:/mingw64/include/c++/13.2.0/bits/istream.tcc - C:/mingw64/include/c++/13.2.0/bits/locale_classes.h - C:/mingw64/include/c++/13.2.0/bits/locale_classes.tcc - C:/mingw64/include/c++/13.2.0/bits/locale_facets.h - C:/mingw64/include/c++/13.2.0/bits/locale_facets.tcc - C:/mingw64/include/c++/13.2.0/bits/localefwd.h - C:/mingw64/include/c++/13.2.0/bits/memory_resource.h - C:/mingw64/include/c++/13.2.0/bits/memoryfwd.h - C:/mingw64/include/c++/13.2.0/bits/move.h - C:/mingw64/include/c++/13.2.0/bits/nested_exception.h - C:/mingw64/include/c++/13.2.0/bits/new_allocator.h - C:/mingw64/include/c++/13.2.0/bits/ostream.tcc - C:/mingw64/include/c++/13.2.0/bits/ostream_insert.h - C:/mingw64/include/c++/13.2.0/bits/postypes.h - C:/mingw64/include/c++/13.2.0/bits/predefined_ops.h - C:/mingw64/include/c++/13.2.0/bits/ptr_traits.h - C:/mingw64/include/c++/13.2.0/bits/range_access.h - C:/mingw64/include/c++/13.2.0/bits/refwrap.h - C:/mingw64/include/c++/13.2.0/bits/requires_hosted.h - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/bits/stl_algobase.h - C:/mingw64/include/c++/13.2.0/bits/stl_construct.h - C:/mingw64/include/c++/13.2.0/bits/stl_function.h - C:/mingw64/include/c++/13.2.0/bits/stl_iterator.h - C:/mingw64/include/c++/13.2.0/bits/stl_iterator_base_funcs.h - C:/mingw64/include/c++/13.2.0/bits/stl_iterator_base_types.h - C:/mingw64/include/c++/13.2.0/bits/stl_pair.h - C:/mingw64/include/c++/13.2.0/bits/streambuf.tcc - C:/mingw64/include/c++/13.2.0/bits/streambuf_iterator.h - C:/mingw64/include/c++/13.2.0/bits/string_view.tcc - C:/mingw64/include/c++/13.2.0/bits/stringfwd.h - C:/mingw64/include/c++/13.2.0/bits/uses_allocator.h - C:/mingw64/include/c++/13.2.0/bits/uses_allocator_args.h - C:/mingw64/include/c++/13.2.0/bits/utility.h - C:/mingw64/include/c++/13.2.0/cctype - C:/mingw64/include/c++/13.2.0/cerrno - C:/mingw64/include/c++/13.2.0/clocale - C:/mingw64/include/c++/13.2.0/cstddef - C:/mingw64/include/c++/13.2.0/cstdint - C:/mingw64/include/c++/13.2.0/cstdio - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/cwchar - C:/mingw64/include/c++/13.2.0/cwctype - C:/mingw64/include/c++/13.2.0/debug/assertions.h - C:/mingw64/include/c++/13.2.0/debug/debug.h - C:/mingw64/include/c++/13.2.0/exception - C:/mingw64/include/c++/13.2.0/ext/alloc_traits.h - C:/mingw64/include/c++/13.2.0/ext/atomicity.h - C:/mingw64/include/c++/13.2.0/ext/numeric_traits.h - C:/mingw64/include/c++/13.2.0/ext/string_conversions.h - C:/mingw64/include/c++/13.2.0/ext/type_traits.h - C:/mingw64/include/c++/13.2.0/initializer_list - C:/mingw64/include/c++/13.2.0/ios - C:/mingw64/include/c++/13.2.0/iosfwd - C:/mingw64/include/c++/13.2.0/iostream - C:/mingw64/include/c++/13.2.0/istream - C:/mingw64/include/c++/13.2.0/new - C:/mingw64/include/c++/13.2.0/ostream - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdexcept - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/streambuf - C:/mingw64/include/c++/13.2.0/string - C:/mingw64/include/c++/13.2.0/string_view - C:/mingw64/include/c++/13.2.0/system_error - C:/mingw64/include/c++/13.2.0/tuple - C:/mingw64/include/c++/13.2.0/type_traits - C:/mingw64/include/c++/13.2.0/typeinfo - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/atomic_word.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++allocator.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++locale.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/ctype_base.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/ctype_inline.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/error_constants.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/gthr-default.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/gthr.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stat64.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/locale.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/pthread.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_compat.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_signal.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/wchar_s.h - C:/mingw64/x86_64-w64-mingw32/include/signal.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/wchar.h - C:/mingw64/x86_64-w64-mingw32/include/wctype.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_pqibe.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h - -CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_cacerts.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - -CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_cert_chain.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_client_cert.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - -CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_client_recv.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_client_send.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_keys_calc.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_logger.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_octads.cpp - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/sys/time.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - -CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_protocol.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_protocol.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_tickets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_sal.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/include/oqs/common.h - C:/mingw64/include/oqs/kem.h - C:/mingw64/include/oqs/kem_classic_mceliece.h - C:/mingw64/include/oqs/kem_frodokem.h - C:/mingw64/include/oqs/kem_hqc.h - C:/mingw64/include/oqs/kem_kyber.h - C:/mingw64/include/oqs/kem_ml_kem.h - C:/mingw64/include/oqs/kem_ntruprime.h - C:/mingw64/include/oqs/oqs.h - C:/mingw64/include/oqs/oqsconfig.h - C:/mingw64/include/oqs/rand.h - C:/mingw64/include/oqs/sig.h - C:/mingw64/include/oqs/sig_dilithium.h - C:/mingw64/include/oqs/sig_falcon.h - C:/mingw64/include/oqs/sig_ml_dsa.h - C:/mingw64/include/oqs/sig_sphincs.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/inttypes.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B256_56.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B384_56.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B448_58.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B512_60.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B256_56.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B384_56.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B448_58.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B512_60.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_C25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_Ed25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_Ed448.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_NIST256.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_NIST384.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_ff_RSA2048.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_ff_RSA4096.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_F25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_F448.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_NIST256.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_NIST384.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecdh_C25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecdh_NIST256.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecdh_NIST384.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_C25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_Ed25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_Ed448.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_NIST256.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_NIST384.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/eddsa_Ed25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/eddsa_Ed448.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ff_RSA2048.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ff_RSA4096.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_F25519.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_F448.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_NIST256.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_NIST384.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/rsa_RSA2048.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/rsa_RSA4096.h - -CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_sockets.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_tickets.cpp - C:/mingw64/include/c++/13.2.0/bits/std_abs.h - C:/mingw64/include/c++/13.2.0/cstdlib - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h - C:/mingw64/include/c++/13.2.0/stdlib.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h - C:/mingw64/x86_64-w64-mingw32/include/afunix.h - C:/mingw64/x86_64-w64-mingw32/include/apiset.h - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h - C:/mingw64/x86_64-w64-mingw32/include/cderr.h - C:/mingw64/x86_64-w64-mingw32/include/cguid.h - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/ctype.h - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h - C:/mingw64/x86_64-w64-mingw32/include/dde.h - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h - C:/mingw64/x86_64-w64-mingw32/include/errno.h - C:/mingw64/x86_64-w64-mingw32/include/excpt.h - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h - C:/mingw64/x86_64-w64-mingw32/include/getopt.h - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h - C:/mingw64/x86_64-w64-mingw32/include/imm.h - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h - C:/mingw64/x86_64-w64-mingw32/include/io.h - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h - C:/mingw64/x86_64-w64-mingw32/include/limits.h - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h - C:/mingw64/x86_64-w64-mingw32/include/malloc.h - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h - C:/mingw64/x86_64-w64-mingw32/include/mcx.h - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h - C:/mingw64/x86_64-w64-mingw32/include/msxml.h - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h - C:/mingw64/x86_64-w64-mingw32/include/nb30.h - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h - C:/mingw64/x86_64-w64-mingw32/include/objbase.h - C:/mingw64/x86_64-w64-mingw32/include/objidl.h - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h - C:/mingw64/x86_64-w64-mingw32/include/ole2.h - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h - C:/mingw64/x86_64-w64-mingw32/include/poppack.h - C:/mingw64/x86_64-w64-mingw32/include/process.h - C:/mingw64/x86_64-w64-mingw32/include/processenv.h - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h - C:/mingw64/x86_64-w64-mingw32/include/propidl.h - C:/mingw64/x86_64-w64-mingw32/include/prsht.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h - C:/mingw64/x86_64-w64-mingw32/include/qos.h - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h - C:/mingw64/x86_64-w64-mingw32/include/reason.h - C:/mingw64/x86_64-w64-mingw32/include/rpc.h - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h - C:/mingw64/x86_64-w64-mingw32/include/sal.h - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h - C:/mingw64/x86_64-w64-mingw32/include/servprov.h - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdint.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h - C:/mingw64/x86_64-w64-mingw32/include/stralign.h - C:/mingw64/x86_64-w64-mingw32/include/string.h - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h - C:/mingw64/x86_64-w64-mingw32/include/time.h - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h - C:/mingw64/x86_64-w64-mingw32/include/tvout.h - C:/mingw64/x86_64-w64-mingw32/include/unistd.h - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h - C:/mingw64/x86_64-w64-mingw32/include/winbase.h - C:/mingw64/x86_64-w64-mingw32/include/wincon.h - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h - C:/mingw64/x86_64-w64-mingw32/include/windef.h - C:/mingw64/x86_64-w64-mingw32/include/windows.h - C:/mingw64/x86_64-w64-mingw32/include/winefs.h - C:/mingw64/x86_64-w64-mingw32/include/winerror.h - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h - C:/mingw64/x86_64-w64-mingw32/include/winnls.h - C:/mingw64/x86_64-w64-mingw32/include/winnt.h - C:/mingw64/x86_64-w64-mingw32/include/winperf.h - C:/mingw64/x86_64-w64-mingw32/include/winreg.h - C:/mingw64/x86_64-w64-mingw32/include/winscard.h - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h - C:/mingw64/x86_64-w64-mingw32/include/winsock.h - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h - C:/mingw64/x86_64-w64-mingw32/include/winspool.h - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h - C:/mingw64/x86_64-w64-mingw32/include/winuser.h - C:/mingw64/x86_64-w64-mingw32/include/winver.h - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_tickets.h - -CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/lib/tls_x509.cpp - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h - C:/mingw64/x86_64-w64-mingw32/include/stddef.h - C:/mingw64/x86_64-w64-mingw32/include/stdio.h - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.make b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.make index 5299f90..c6adfcb 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.make +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/compiler_depend.make @@ -1,4639 +1,2 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "MinGW Makefiles" Generator, CMake Version 3.28 - -CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: lib/ibe/tls_bfibe.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/inttypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - include/tls_bfibe.h \ - sal/miracl/includes/arch.h \ - sal/miracl/includes/big_B384_58.h \ - sal/miracl/includes/config_big_B384_58.h \ - sal/miracl/includes/config_curve_BLS12381.h \ - sal/miracl/includes/config_field_BLS12381.h \ - sal/miracl/includes/core.h \ - sal/miracl/includes/ecp2_BLS12381.h \ - sal/miracl/includes/ecp_BLS12381.h \ - sal/miracl/includes/fp12_BLS12381.h \ - sal/miracl/includes/fp2_BLS12381.h \ - sal/miracl/includes/fp4_BLS12381.h \ - sal/miracl/includes/fp_BLS12381.h \ - sal/miracl/includes/pair_BLS12381.h \ - sal/miracl/includes/randapi.h - -CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: lib/ibe/tls_pqibe.cpp \ - C:/mingw64/include/c++/13.2.0/backward/binders.h \ - C:/mingw64/include/c++/13.2.0/bit \ - C:/mingw64/include/c++/13.2.0/bits/alloc_traits.h \ - C:/mingw64/include/c++/13.2.0/bits/allocator.h \ - C:/mingw64/include/c++/13.2.0/bits/basic_ios.h \ - C:/mingw64/include/c++/13.2.0/bits/basic_ios.tcc \ - C:/mingw64/include/c++/13.2.0/bits/basic_string.h \ - C:/mingw64/include/c++/13.2.0/bits/basic_string.tcc \ - C:/mingw64/include/c++/13.2.0/bits/char_traits.h \ - C:/mingw64/include/c++/13.2.0/bits/charconv.h \ - C:/mingw64/include/c++/13.2.0/bits/concept_check.h \ - C:/mingw64/include/c++/13.2.0/bits/cpp_type_traits.h \ - C:/mingw64/include/c++/13.2.0/bits/cxxabi_forced.h \ - C:/mingw64/include/c++/13.2.0/bits/cxxabi_init_exception.h \ - C:/mingw64/include/c++/13.2.0/bits/exception.h \ - C:/mingw64/include/c++/13.2.0/bits/exception_defines.h \ - C:/mingw64/include/c++/13.2.0/bits/exception_ptr.h \ - C:/mingw64/include/c++/13.2.0/bits/functexcept.h \ - C:/mingw64/include/c++/13.2.0/bits/functional_hash.h \ - C:/mingw64/include/c++/13.2.0/bits/hash_bytes.h \ - C:/mingw64/include/c++/13.2.0/bits/invoke.h \ - C:/mingw64/include/c++/13.2.0/bits/ios_base.h \ - C:/mingw64/include/c++/13.2.0/bits/istream.tcc \ - C:/mingw64/include/c++/13.2.0/bits/locale_classes.h \ - C:/mingw64/include/c++/13.2.0/bits/locale_classes.tcc \ - C:/mingw64/include/c++/13.2.0/bits/locale_facets.h \ - C:/mingw64/include/c++/13.2.0/bits/locale_facets.tcc \ - C:/mingw64/include/c++/13.2.0/bits/localefwd.h \ - C:/mingw64/include/c++/13.2.0/bits/memory_resource.h \ - C:/mingw64/include/c++/13.2.0/bits/memoryfwd.h \ - C:/mingw64/include/c++/13.2.0/bits/move.h \ - C:/mingw64/include/c++/13.2.0/bits/nested_exception.h \ - C:/mingw64/include/c++/13.2.0/bits/new_allocator.h \ - C:/mingw64/include/c++/13.2.0/bits/ostream.tcc \ - C:/mingw64/include/c++/13.2.0/bits/ostream_insert.h \ - C:/mingw64/include/c++/13.2.0/bits/postypes.h \ - C:/mingw64/include/c++/13.2.0/bits/predefined_ops.h \ - C:/mingw64/include/c++/13.2.0/bits/ptr_traits.h \ - C:/mingw64/include/c++/13.2.0/bits/range_access.h \ - C:/mingw64/include/c++/13.2.0/bits/refwrap.h \ - C:/mingw64/include/c++/13.2.0/bits/requires_hosted.h \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_algobase.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_construct.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_function.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_iterator.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_iterator_base_funcs.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_iterator_base_types.h \ - C:/mingw64/include/c++/13.2.0/bits/stl_pair.h \ - C:/mingw64/include/c++/13.2.0/bits/streambuf.tcc \ - C:/mingw64/include/c++/13.2.0/bits/streambuf_iterator.h \ - C:/mingw64/include/c++/13.2.0/bits/string_view.tcc \ - C:/mingw64/include/c++/13.2.0/bits/stringfwd.h \ - C:/mingw64/include/c++/13.2.0/bits/uses_allocator.h \ - C:/mingw64/include/c++/13.2.0/bits/uses_allocator_args.h \ - C:/mingw64/include/c++/13.2.0/bits/utility.h \ - C:/mingw64/include/c++/13.2.0/cctype \ - C:/mingw64/include/c++/13.2.0/cerrno \ - C:/mingw64/include/c++/13.2.0/clocale \ - C:/mingw64/include/c++/13.2.0/cstddef \ - C:/mingw64/include/c++/13.2.0/cstdint \ - C:/mingw64/include/c++/13.2.0/cstdio \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/cwchar \ - C:/mingw64/include/c++/13.2.0/cwctype \ - C:/mingw64/include/c++/13.2.0/debug/assertions.h \ - C:/mingw64/include/c++/13.2.0/debug/debug.h \ - C:/mingw64/include/c++/13.2.0/exception \ - C:/mingw64/include/c++/13.2.0/ext/alloc_traits.h \ - C:/mingw64/include/c++/13.2.0/ext/atomicity.h \ - C:/mingw64/include/c++/13.2.0/ext/numeric_traits.h \ - C:/mingw64/include/c++/13.2.0/ext/string_conversions.h \ - C:/mingw64/include/c++/13.2.0/ext/type_traits.h \ - C:/mingw64/include/c++/13.2.0/initializer_list \ - C:/mingw64/include/c++/13.2.0/ios \ - C:/mingw64/include/c++/13.2.0/iosfwd \ - C:/mingw64/include/c++/13.2.0/iostream \ - C:/mingw64/include/c++/13.2.0/istream \ - C:/mingw64/include/c++/13.2.0/new \ - C:/mingw64/include/c++/13.2.0/ostream \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdexcept \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/streambuf \ - C:/mingw64/include/c++/13.2.0/string \ - C:/mingw64/include/c++/13.2.0/string_view \ - C:/mingw64/include/c++/13.2.0/system_error \ - C:/mingw64/include/c++/13.2.0/tuple \ - C:/mingw64/include/c++/13.2.0/type_traits \ - C:/mingw64/include/c++/13.2.0/typeinfo \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/atomic_word.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++allocator.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++locale.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/ctype_base.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/ctype_inline.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/error_constants.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/gthr-default.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/gthr.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stat64.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/locale.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_compat.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_signal.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/wchar_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/signal.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/wchar.h \ - C:/mingw64/x86_64-w64-mingw32/include/wctype.h \ - include/tls_pqibe.h \ - sal/miracl/includes/arch.h \ - sal/miracl/includes/core.h - -CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: lib/tls_cacerts.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_certs.h \ - include/tls_octads.h \ - include/tls_sockets.h - -CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: lib/tls_cert_chain.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_cert_chain.h \ - include/tls_certs.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: lib/tls_client_cert.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_certs.h \ - include/tls_octads.h \ - include/tls_sockets.h - -CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: lib/tls_client_recv.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_cert_chain.h \ - include/tls_certs.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: lib/tls_client_send.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_certs.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: lib/tls_keys_calc.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: lib/tls_logger.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_sockets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj: lib/tls_octads.cpp \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - include/tls_octads.h - -CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: lib/tls_protocol.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_cert_chain.h \ - include/tls_certs.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_protocol.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_tickets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: lib/tls_sal.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/include/oqs/common.h \ - C:/mingw64/include/oqs/kem.h \ - C:/mingw64/include/oqs/kem_classic_mceliece.h \ - C:/mingw64/include/oqs/kem_frodokem.h \ - C:/mingw64/include/oqs/kem_hqc.h \ - C:/mingw64/include/oqs/kem_kyber.h \ - C:/mingw64/include/oqs/kem_ml_kem.h \ - C:/mingw64/include/oqs/kem_ntruprime.h \ - C:/mingw64/include/oqs/oqs.h \ - C:/mingw64/include/oqs/oqsconfig.h \ - C:/mingw64/include/oqs/rand.h \ - C:/mingw64/include/oqs/sig.h \ - C:/mingw64/include/oqs/sig_dilithium.h \ - C:/mingw64/include/oqs/sig_falcon.h \ - C:/mingw64/include/oqs/sig_ml_dsa.h \ - C:/mingw64/include/oqs/sig_sphincs.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/inttypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_octads.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - sal/miracl/includes/arch.h \ - sal/miracl/includes/big_B256_56.h \ - sal/miracl/includes/big_B384_56.h \ - sal/miracl/includes/big_B448_58.h \ - sal/miracl/includes/big_B512_60.h \ - sal/miracl/includes/config_big_B256_56.h \ - sal/miracl/includes/config_big_B384_56.h \ - sal/miracl/includes/config_big_B448_58.h \ - sal/miracl/includes/config_big_B512_60.h \ - sal/miracl/includes/config_curve_C25519.h \ - sal/miracl/includes/config_curve_Ed25519.h \ - sal/miracl/includes/config_curve_Ed448.h \ - sal/miracl/includes/config_curve_NIST256.h \ - sal/miracl/includes/config_curve_NIST384.h \ - sal/miracl/includes/config_ff_RSA2048.h \ - sal/miracl/includes/config_ff_RSA4096.h \ - sal/miracl/includes/config_field_F25519.h \ - sal/miracl/includes/config_field_F448.h \ - sal/miracl/includes/config_field_NIST256.h \ - sal/miracl/includes/config_field_NIST384.h \ - sal/miracl/includes/core.h \ - sal/miracl/includes/ecdh_C25519.h \ - sal/miracl/includes/ecdh_NIST256.h \ - sal/miracl/includes/ecdh_NIST384.h \ - sal/miracl/includes/ecp_C25519.h \ - sal/miracl/includes/ecp_Ed25519.h \ - sal/miracl/includes/ecp_Ed448.h \ - sal/miracl/includes/ecp_NIST256.h \ - sal/miracl/includes/ecp_NIST384.h \ - sal/miracl/includes/eddsa_Ed25519.h \ - sal/miracl/includes/eddsa_Ed448.h \ - sal/miracl/includes/ff_RSA2048.h \ - sal/miracl/includes/ff_RSA4096.h \ - sal/miracl/includes/fp_F25519.h \ - sal/miracl/includes/fp_F448.h \ - sal/miracl/includes/fp_NIST256.h \ - sal/miracl/includes/fp_NIST384.h \ - sal/miracl/includes/rsa_RSA2048.h \ - sal/miracl/includes/rsa_RSA4096.h - -CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: lib/tls_sockets.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_logger.h \ - include/tls_octads.h \ - include/tls_sockets.h \ - include/tls_x509.h - -CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: lib/tls_tickets.cpp \ - C:/mingw64/include/c++/13.2.0/bits/std_abs.h \ - C:/mingw64/include/c++/13.2.0/cstdlib \ - C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h \ - C:/mingw64/include/c++/13.2.0/stdlib.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h \ - C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h \ - C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ - C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ - C:/mingw64/x86_64-w64-mingw32/include/afunix.h \ - C:/mingw64/x86_64-w64-mingw32/include/apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h \ - C:/mingw64/x86_64-w64-mingw32/include/basetsd.h \ - C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/cderr.h \ - C:/mingw64/x86_64-w64-mingw32/include/cguid.h \ - C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/commdlg.h \ - C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/ctype.h \ - C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dde.h \ - C:/mingw64/x86_64-w64-mingw32/include/ddeml.h \ - C:/mingw64/x86_64-w64-mingw32/include/debugapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/dlgs.h \ - C:/mingw64/x86_64-w64-mingw32/include/dpapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h \ - C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/errno.h \ - C:/mingw64/x86_64-w64-mingw32/include/excpt.h \ - C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/getopt.h \ - C:/mingw64/x86_64-w64-mingw32/include/guiddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/handleapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/heapapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/imm.h \ - C:/mingw64/x86_64-w64-mingw32/include/in6addr.h \ - C:/mingw64/x86_64-w64-mingw32/include/inaddr.h \ - C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/io.h \ - C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/jobapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/limits.h \ - C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h \ - C:/mingw64/x86_64-w64-mingw32/include/malloc.h \ - C:/mingw64/x86_64-w64-mingw32/include/mciapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mcx.h \ - C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/minwindef.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h \ - C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h \ - C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/msxml.h \ - C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/nb30.h \ - C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/oaidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/ole2.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleauto.h \ - C:/mingw64/x86_64-w64-mingw32/include/oleidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/poppack.h \ - C:/mingw64/x86_64-w64-mingw32/include/process.h \ - C:/mingw64/x86_64-w64-mingw32/include/processenv.h \ - C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/profileapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/propidl.h \ - C:/mingw64/x86_64-w64-mingw32/include/prsht.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h \ - C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h \ - C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/qos.h \ - C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/reason.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpc.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h \ - C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sal.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h \ - C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/servprov.h \ - C:/mingw64/x86_64-w64-mingw32/include/shellapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/specstrings.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdarg.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdlib.h \ - C:/mingw64/x86_64-w64-mingw32/include/stralign.h \ - C:/mingw64/x86_64-w64-mingw32/include/string.h \ - C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/synchapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h \ - C:/mingw64/x86_64-w64-mingw32/include/sys/types.h \ - C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/time.h \ - C:/mingw64/x86_64-w64-mingw32/include/timeapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/tvout.h \ - C:/mingw64/x86_64-w64-mingw32/include/unistd.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwn.h \ - C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/urlmon.h \ - C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h \ - C:/mingw64/x86_64-w64-mingw32/include/winbase.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincon.h \ - C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h \ - C:/mingw64/x86_64-w64-mingw32/include/windef.h \ - C:/mingw64/x86_64-w64-mingw32/include/windows.h \ - C:/mingw64/x86_64-w64-mingw32/include/winefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/winerror.h \ - C:/mingw64/x86_64-w64-mingw32/include/wingdi.h \ - C:/mingw64/x86_64-w64-mingw32/include/winioctl.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnls.h \ - C:/mingw64/x86_64-w64-mingw32/include/winnt.h \ - C:/mingw64/x86_64-w64-mingw32/include/winperf.h \ - C:/mingw64/x86_64-w64-mingw32/include/winreg.h \ - C:/mingw64/x86_64-w64-mingw32/include/winscard.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ - C:/mingw64/x86_64-w64-mingw32/include/winspool.h \ - C:/mingw64/x86_64-w64-mingw32/include/winsvc.h \ - C:/mingw64/x86_64-w64-mingw32/include/winuser.h \ - C:/mingw64/x86_64-w64-mingw32/include/winver.h \ - C:/mingw64/x86_64-w64-mingw32/include/wnnc.h \ - C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2def.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h \ - C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypes.h \ - C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h \ - include/tls1_3.h \ - include/tls_client_recv.h \ - include/tls_client_send.h \ - include/tls_keys_calc.h \ - include/tls_octads.h \ - include/tls_sal.h \ - include/tls_sockets.h \ - include/tls_tickets.h - -CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: lib/tls_x509.cpp \ - C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ - C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ - C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ - C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ - C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ - C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ - C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ - include/tls_octads.h \ - include/tls_x509.h - - -lib/tls_sockets.cpp: - -sal/miracl/includes/fp_NIST384.h: - -sal/miracl/includes/fp_NIST256.h: - -sal/miracl/includes/fp_F448.h: - -sal/miracl/includes/fp_F25519.h: - -sal/miracl/includes/ff_RSA4096.h: - -sal/miracl/includes/ecp_NIST384.h: - -sal/miracl/includes/ecp_NIST256.h: - -sal/miracl/includes/ecp_Ed448.h: - -sal/miracl/includes/ecdh_NIST256.h: - -sal/miracl/includes/config_field_F448.h: - -sal/miracl/includes/config_field_F25519.h: - -sal/miracl/includes/rsa_RSA4096.h: - -sal/miracl/includes/config_ff_RSA4096.h: - -sal/miracl/includes/config_curve_NIST384.h: - -sal/miracl/includes/config_curve_NIST256.h: - -sal/miracl/includes/config_curve_C25519.h: - -sal/miracl/includes/big_B512_60.h: - -sal/miracl/includes/big_B448_58.h: - -C:/mingw64/include/oqs/sig_sphincs.h: - -C:/mingw64/include/oqs/sig_dilithium.h: - -C:/mingw64/include/oqs/kem_ml_kem.h: - -C:/mingw64/include/oqs/kem_frodokem.h: - -C:/mingw64/include/oqs/common.h: - -include/tls_protocol.h: - -lib/tls_protocol.cpp: - -lib/tls_logger.cpp: - -lib/tls_keys_calc.cpp: - -lib/tls_client_recv.cpp: - -lib/tls_client_cert.cpp: - -include/tls_x509.h: - -include/tls_logger.h: - -lib/tls_x509.cpp: - -include/tls_keys_calc.h: - -include/tls_client_send.h: - -C:/mingw64/include/oqs/sig_ml_dsa.h: - -include/tls_client_recv.h: - -lib/tls_cert_chain.cpp: - -C:/mingw64/x86_64-w64-mingw32/include/wtypes.h: - -C:/mingw64/x86_64-w64-mingw32/include/ws2def.h: - -C:/mingw64/x86_64-w64-mingw32/include/wow64apiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/sys/time.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsvc.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsock2.h: - -C:/mingw64/x86_64-w64-mingw32/include/winnetwk.h: - -C:/mingw64/x86_64-w64-mingw32/include/wingdi.h: - -C:/mingw64/x86_64-w64-mingw32/include/winerror.h: - -C:/mingw64/x86_64-w64-mingw32/include/winefs.h: - -C:/mingw64/x86_64-w64-mingw32/include/windows.h: - -C:/mingw64/x86_64-w64-mingw32/include/winapifamily.h: - -include/tls_certs.h: - -C:/mingw64/x86_64-w64-mingw32/include/virtdisk.h: - -C:/mingw64/x86_64-w64-mingw32/include/utilapiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/urlmon.h: - -C:/mingw64/x86_64-w64-mingw32/include/unknwnbase.h: - -sal/miracl/includes/ecdh_NIST384.h: - -C:/mingw64/x86_64-w64-mingw32/include/unistd.h: - -C:/mingw64/x86_64-w64-mingw32/include/threadpoolapiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/synchapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/stringapiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/stralign_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/sdkddkver.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcsal.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcnterr.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcndr.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcdcep.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcasync.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpc.h: - -C:/mingw64/x86_64-w64-mingw32/include/qos.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack1.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsadata.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_wsa_errnos.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_types.h: - -include/tls_sockets.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcnsip.h: - -C:/mingw64/x86_64-w64-mingw32/include/processthreadsapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/realtimeapiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/oleidl.h: - -C:/mingw64/x86_64-w64-mingw32/include/oleauto.h: - -C:/mingw64/x86_64-w64-mingw32/include/objidlbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/objbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/nb30.h: - -C:/mingw64/x86_64-w64-mingw32/include/namespaceapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/namedpipeapi.h: - -sal/miracl/includes/big_B256_56.h: - -C:/mingw64/x86_64-w64-mingw32/include/msxml.h: - -C:/mingw64/x86_64-w64-mingw32/include/mstcpip.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmsyscom.h: - -C:/mingw64/include/oqs/oqsconfig.h: - -C:/mingw64/x86_64-w64-mingw32/include/minwinbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/specstrings.h: - -C:/mingw64/x86_64-w64-mingw32/include/memoryapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/mcx.h: - -C:/mingw64/x86_64-w64-mingw32/include/lzexpand.h: - -C:/mingw64/x86_64-w64-mingw32/include/libloaderapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/playsoundapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/ktmtypes.h: - -C:/mingw64/x86_64-w64-mingw32/include/interlockedapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/in6addr.h: - -C:/mingw64/include/oqs/kem_hqc.h: - -C:/mingw64/x86_64-w64-mingw32/include/handleapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/guiddef.h: - -C:/mingw64/x86_64-w64-mingw32/include/fileapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/winver.h: - -C:/mingw64/x86_64-w64-mingw32/include/fibersapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/errhandlingapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/getopt.h: - -C:/mingw64/x86_64-w64-mingw32/include/driverspecs.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack2.h: - -C:/mingw64/x86_64-w64-mingw32/include/dlgs.h: - -C:/mingw64/x86_64-w64-mingw32/include/heapapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/debugapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/ddeml.h: - -lib/tls_sal.cpp: - -C:/mingw64/x86_64-w64-mingw32/include/dde.h: - -C:/mingw64/x86_64-w64-mingw32/include/datetimeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/concurrencysal.h: - -lib/tls_octads.cpp: - -C:/mingw64/x86_64-w64-mingw32/include/combaseapi.h: - -C:/mingw64/include/oqs/kem_ntruprime.h: - -C:/mingw64/x86_64-w64-mingw32/include/apiset.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h: - -C:/mingw64/x86_64-w64-mingw32/include/timeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_stdarg.h: - -C:/mingw64/x86_64-w64-mingw32/include/imm.h: - -C:/mingw64/x86_64-w64-mingw32/include/_bsd_types.h: - -sal/miracl/includes/config_field_NIST384.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xtestintrin.h: - -C:/mingw64/include/oqs/sig.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavesintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveoptintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsaveintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcdce.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmiscapi2.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xsavecintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xmmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86gprintrin.h: - -include/tls1_3.h: - -C:/mingw64/include/c++/13.2.0/debug/assertions.h: - -C:/mingw64/include/c++/13.2.0/cstdio: - -C:/mingw64/include/c++/13.2.0/cstdint: - -C:/mingw64/x86_64-w64-mingw32/include/sys/types.h: - -include/tls_pqibe.h: - -C:/mingw64/x86_64-w64-mingw32/include/ncrypt.h: - -C:/mingw64/include/c++/13.2.0/cstddef: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++allocator.h: - -C:/mingw64/include/c++/13.2.0/bits/utility.h: - -C:/mingw64/include/c++/13.2.0/bits/uses_allocator_args.h: - -C:/mingw64/include/c++/13.2.0/cerrno: - -C:/mingw64/include/c++/13.2.0/bits/stringfwd.h: - -sal/miracl/includes/big_B384_56.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512cdintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/locale.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wbnoinvdintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winscard.h: - -C:/mingw64/x86_64-w64-mingw32/include/bcrypt.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_iterator.h: - -C:/mingw64/x86_64-w64-mingw32/include/cguid.h: - -C:/mingw64/include/c++/13.2.0/bits/refwrap.h: - -C:/mingw64/x86_64-w64-mingw32/include/timezoneapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/rpcnsi.h: - -C:/mingw64/include/c++/13.2.0/bits/locale_classes.h: - -C:/mingw64/include/c++/13.2.0/bits/ostream.tcc: - -C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h: - -C:/mingw64/include/c++/13.2.0/bits/range_access.h: - -C:/mingw64/include/c++/13.2.0/bits/move.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h: - -include/tls_tickets.h: - -C:/mingw64/include/c++/13.2.0/string_view: - -sal/miracl/includes/eddsa_Ed448.h: - -C:/mingw64/x86_64-w64-mingw32/include/winnt.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_iterator_base_funcs.h: - -C:/mingw64/include/c++/13.2.0/pstl/pstl_config.h: - -C:/mingw64/include/c++/13.2.0/bits/localefwd.h: - -C:/mingw64/x86_64-w64-mingw32/include/winsmcrd.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmeapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/limits.h: - -C:/mingw64/include/c++/13.2.0/bits/locale_facets.tcc: - -C:/mingw64/x86_64-w64-mingw32/include/winioctl.h: - -C:/mingw64/include/c++/13.2.0/bits/locale_facets.h: - -sal/miracl/includes/ecp_Ed25519.h: - -C:/mingw64/x86_64-w64-mingw32/include/vadefs.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/x86intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16vlintrin.h: - -sal/miracl/includes/config_ff_RSA2048.h: - -include/tls_octads.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pmmintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/streambuf_iterator.h: - -C:/mingw64/include/c++/13.2.0/bits/string_view.tcc: - -C:/mingw64/include/c++/13.2.0/bits/istream.tcc: - -C:/mingw64/include/c++/13.2.0/bits/ios_base.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_function.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lzcntintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/io.h: - -C:/mingw64/include/c++/13.2.0/bits/invoke.h: - -C:/mingw64/x86_64-w64-mingw32/include/joystickapi.h: - -C:/mingw64/include/c++/13.2.0/bits/cxxabi_init_exception.h: - -C:/mingw64/include/c++/13.2.0/bits/cxxabi_forced.h: - -C:/mingw64/include/c++/13.2.0/cctype: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxcomplexintrin.h: - -C:/mingw64/include/c++/13.2.0/ext/atomicity.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vaesintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/commdlg.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/serializeintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/charconv.h: - -C:/mingw64/include/c++/13.2.0/bits/char_traits.h: - -C:/mingw64/include/c++/13.2.0/bits/basic_string.h: - -C:/mingw64/x86_64-w64-mingw32/include/threadpoollegacyapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h: - -C:/mingw64/include/c++/13.2.0/bits/basic_ios.tcc: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512dqintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/basic_ios.h: - -C:/mingw64/include/c++/13.2.0/bits/allocator.h: - -C:/mingw64/include/c++/13.2.0/ios: - -C:/mingw64/include/c++/13.2.0/bits/locale_classes.tcc: - -C:/mingw64/include/c++/13.2.0/bits/alloc_traits.h: - -C:/mingw64/include/c++/13.2.0/initializer_list: - -C:/mingw64/x86_64-w64-mingw32/include/windef.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/raointintrin.h: - -sal/miracl/includes/eddsa_Ed25519.h: - -C:/mingw64/x86_64-w64-mingw32/include/oaidl.h: - -C:/mingw64/include/c++/13.2.0/bits/new_allocator.h: - -C:/mingw64/include/c++/13.2.0/bit: - -C:/mingw64/x86_64-w64-mingw32/include/stddef.h: - -sal/miracl/includes/fp4_BLS12381.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_algobase.h: - -include/tls_cert_chain.h: - -C:/mingw64/include/c++/13.2.0/bits/nested_exception.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/wchar_s.h: - -C:/mingw64/include/oqs/oqs.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h: - -C:/mingw64/x86_64-w64-mingw32/include/securitybaseapi.h: - -C:/mingw64/include/c++/13.2.0/ext/numeric_traits.h: - -C:/mingw64/x86_64-w64-mingw32/include/stralign.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h: - -C:/mingw64/x86_64-w64-mingw32/include/wincrypt.h: - -C:/mingw64/include/c++/13.2.0/stdlib.h: - -C:/mingw64/include/c++/13.2.0/clocale: - -C:/mingw64/include/c++/13.2.0/bits/hash_bytes.h: - -C:/mingw64/x86_64-w64-mingw32/include/winreg.h: - -C:/mingw64/x86_64-w64-mingw32/include/process.h: - -C:/mingw64/x86_64-w64-mingw32/include/sal.h: - -C:/mingw64/x86_64-w64-mingw32/include/processenv.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/tvout.h: - -C:/mingw64/x86_64-w64-mingw32/include/inttypes.h: - -C:/mingw64/include/c++/13.2.0/bits/functexcept.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqintrin.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/cpu_defines.h: - -C:/mingw64/include/oqs/sig_falcon.h: - -C:/mingw64/x86_64-w64-mingw32/include/cderr.h: - -C:/mingw64/include/c++/13.2.0/bits/concept_check.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/limits.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread.h: - -C:/mingw64/include/c++/13.2.0/ext/alloc_traits.h: - -C:/mingw64/include/c++/13.2.0/debug/debug.h: - -sal/miracl/includes/fp_BLS12381.h: - -sal/miracl/includes/core.h: - -C:/mingw64/include/oqs/kem.h: - -C:/mingw64/include/c++/13.2.0/bits/predefined_ops.h: - -C:/mingw64/include/oqs/kem_classic_mceliece.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmivlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmsystem.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/ostream_insert.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winbase.h: - -C:/mingw64/x86_64-w64-mingw32/include/reason.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt_wstdlib.h: - -C:/mingw64/x86_64-w64-mingw32/include/shellapi.h: - -sal/miracl/includes/ecp_BLS12381.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_iterator_base_types.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2vlintrin.h: - -sal/miracl/includes/config_big_B384_56.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm_malloc.h: - -sal/miracl/includes/ff_RSA2048.h: - -C:/mingw64/x86_64-w64-mingw32/include/winspool.h: - -C:/mingw64/x86_64-w64-mingw32/include/poppack.h: - -C:/mingw64/include/c++/13.2.0/bits/memory_resource.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdint.h: - -lib/ibe/tls_bfibe.cpp: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnnivlintrin.h: - -include/tls_bfibe.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_fd_types.h: - -C:/mingw64/include/c++/13.2.0/bits/exception_defines.h: - -C:/mingw64/x86_64-w64-mingw32/include/wincon.h: - -C:/mingw64/include/c++/13.2.0/cstdlib: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h: - -C:/mingw64/include/c++/13.2.0/bits/ptr_traits.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vldqintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/ioapiset.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/emmintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl: - -C:/mingw64/include/c++/13.2.0/bits/memoryfwd.h: - -C:/mingw64/x86_64-w64-mingw32/include/inaddr.h: - -sal/miracl/includes/fp12_BLS12381.h: - -C:/mingw64/x86_64-w64-mingw32/include/winnls.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdarg.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread_signal.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/os_defines.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ip_mreq1.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h: - -C:/mingw64/x86_64-w64-mingw32/include/apisetcconv.h: - -C:/mingw64/x86_64-w64-mingw32/include/corecrt_startup.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_ws1_undef.h: - -sal/miracl/includes/config_curve_BLS12381.h: - -C:/mingw64/x86_64-w64-mingw32/include/malloc.h: - -C:/mingw64/x86_64-w64-mingw32/include/ole2.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdlib_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/wchar.h: - -C:/mingw64/include/c++/13.2.0/bits/std_abs.h: - -C:/mingw64/x86_64-w64-mingw32/include/dpapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16vlintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/mmiscapi.h: - -C:/mingw64/include/c++/13.2.0/bits/exception.h: - -C:/mingw64/x86_64-w64-mingw32/include/time.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdlib.h: - -C:/mingw64/include/c++/13.2.0/tuple: - -C:/mingw64/include/c++/13.2.0/bits/postypes.h: - -C:/mingw64/include/c++/13.2.0/bits/cpp_type_traits.h: - -sal/miracl/includes/ecp_C25519.h: - -C:/mingw64/include/c++/13.2.0/istream: - -C:/mingw64/x86_64-w64-mingw32/include/mciapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h: - -C:/mingw64/x86_64-w64-mingw32/include/string.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_construct.h: - -C:/mingw64/x86_64-w64-mingw32/include/ctype.h: - -C:/mingw64/x86_64-w64-mingw32/include/sys/timeb.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdarg.h: - -C:/mingw64/include/c++/13.2.0/system_error: - -C:/mingw64/include/c++/13.2.0/bits/requires_hosted.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/keylockerintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxneconvertintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/stl_pair.h: - -C:/mingw64/x86_64-w64-mingw32/include/fltwinerror.h: - -C:/mingw64/x86_64-w64-mingw32/include/excpt.h: - -C:/mingw64/include/c++/13.2.0/bits/streambuf.tcc: - -sal/miracl/includes/fp2_BLS12381.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vnniintrin.h: - -C:/mingw64/include/c++/13.2.0/exception: - -C:/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h: - -C:/mingw64/x86_64-w64-mingw32/include/errno.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h: - -C:/mingw64/x86_64-w64-mingw32/include/propidl.h: - -C:/mingw64/x86_64-w64-mingw32/include/profileapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/xopintrin.h: - -sal/miracl/includes/big_B384_58.h: - -C:/mingw64/include/c++/13.2.0/iostream: - -C:/mingw64/include/c++/13.2.0/ostream: - -sal/miracl/includes/pair_BLS12381.h: - -sal/miracl/includes/config_field_BLS12381.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxifmaintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw.h: - -sal/miracl/includes/ecp2_BLS12381.h: - -C:/mingw64/x86_64-w64-mingw32/include/wnnc.h: - -C:/mingw64/x86_64-w64-mingw32/include/minwindef.h: - -C:/mingw64/include/c++/13.2.0/backward/binders.h: - -C:/mingw64/x86_64-w64-mingw32/include/_timeval.h: - -sal/miracl/includes/randapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/waitpkgintrin.h: - -include/tls_sal.h: - -sal/miracl/includes/config_big_B384_58.h: - -C:/mingw64/x86_64-w64-mingw32/include/wtypesbase.h: - -lib/ibe/tls_pqibe.cpp: - -C:/mingw64/include/c++/13.2.0/ext/string_conversions.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmi2intrin.h: - -C:/mingw64/include/c++/13.2.0/ext/type_traits.h: - -C:/mingw64/x86_64-w64-mingw32/include/prsht.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cldemoteintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clflushoptintrin.h: - -C:/mingw64/include/c++/13.2.0/new: - -C:/mingw64/x86_64-w64-mingw32/include/winsock.h: - -C:/mingw64/include/c++/13.2.0/stdexcept: - -C:/mingw64/include/c++/13.2.0/streambuf: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/functional_hash.h: - -C:/mingw64/include/c++/13.2.0/typeinfo: - -C:/mingw64/x86_64-w64-mingw32/include/processtopologyapi.h: - -C:/mingw64/x86_64-w64-mingw32/include/stdio.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/atomic_word.h: - -C:/mingw64/include/oqs/rand.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/ctype_base.h: - -C:/mingw64/x86_64-w64-mingw32/include/unknwn.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/ctype_inline.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fma4intrin.h: - -C:/mingw64/include/c++/13.2.0/bits/basic_string.tcc: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/error_constants.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/sgxintrin.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/gthr.h: - -C:/mingw64/x86_64-w64-mingw32/include/_mingw_stat64.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/vpclmulqdqintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread_unistd.h: - -C:/mingw64/x86_64-w64-mingw32/include/signal.h: - -C:/mingw64/x86_64-w64-mingw32/include/wctype.h: - -C:/mingw64/x86_64-w64-mingw32/include/pthread_compat.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmiintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/jobapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/immintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clwbintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/bmiintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/adxintrin.h: - -sal/miracl/includes/config_big_B512_60.h: - -C:/mingw64/include/c++/13.2.0/iosfwd: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/enqcmdintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/securityappcontainer.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ammintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack8.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxbf16intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/psdk_inc/_socket_types.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchiintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winuser.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxint8intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxtileintrin.h: - -lib/tls_cacerts.cpp: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124fmapsintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cmpccxaddintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/uintrintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx5124vnniwintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/movdirintrin.h: - -sal/miracl/includes/config_big_B448_58.h: - -sal/miracl/includes/arch.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bf16intrin.h: - -sal/miracl/includes/config_curve_Ed25519.h: - -C:/mingw64/x86_64-w64-mingw32/include/afunix.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bitalgintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512bwintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vpopcntdqvlintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512fp16intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmaintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/basetsd.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512erintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512ifmavlintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512pfintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/systemtopologyapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/syslimits.h: - -C:/mingw64/include/c++/13.2.0/cwctype: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vbmi2intrin.h: - -sal/miracl/includes/ecdh_C25519.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vlbwintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx512vp2intersectvlintrin.h: - -sal/miracl/includes/config_big_B256_56.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avxvnniint8intrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/sysinfoapi.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/hresetintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/cetintrin.h: - -C:/mingw64/include/oqs/kem_kyber.h: - -C:/mingw64/include/c++/13.2.0/bits/uses_allocator.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/clzerointrin.h: - -sal/miracl/includes/rsa_RSA2048.h: - -C:/mingw64/x86_64-w64-mingw32/include/pshpack4.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/f16cintrin.h: - -lib/tls_client_send.cpp: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/gthr-default.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/amxfp16intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fmaintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/fxsrintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/winperf.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/gfniintrin.h: - -sal/miracl/includes/config_field_NIST256.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/ia32intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/lwpintrin.h: - -C:/mingw64/include/c++/13.2.0/type_traits: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mm3dnow.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mmintrin.h: - -sal/miracl/includes/config_curve_Ed448.h: - -C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++locale.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/mwaitxintrin.h: - -lib/tls_tickets.cpp: - -C:/mingw64/x86_64-w64-mingw32/include/objidl.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pconfigintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/smmintrin.h: - -C:/mingw64/include/c++/13.2.0/bits/exception_ptr.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/pkuintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/bemapiset.h: - -C:/mingw64/include/c++/13.2.0/cwchar: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/popcntintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/prfchwintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/avx2intrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rdseedintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/wmmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/shaintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/rtmintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/ws2tcpip.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tbmintrin.h: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tmmintrin.h: - -C:/mingw64/x86_64-w64-mingw32/include/servprov.h: - -C:/mingw64/include/c++/13.2.0/string: - -C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/tsxldtrkintrin.h: +# Empty compiler generated dependencies file for tiitls. +# This may be replaced when dependencies are built. diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/includes_CXX.rsp b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/includes_CXX.rsp index 75b7757..d383f49 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/includes_CXX.rsp +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/includes_CXX.rsp @@ -1 +1 @@ --I"D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include" -I"D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl" -I"D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes" +-ID:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include -ID:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl -ID:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d index f9fbb49..cd4583a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj.d @@ -1,5 +1,5 @@ CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_bfibe.cpp \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_bfibe.cpp \ C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ @@ -35,24 +35,24 @@ CMakeFiles/tiitls.dir/lib/ibe/tls_bfibe.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/sys/timeb_s.h \ C:/mingw64/x86_64-w64-mingw32/include/_timeval.h \ C:/mingw64/x86_64-w64-mingw32/include/pthread_time.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/randapi.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/randapi.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/core.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_bfibe.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/pair_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp12_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp4_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp2_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B384_58.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/arch.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_bfibe.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/pair_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp12_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp4_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp2_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/big_B384_58.h \ C:/mingw64/x86_64-w64-mingw32/include/inttypes.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B384_58.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp2_BLS12381.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_BLS12381.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_big_B384_58.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_field_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp2_BLS12381.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_BLS12381.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d index ea019db..674da6e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj.d @@ -1,5 +1,5 @@ CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\ibe\tls_pqibe.cpp \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\ibe\tls_pqibe.cpp \ C:/mingw64/include/c++/13.2.0/iostream \ C:/mingw64/include/c++/13.2.0/bits/requires_hosted.h \ C:/mingw64/include/c++/13.2.0/x86_64-w64-mingw32/bits/c++config.h \ @@ -144,7 +144,7 @@ CMakeFiles/tiitls.dir/lib/ibe/tls_pqibe.cpp.obj: \ C:/mingw64/include/c++/13.2.0/cstdint \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_pqibe.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_pqibe.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/core.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/arch.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj.d index d569482..68c332c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj.d @@ -1,7 +1,7 @@ CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cacerts.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cacerts.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -13,8 +13,8 @@ CMakeFiles/tiitls.dir/lib/tls_cacerts.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj.d index 1429d5e..76799ec 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj.d @@ -1,7 +1,7 @@ CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_cert_chain.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_cert_chain.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_cert_chain.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -13,8 +13,8 @@ CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -302,10 +302,10 @@ CMakeFiles/tiitls.dir/lib/tls_cert_chain.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj.d index d85ea1a..3ed60af 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj.d @@ -1,7 +1,7 @@ CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_cert.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_cert.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -13,8 +13,8 @@ CMakeFiles/tiitls.dir/lib/tls_client_cert.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj.d index b7ae333..7b8c950 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj.d @@ -1,8 +1,8 @@ CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_recv.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_recv.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -14,8 +14,8 @@ CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -303,11 +303,11 @@ CMakeFiles/tiitls.dir/lib/tls_client_recv.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_cert_chain.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj.d index 6926b73..b77d1d9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj.d @@ -1,8 +1,8 @@ CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_client_send.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_client_send.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -14,8 +14,8 @@ CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -303,9 +303,9 @@ CMakeFiles/tiitls.dir/lib/tls_client_send.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj.d index 23d7a74..5c4549e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj.d @@ -1,7 +1,7 @@ CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_keys_calc.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_keys_calc.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -13,8 +13,8 @@ CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -302,10 +302,10 @@ CMakeFiles/tiitls.dir/lib/tls_keys_calc.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj.d index aad188c..bce1f94 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj.d @@ -1,6 +1,6 @@ CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_logger.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_logger.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ @@ -10,13 +10,13 @@ CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ C:/mingw64/x86_64-w64-mingw32/include/windows.h \ @@ -302,4 +302,4 @@ CMakeFiles/tiitls.dir/lib/tls_logger.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj.d index efe58d2..413084c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj.d @@ -1,6 +1,6 @@ CMakeFiles/tiitls.dir/lib/tls_octads.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_octads.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_octads.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj.d index c142968..610ccf1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj.d @@ -1,8 +1,8 @@ CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_protocol.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_protocol.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_protocol.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_protocol.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -14,8 +14,8 @@ CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -303,11 +303,11 @@ CMakeFiles/tiitls.dir/lib/tls_protocol.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_cert_chain.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_certs.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_tickets.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_cert_chain.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_certs.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_tickets.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj.d index 3328cd4..9d8c3d9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj.d @@ -1,7 +1,7 @@ CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sal.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sal.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -13,8 +13,8 @@ CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -302,48 +302,48 @@ CMakeFiles/tiitls.dir/lib/tls_sal.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/core.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdbool.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/arch.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecdh_NIST256.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_NIST256.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_NIST256.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B256_56.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/arch.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecdh_NIST256.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_NIST256.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp_NIST256.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/big_B256_56.h \ C:/mingw64/x86_64-w64-mingw32/include/inttypes.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/core.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B256_56.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_NIST256.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_NIST256.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecdh_NIST384.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_NIST384.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_NIST384.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B384_56.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B384_56.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_NIST384.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_NIST384.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecdh_C25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_C25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_F25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_F25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_C25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/rsa_RSA2048.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ff_RSA2048.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B512_60.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B512_60.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_ff_RSA2048.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/rsa_RSA4096.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ff_RSA4096.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_ff_RSA4096.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/eddsa_Ed25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_Ed25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_Ed25519.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/eddsa_Ed448.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/ecp_Ed448.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/fp_F448.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/big_B448_58.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_big_B448_58.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_field_F448.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/sal/miracl/includes/config_curve_Ed448.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/core.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_big_B256_56.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_field_NIST256.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_NIST256.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecdh_NIST384.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_NIST384.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp_NIST384.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/big_B384_56.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_big_B384_56.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_field_NIST384.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_NIST384.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecdh_C25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_C25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp_F25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_field_F25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_C25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/rsa_RSA2048.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ff_RSA2048.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/big_B512_60.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_big_B512_60.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_ff_RSA2048.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/rsa_RSA4096.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ff_RSA4096.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_ff_RSA4096.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/eddsa_Ed25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_Ed25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_Ed25519.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/eddsa_Ed448.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/ecp_Ed448.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/fp_F448.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/big_B448_58.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_big_B448_58.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_field_F448.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl/includes/config_curve_Ed448.h \ C:/mingw64/include/oqs/oqs.h C:/mingw64/include/oqs/oqsconfig.h \ C:/mingw64/include/oqs/common.h C:/mingw64/include/oqs/rand.h \ C:/mingw64/include/oqs/kem.h \ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj.d index a4b8920..cf29a19 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj.d @@ -1,6 +1,6 @@ CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_sockets.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_logger.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_sockets.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_logger.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ @@ -10,13 +10,13 @@ CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/vadefs.h \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ C:/mingw64/x86_64-w64-mingw32/include/_mingw_unicode.h \ C:/mingw64/x86_64-w64-mingw32/include/windows.h \ @@ -302,4 +302,4 @@ CMakeFiles/tiitls.dir/lib/tls_sockets.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj.d index c7d7303..e34efa7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj.d @@ -1,7 +1,7 @@ CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_tickets.cpp \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_tickets.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls1_3.h \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_tickets.cpp \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_tickets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls1_3.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/stdint.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ @@ -13,8 +13,8 @@ CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sockets.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sockets.h \ C:/mingw64/x86_64-w64-mingw32/include/string.h \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/string_s.h \ C:/mingw64/x86_64-w64-mingw32/include/winsock2.h \ @@ -302,7 +302,7 @@ CMakeFiles/tiitls.dir/lib/tls_tickets.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_recv.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_sal.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_keys_calc.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_client_send.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_recv.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_sal.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_keys_calc.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_client_send.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj.d b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj.d index fb1d191..9c7a1fa 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj.d +++ b/TIIGER_TLS/PQ_TIIGER_TLS/CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj.d @@ -1,5 +1,5 @@ CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: \ - D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\lib\tls_x509.cpp \ + D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\lib\tls_x509.cpp \ C:/mingw64/x86_64-w64-mingw32/include/stdio.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt_stdio_config.h \ C:/mingw64/x86_64-w64-mingw32/include/corecrt.h \ @@ -11,8 +11,8 @@ CMakeFiles/tiitls.dir/lib/tls_x509.cpp.obj: \ C:/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h \ C:/mingw64/x86_64-w64-mingw32/include/swprintf.inl \ C:/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_octads.h \ + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_octads.h \ C:/mingw64/lib/gcc/x86_64-w64-mingw32/13.2.0/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/stddef.h \ C:/mingw64/x86_64-w64-mingw32/include/crtdefs.h \ - D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/include/tls_x509.h + D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/include/tls_x509.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/Makefile b/TIIGER_TLS/PQ_TIIGER_TLS/Makefile index 79d9e95..3334cdb 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/Makefile +++ b/TIIGER_TLS/PQ_TIIGER_TLS/Makefile @@ -56,10 +56,10 @@ RM = C:\mingw64\bin\cmake.exe -E rm -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_SOURCE_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = D:\DOKUMENTY\diplomovka-final\Scott-cpp-win +CMAKE_BINARY_DIR = D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS #============================================================================= # Targets provided globally by CMake. @@ -86,9 +86,9 @@ rebuild_cache/fast: rebuild_cache # The main all target all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\\CMakeFiles\progress.marks + $(CMAKE_COMMAND) -E cmake_progress_start D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\\CMakeFiles\progress.marks $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start D:\DOKUMENTY\diplomovka-final\Scott-cpp-win\CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start D:\TUKE\DIPLOMOVKA\MastersThesis\TIIGER_TLS\PQ_TIIGER_TLS\CMakeFiles 0 .PHONY : all # The main clean target diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results.txt b/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results.txt index 3cfe433..fa3217a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results.txt +++ b/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results.txt @@ -5,52 +5,52 @@ Tested on Ubuntu 22.04.3 liboqs 0.9.2, oqs-provider 0.5.3 1.3.2024 -KEM + CERT PORT STATUS +CERT KEM PORT STATUS -dilithium2 + bikel1 6087 - OK -dilithium2 + frodo640aes 6088 - OK -dilithium2 + frodo640shake 6089 - OK -dilithium2 + hqc128 6090 - KEX error (kex=-1) -dilithium2 + kyber512 6091 - OK +dilithium2 bikel1 6087 - OK +dilithium2 frodo640aes 6088 - OK +dilithium2 frodo640shake 6089 - OK +dilithium2 hqc128 6090 - KEX error (kex=-1) +dilithium2 kyber512 6091 - OK -dilithium3 + bikel3 6105 - OK -dilithium3 + frodo976aes 6106 - OK -dilithium3 + frodo976shake 6107 - OK -dilithium3 + hqc192 6108 - KEX error (kex=-1) -dilithium3 + kyber768 6109 - OK +dilithium3 bikel3 6105 - OK +dilithium3 frodo976aes 6106 - OK +dilithium3 frodo976shake 6107 - OK +dilithium3 hqc192 6108 - KEX error (kex=-1) +dilithium3 kyber768 6109 - OK -dilithium5 bikel5 6121 - OK -dilithium5 frodo1344aes 6122 - OK -dilithium5 frodo1344shake 6123 - OK -dilithium5 hqc256 6124 - KEX error (kex=-1) -dilithium5 kyber1024 6125 - OK +dilithium5 bikel5 6121 - OK +dilithium5 frodo1344aes 6122 - OK +dilithium5 frodo1344shake 6123 - OK +dilithium5 hqc256 6124 - KEX error (kex=-1) +dilithium5 kyber1024 6125 - OK -falcon1024 bikel5 6132 - Server Certificate sig is NOT OK -falcon1024 frodo1344aes 6133 - Server Certificate sig is NOT OK -falcon1024 frodo1344shake 6134 - Server Certificate sig is NOT OK -falcon1024 hqc256 6135 - KEX error (kex=-1) -falcon1024 kyber1024 6136 - Server Certificate sig is NOT OK +falcon1024 bikel5 6132 - Server Certificate sig is NOT OK +falcon1024 frodo1344aes 6133 - Server Certificate sig is NOT OK +falcon1024 frodo1344shake 6134 - Server Certificate sig is NOT OK +falcon1024 hqc256 6135 - KEX error (kex=-1) +falcon1024 kyber1024 6136 - Server Certificate sig is NOT OK -falcon512 bikel1 6143 - Server Certificate sig is NOT OK -falcon512 frodo640aes 6144 - Server Certificate sig is NOT OK -falcon512 frodo640shake 6145 - Server Certificate sig is NOT OK -falcon512 hqc128 6146 - KEX error (kex=-1) -falcon512 kyber512 6147 - Server Certificate sig is NOT OK +falcon512 bikel1 6143 - Server Certificate sig is NOT OK +falcon512 frodo640aes 6144 - Server Certificate sig is NOT OK +falcon512 frodo640shake 6145 - Server Certificate sig is NOT OK +falcon512 hqc128 6146 - KEX error (kex=-1) +falcon512 kyber512 6147 - Server Certificate sig is NOT OK -sphincssha2128fsimple bikel1 6161 - OK -sphincssha2128fsimple frodo640aes 6162 - OK -sphincssha2128fsimple frodo640shake 6163 - OK -sphincssha2128fsimple hqc128 6164 - KEX error (kex=-1) -sphincssha2128fsimple kyber512 6165 - OK +sphincssha2128fsimple bikel1 6161 - OK +sphincssha2128fsimple frodo640aes 6162 - OK +sphincssha2128fsimple frodo640shake 6163 - OK +sphincssha2128fsimple hqc128 6164 - KEX error (kex=-1) +sphincssha2128fsimple kyber512 6165 - OK -sphincssha2128ssimple bikel1 6179 - OK -sphincssha2128ssimple frodo640aes 6180 - OK -sphincssha2128ssimple frodo640shake 6181 - OK -sphincssha2128ssimple hqc128 6182 - KEX error (kex=-1) -sphincssha2128ssimple kyber512 6183 - OK +sphincssha2128ssimple bikel1 6179 - OK +sphincssha2128ssimple frodo640aes 6180 - OK +sphincssha2128ssimple frodo640shake 6181 - OK +sphincssha2128ssimple hqc128 6182 - KEX error (kex=-1) +sphincssha2128ssimple kyber512 6183 - OK -sphincsshake128fsimple bikel1 6213 - OK -sphincsshake128fsimple frodo640aes 6214 - OK -sphincsshake128fsimple frodo640shake 6215 - OK -sphincsshake128fsimple hqc128 6216 - KEX error (kex=-1) -sphincsshake128fsimple kyber512 6217 - OK \ No newline at end of file +sphincsshake128fsimple bikel1 6213 - OK +sphincsshake128fsimple frodo640aes 6214 - OK +sphincsshake128fsimple frodo640shake 6215 - OK +sphincsshake128fsimple hqc128 6216 - KEX error (kex=-1) +sphincsshake128fsimple kyber512 6217 - OK \ No newline at end of file diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results2.txt b/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results2.txt new file mode 100644 index 0000000..b038900 --- /dev/null +++ b/TIIGER_TLS/PQ_TIIGER_TLS/OQS_TEST_results2.txt @@ -0,0 +1,84 @@ +Test server https://test.openquantumsafe.org/ +Root CA in file tls_cacerts.cpp + +Tested on Ubuntu 22.04.3 +liboqs 0.10.0, oqs-provider 0.6.0 +15.4.2024 + +CERT KEM PORT STATUS +dilithium2 bikel1 6109 OK +dilithium2 frodo640aes 6110 OK +dilithium2 frodo640shake 6111 OK +dilithium2 hqc128 6112 OK +dilithium2 kyber512 6113 OK +dilithium2 mlkem512 6114 OK + +dilithium3 bikel3 6132 OK +dilithium3 frodo976aes 6133 OK +dilithium3 frodo976shake 6134 OK +dilithium3 hqc192 6135 OK +dilithium3 kyber768 6136 OK +dilithium3 mlkem768 6137 OK + +dilithium5 bikel5 6152 OK +dilithium5 frodo1344aes 6153 OK +dilithium5 frodo1344shake 6154 OK +dilithium5 hqc256 6155 OK +dilithium5 kyber1024 6156 OK +dilithium5 mlkem1024 6157 OK + +falcon1024 bikel5 6165 OK +falcon1024 frodo1344aes 6166 OK +falcon1024 frodo1344shake 6167 OK +falcon1024 hqc256 6168 OK +falcon1024 kyber1024 6169 OK +falcon1024 mlkem1024 6170 OK + +falcon512 bikel1 6178 OK +falcon512 frodo640aes 6179 OK +falcon512 frodo640shake 6180 OK +falcon512 hqc128 6181 OK +falcon512 kyber512 6182 OK +falcon512 mlkem512 6183 OK + +mldsa44 bikel1 6237 OK +mldsa44 frodo640aes 6238 OK +mldsa44 frodo640shake 6239 OK +mldsa44 hqc128 6240 OK +mldsa44 kyber512 6241 OK +mldsa44 mlkem512 6242 OK + +mldsa65 bikel3 6260 OK +mldsa65 frodo976aes 6261 OK +mldsa65 frodo976shake 6262 OK +mldsa65 hqc192 6263 OK +mldsa65 kyber768 6264 OK +mldsa65 mlkem768 6265 OK + +mldsa87 bikel5 6280 OK +mldsa87 frodo1344aes 6281 OK +mldsa87 frodo1344shake 6282 OK +mldsa87 hqc256 6283 OK +mldsa87 kyber1024 6284 OK +mldsa87 mlkem1024 6285 OK + +sphincssha2128fsimple bikel1 6293 OK +sphincssha2128fsimple frodo640aes 6294 OK +sphincssha2128fsimple frodo640shake 6295 OK +sphincssha2128fsimple hqc128 6296 OK +sphincssha2128fsimple kyber512 6297 OK +sphincssha2128fsimple mlkem512 6298 OK + +sphincssha2128ssimple bikel1 6316 OK +sphincssha2128ssimple frodo640aes 6317 OK +sphincssha2128ssimple frodo640shake 6318 OK +sphincssha2128ssimple hqc128 6319 OK +sphincssha2128ssimple kyber512 6320 OK +sphincssha2128ssimple mlkem512 6321 OK + +sphincsshake128fsimple bikel1 6359 OK +sphincsshake128fsimple frodo640aes 6360 OK +sphincsshake128fsimple frodo640shake 6361 OK +sphincsshake128fsimple hqc128 6362 OK +sphincsshake128fsimple kyber512 6363 OK +sphincsshake128fsimple mlkem512 6364 OK \ No newline at end of file diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/README.txt b/TIIGER_TLS/PQ_TIIGER_TLS/README.txt index 6466b67..4e0b2a1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/README.txt +++ b/TIIGER_TLS/PQ_TIIGER_TLS/README.txt @@ -12,14 +12,25 @@ Prikazy na kompilaciu (Windows): cmake -G "MinGW Makefiles" mingw32-make +alebo + +cmake -G "Unix Makefiles" +make + Priklad pouzitia: ./client.exe -r test.openquantumsafe.org:6109 +15.04.2024 +--------------------------- +- testovane s OpenSSL nativnym serverom s podporou pre PQ algoritmy +(OpenSSL 3.3.0, liboqs 0.10.0, oqsprovider 0.6.0) +- doplnene algoritmy ML-KEM a ML-DSA + 11.04.2024 --------------------------- - testovane s OpenSSL nativnym serverom s podporou pre PQ algoritmy (OpenSSL 3.3.0, liboqs 0.10.0, oqsprovider 0.5.3) - +- doplnenie najnovších verzií knižnice MIRACL core pre rôzne OS 29.02.2024 --------------------------- diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/client.exe b/TIIGER_TLS/PQ_TIIGER_TLS/client.exe index b7bb9aff3fddbf5e8e4b1d099bdd9a344af5a71c..3848e22e8098b72b66397292243286d8f3d0dd7d 100644 GIT binary patch delta 588 zcmX|-Pe{{Y7{}RfYw2eHrY_yqa_+Is%^9c%gB@Z-MWj|@kOU6!^h}kbTPUae#S*c z52Ke6U<4T<#wA9WahcJ#jmTJ8GQLH9(ym(jnri9#9}0@StMt!lWq*xQSY;FA zwC^CVgjKR3y8Dp4tT!tCfg~co+QF0eWYIYW)Bnunm(u<}P8{fvtLa~qy zUyYK5g#{Z)`YkLZNm3+fR!%A3Ie&qTQ_tc#Z|CiI-p*NDIJT?_)>k$CYa`sPUG6V{ zVPR;DSca7m$FMQt8FoejBaxBBa4?b?DU4J`8Y7*N!N_D}F|rvsj9f+@BcD;gC}cPp zMGP0CnBhJ|N#lv5(p}dOs1MY}h^3E5N?QMS{-^QBFToJ+a3{3vD?RdgtS#b87`6$| z^?`n~>&@7__t=dOCtX-fg-g*>H=S!{b=yM@tEuPZioRCSoz&{lujpM3MPtpg?+xUV zTKSsjNvc){6%8~~MCz=y5TsO}t%^RkE154kC}^J5OFQZ0H-#Qm?5azy?RCqx*dyCW zuWa>wvL*J*b}yR|8K7x1jL|lz=+zL7{@lxG9;UGEH>dFsqD4vP#}su=(wQ{8=#-+j oGs@s!W@SB^lRK?!Es?-0C=-+mDg>1RpP))mE$|y#OM$oGH#3LAp8x;= diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/cmake_install.cmake b/TIIGER_TLS/PQ_TIIGER_TLS/cmake_install.cmake index dba6ba7..1b02b0d 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/cmake_install.cmake +++ b/TIIGER_TLS/PQ_TIIGER_TLS/cmake_install.cmake @@ -1,4 +1,4 @@ -# Install script for directory: D:/DOKUMENTY/diplomovka-final/Scott-cpp-win +# Install script for directory: D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS # Set the install prefix if(NOT DEFINED CMAKE_INSTALL_PREFIX) @@ -45,5 +45,5 @@ endif() string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT "${CMAKE_INSTALL_MANIFEST_FILES}") -file(WRITE "D:/DOKUMENTY/diplomovka-final/Scott-cpp-win/${CMAKE_INSTALL_MANIFEST}" +file(WRITE "D:/TUKE/DIPLOMOVKA/MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/${CMAKE_INSTALL_MANIFEST}" "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/cookie.txt b/TIIGER_TLS/PQ_TIIGER_TLS/cookie.txt index f6fe981..58315ac 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/cookie.txt +++ b/TIIGER_TLS/PQ_TIIGER_TLS/cookie.txt @@ -1,10 +1,10 @@ test.openquantumsafe.org -0CFA9EC2D2A8EC2FEC3E5191755ED454696382A602CEBDB6B98CAEBAE8F9DA504886BBBBB9011E6727D69456674EEE1D7920B7D0C5AEB0F776FB33CA6FCCCE8496A02AB6C02F895E0ECB3CDA7E7BA1AC2788AE2CF38B5E9AF12220A4825EA8736159DC5B8D4EB618DDE5D5EFF67B04B8D91BE1341CD1674E9638D93012E6D80A61DBE75D904FB595BD5E295AFB121E0A8AC38F98420C618DC1414F4067441AF8EA949F3168BDBCF5150B3D00F43B880149E9CDF096735031E4BC883275D3764F0E762F97FAA9C3043749E4007370A28EE03DFD827248F3FE6B6FEF6A7076CB6A29CABADC760859C9505633A878CA93352EA684D1ACE0BC64D568B25716D694E9 -76BF0BFF6F94BC1F3DBBF63401B588A8AC39DFE5B54BFE441F0D3BD37DFFCE50 -1c159932 +42AC99545858D16825FDEF4DF86DABB8209F40B823D9E4976A5C9EEC0EE5397ED0F2F718324290A36DC93D3E346AE452F29B8EDDE1233FBDAF9FC16FFB98761973681278538BDA423A5A9D7DA8A8106D0C688F302380000320310A8EBCE04F66C94CF8F2C667D5698A019A18AAAA1CDA53C01FB33F902E6B288E25A3F3EEC282F78408A657BC80E96BC377567B25A88C12284F603F83B91A715547C77EEBA633727223ACE563542F64EE3A0917F3C825E3D44A921396D19E0EC35E1A6D08A58BF01C4C144F55890BBCD5B585C1F89CB3E3937FE7B5A8539281F8952525031D6FFE8200B9DC6087C947F21B150D68536D6BCAA5922791AAD7CC4B5C0D2F74E442 +A9C825A39CD59606BDE67D23A7CB48CAA06ECA9D5DB25948628E0D9B2A053C6E +7f663e28 0 -e12b1512 +e1420405 12c 1301 -247 +244 1 diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/libclient.dll.a b/TIIGER_TLS/PQ_TIIGER_TLS/libclient.dll.a index 3c99622724b8db17c232cc1e3cf6e4b2d34c20da..3435ba92530dc131bb9282b9487f84f040f1b1a3 100644 GIT binary patch delta 1318 zcmezHp83Oj<_U7lW`<@P6LLV1STmP~LnT6CEZoCW$~5Y9m}$;~fZnHV=;G0K2g0TPKYNdrr7K4{j8 zq|O1TF2yPh<`jv|+0M+2n_t+(A#{SxO0h>W>xDxG%wCX&L?rWEvk)@59_|Rvc`s)$ zXES3z(02xYZU`%LJ%CnD32;G(oc98Xd<${_i$HXQgre)%5st1yDhgRgMGQp8=7X`J zP#4BZZvM9$=wp*aGc?OOk|A1w5hbx1Z2hxTs9}MnKnJ^ISRi!lF9$krR+bY&1gzs% z4ziAjd~_Y_3ek1&mB4ibBZ6vwxhsMrUj+>}urnHJ(G9&;k7Q_dGtgmXOS&2tn%A(WR-rakX0^OgA`DZ*jWb+Yp~vkjZnQ{-iFN(-sFR@6vD9$l0r5+Zuf_H z)p0w}aqD)OK)eG{Xn`aZvL7M^)B#ku>>!FlV7UG`3^md4D6)z3PC&I4-T-R*a4G`g z`NDTVUfS6pB;K|2P#(B^aJvL85x~K`LLV1STmP~LnT6CEZoCW$~5Y9m}$;~fZnHV=;G0K2g0TPKYNdrr7K4{j8 zq|O1TF2yPh<`jv|+0M+2n_t+(A#{SxO0h>W>xDxG%wCX&L?rWEvk)@59_|Rvc`s)$ zXES3z(02xYZU`%LJ%CnD32;G(oc98Xd<${_i$HXQgre)%5st1yDhgRgMGQp8=7X`J zP#4BZZvM9$=wp*aGc?OOk|A1w5hbx1Z2hxTs9}MnKnJ^ISRi!lF9$krR+bY&1gzs% z4ziAjd~_Y_3ek1&mB4ibBZ6vwxhsMrUj+>}urnHJ(G9&;k7Q_dGtgmXOS&2tn%A(WR-rakX0^OgA`DZ*jWb+Yp~vkjZnQ{-iFN(-sFR@6vD9$l0r5+Zuf_H z)p0w}aqD)OK)eG{Xn`aZvL7M^)B#ku>>!FlV7UG`3^md4D6)z3PC&I4-T-R*a4G`g z`NDTVUfS6pB;K|2P#(B^aJvL85x~K`Yk|5=#Al>5Ir>ZdS%|r0p zb0;$bF%u9oZ_k~~VqFN5GXvYS{SXUloB)V#4$*5Z%38<;<}U}Dl>}m0KvbS;WKEd~ WaRpSwOPVc55lKXR`(+!pgYf`IqD&|N delta 253 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 z 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%0D0gOiz&i+;q&JY&BM%eHm?^xRqZ-$?5ln^s(zaZ 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

h2wzn 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 (VzDBrCsz$d54@J`d+1-$-EB47a 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 jh89k&FP# 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

4&(Mc?p=;G*fY|-$XgS-@pxv1blxJzP|y!7e3Ny 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

C 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

`@>|V?B_h(auqp?v%n$!n`zD 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

NZI>dti1Po3*}r`zVF4`R^O5Tl&* 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 HEpO| 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�+KR!VZmJT(%j&HrD`5288=g;%vq3iw0>#taK(vS21%6YL$=8~3xKhv; z)bd^=4i*zl;_w#SJ6Z=aLHlgb!d*i#4tLpLo-whu5gdi{VCdJ;Lv@Yo(953>xhfJ(bn zEf|^HxaxH9Y=ZkG9z$Wsq~2y&0SB0bhMo&&xmNVeWc8-oY*ChU4^b={cf-W<2<%Mi z*IDF3;}JvhU{OFI3rQyy_sV*R+K#5KE6Q*~#l0)B6lxIhyI9tXt!rL9 z;&;X{SBO&Oskt!%$ww`@gfNPbu_(F=1cuWMGf}n^B}~w59;5(F6+)z5VJ>>$J(ha^ z58gO_eBFJ{c!8cv)oRxt5L);{+34EbF6qxQ@@N9yt^pkV;=5**kp(5N5X@5+T>}83 zyk3SO*>4o1-NzVKVQjo6aM*a=yA36`K_!=D^6+L$BqI*FZ}-3vd*bNTo=l^7s&rfZ zcenrUwQsz#+7l0h_GFT8&&a;wEJajblYxrU)M&IaW)HGTK_@CwV(`nZ##k_~rB!~3}*T;SXgLRTn`jkq1V?MIK2Y=N%wTBJL=mcaNQif{x2 z2i1(j(u(b-Jatb3hoHwDgAq*|M}*D!?DP0ko+T>JB@O&{1B5!Tlb4lU{I{r^FI>SL z7*cpUFAwtvO+h==b)s*#czM%T1clFv61Z;U&Xdc{$6&T_-T%ki`@qLlTzS4~%NPk5 zwM5uNnJ_c0i83RN2R4L9%a~+eQSiorGY449LOQiY)xgl@7vkW zhndZr^?o)x>z&DG!|Z0~c@lOa*?<)YAY%gNPlzB1$QXiv1PdGN_x+u!+kMrR$z*rl z>yPDo@2RR&Ri{p!I(4e*R2ujv1-~LJ914bCi+q!69vl=ugug|LiPOO0JuWP_@cE5D z&lS1e4gZQBX=db$7R~O(Jt%ZBf^S#-4nK=w9NX2KL1}R^?B_bmj|A=L5&JGJEvVO& zYIyp0lXw3pt{5_j&`aM!+ zT+kaY0OIPOnux{(h><$W-r}x~jJt*QU`HAdu+#xbx>aO5- zh?2dETQss)hMBRea+%#U=SPC#M{`_uhJpP6@nq2|Fon$4g~c1|!puZI^D-%zr;&sd zVPQETU#a7MPT7leX=}EQ=#4>fU85NZ-mvJ5!#;XrSiB8C%FM{HM&X6g%Ja5N3I(Og zGGSQR9AwD+SyGmhHHXF3{Cz%^*Y!_pS|{-+8I@0I7N>HVJ+iJ9-ZsP8o_ywEEN~%J zD6C8=p>AqLm3upwe|w&|~%zIVdcv3+68aOj71xSgL)>W!%2ItXb3cD2O|E9nxjY zT$iQdL2c!r6hUqAAnPD1$}$>$8I2VoG-ToYMJO%HXvbw-z(k?2gJEc*fJ-|mIdaa) zC%Y_bDeZ-9QhQ;ted01_C<_)op4@ValTB)`KfEE&(5C-(-_RrB#D62!hH4NIo&ju~ zJa@hh;Kr1M$r%4VH!3M3S#B++mhr81Cy8iciB04%07T0j|NNMpWrJ@Qiu?>S`n^cI#6IRnZL9VJG@!MnI*w8OzzNj3oO9SUkYDU zg5WD31Ya$MuPQ$ONBY7CT9^$|SaQib!E4Z2_+RyTDU zLYWrg+1L6-SXeq3_af}{B`%rc2Abj5f}p6i?|Ce1&-HiZvf{#^#j-bWNFRCmt<4n< z>NZ|3JZA#EMi)SF%Q)}FWhvcEi0|r0!y-4J!y2g^S}c=RAGO&=MU08>U!dy^Q}Sq^ zKz3irlmNfK%;bDTR*|v6fRlL1GyQi%Jz>K>e^{oN`$00JT09f+bpVMu#3!mHguXF`rXGIx3 z6%8r);+OVRYoL-hFg=4cH%0bjMy`TsOKa1ak=#FcYjo`uG$V!EyErYunt2CT%*m$3 zjr^rDtVlg6_rqvp+)nx4c`Pf`tOa`N9{{Vf{St+4m}%F#-|h*k&X?cDrG3kt2wU~N=+KSnEEcj{=RXwYi%H>TB^-(lXh zClMwlAy{_d^U1GgJ;AbHs`6oeGJSsFe_Nj)_>J`WpoBO2g?ooSE@43HSl{;}6#cu2 zOC4=r%;NMO^woK~-HpFS{+jtq@kifXl;*FKNe({Qe^Y#?q9&uB3gu#yO`%15MN38)*ol1(>i)LYw&maoz5mcC@u zt$j{^2#OyL{0*2IopkA?Mk8HyiLB#Ec~DKb$&x4KS)S&JPO`j{XBW>do&isU>#|;+ zy*yX&T*0%CXCKc2o&yzqC8F1*l%>IGe9I6IHlMu)`man?1aa{3Md$%snkH=)iqMm~ zWGCQBZi_p4swOqT$=m7B-^C~x$uFZ}X>sQ)oitdud#KG7?XpguRz^(K zgPD=hgSBr5f2(#Yx5wU7(NSw?&N}{@`D?4-D=n!LvW1TiY1a_E|M<{i+T%3-=G~Bd z5)DjM{G0~yMU4Qk(Ja=-7oyn}2>8}Dtrw^b1L&gibbez~$*5fsU4N{eGy#e&+P zPM6&m(iH$R4FH3bB8tNOl7di{2$FITN)$ob9E5TiL|=&jtb>&7v~sj1by~->jF%`M zmhytad0`^Tt@1gV=up%|U238)&_suP6LqD7)46s+yeWPPPUrp8K@pUviwiEJ zacGp&X`sSoG!Bh&It^5~jK-l+PN#tingP-%r_(@%%Ut7}-U}LLd)uwQakVf5aQ{2O z_amLfUE4yFTnv#$%n)f8Xs}K+9VA$-jKfj!rj2qJL#HS*Y9Na>7el8A0+CoC(7hVa z>0)N;7gM&|+h&vJv-7v6YY^|KC*Gonct<1REsBVD)Dv$hYl^f8yHP9r-4JxZ1CR~g z?odYJZ+N>yBou$c+Z`gI_#58t5DCTK@OFnt2q}vZ;$SxZ76-WgncQ-Z`jqRV$t~LW zOdV8@GpPr~RzJ0Rd;un~Qmax{kLzH9qu81jt5RIKnOyf}B>&L|f#_pV7yqsA0`d?L zeJtwbzuS9(Fuh!?k41g_x1$yK)6HC-V^Bg8}|2h)~`PZAHkk14_Grq*En*Aqqwr=fM-b-52mui@6JnZ`5fw^vKRhs zl%Y-t$Z(s=vfWUz1n{9N^$x#xx8584MNm7$LkifHtviAb-NApx>7a+%9qLn1U_iMu zD1N0;_=WC1@HYy&%V)Avi0_N)xJyBFtA_*~(M~!w1$K6c3odG`?JoRW7d7U=*$gV0 zzq@tJXy?j2CcwC`91x1}2r()Fck= zqySWQsC8Osry{h|L4lpkD(+eA0xg#|1=3Q_+^D2&poG!7F@9B0)(K#wXco%G2xYT! zN%@ju^C}~41L^SlY?9r>Uc&6~d)%q`j&>CeKhPIj=d8M;Z8>`b-1(I&g5sPQhaNtc z8$NTiCo4h0;k9-7!c?C99F%E?t@hBaJAqR`8qHR5fb0T7`MPPEVwN&q*@`S&%Zq4U z%)+m%!~o%iTc?1e1(^h5FKBh_27Fe5Q%sdZwh8PA*nH3w$IL(>nN`xY)6Rjx0-4 ziyA|46&}qUo`inv3CbrXK#^}^ABbTY5tcE-LUIO+CLyB`8Y|G}=1~TpKl@eLECRvu zi3fx^-}GqM!I(ovCq+Ll^ampJHvTyLERr;lOX{TPn=9y>Pl|p*=qDre3~5p6+iY~} zm=_jrh-Hyb!_|q39XF`lsode$AS=K|fR1P^$}MW9UX33_wJGI09py`AQND;Y=H-@e zTcv8Q<&>w`ts~nuOTH}GElSOjZ@%!PYp{Ib$Fy0#ogKH!)A^6S9~3XIb0z3tg_LX^ zVHee5Pj+>lpqa~T-k49Yd38}+zUgu0;!44-ZsL1KgJvTPHX9=hWPc}rDN7?|Ve=guq-j=92C@1(sqw1?dT^x!}}zZboCK4E>3XNzuBjA=z#K zXBz)#WU|_Or1XJVkewjnI4jX1soaUVD@#hy>qada!E`^Tk3O4EsCYw<=#Rn~pj!29cRQ)iUe>{x@Mi$OmuOa>jx(32i5i^Y8M z+pp%i&XW-IBA+)J=%mjZ7NxE?rb4#2>;N5^s%MP8cag8@%v$CO&%27!5tMbl{WUUX zG-CS*#V!0Wp7Bc@odZh7pkIaF?rMGj7+Jz}R(rzF{q-5UT zhJH4qVbZ^b2ZF*guAFICPHp+$EF+7H{pMh|f?&1h?s4PU*mA!Nf6Ncss`)=cecAXySYgFiuD4K*@^= zL|%;21(h&N?9-VN60|&|%yucW5zA~Niq)+_b!Mi3oR}H=2&?l;sgm0q2~0a6Q^^dO zQm82mo2Qq(2>bS``No2eUCrgd$!|S{w0}vx#-%q!?>I0o8C?COuTV-csif9!5JN8E zIUqa}6nh+bdllO4jVmO>JWkL!qNK$&6cAPwy};L2#>Z?7d|C`})6tDo1zBr@1_#KF zT|}Ni(_6}IQn^j}MnxvJ$OQDv1z!vbJ*+KY@xN?O$8*J@@oANM0$f4MWU&8OP(P)@Y2WO^r|)>y zRe;jBOkP@;`;rQr{Q7Jg2uwe;BMW!672eG5QaOVnMQWc4S!~LEH!6r|tNccD`;Qjh z4C@bY$2OwN0XR*Feo0Mo`(I=y2tWo!X85l5|W@Pm3jUSrV6INc_{{+HbV}#T4D~$B_zuj9>9RRkq9|Ps1cx zaY+_7;RJb27Cz}I>~EhA?xnp(r?Tz)zbg+V?MJ%XpTmBN5>-5FAFbG}rg+KPGCPp{ z>XHA4J=Dps|68J}J>?W-mi8R2ZcoE90jgMgat1DH&x8wi4f#_QE zhQ)?lJLhY-*_>HX3zBwWSnO&Hikr~OCl=;fbjCiXllNUz;m*3SeQ%g}Tqn&iXA_E{ z7}*~nJG;=nISWfa*f*W8hxr4uvE+Wn)ehunbV9JLTgZ5bw;It@Qz91>PlRsO)i`@9l%_7+Dx8?A&_%7gnD^|- z?fbue$r`KBbE?BEZBA+7w-7RC7u<19(Fa1vyrmpf`0fBKvF#2jL z@fN)xTX>>m-+ zDm8sDdn$FHuGv%35xY81NJUQS(rMB#b(6HBe)ygk&)1KIg;VJdnGwe~L8%uaJ(b+@ z@2M+9VP}b!p#z9yn>~9W681LrF72;gcx>oFlCW)t-R;|5k`-*7(V2`sw$9ur!Va)? zW*up|P=>G%pk-GUk!V6~U__2+n?c0@6cp=Noz!0=f0&^WFIrJ&o#x=@kLds>aEe;! z)sygE!tofT{$A+qJa`@b*!DpbdpiMi@fYyd%ijwAm^$|k@HeRQ83)%8Ic9t+k0+I4 zY9&-_E9`W@kR)e1pRNEJ4R9-kiJ~++2t|t^DF>mT5u{BJbVP@gQbQWkK5nHZm(AGj z;PrtR+5W#OPeGYSB}}_AL(~Y;=^zv~f^<0uG>#yFgFx{J((545-$AH%?P6NtR$3#9 z)2BF|8i~a;&8v1N?X)gvrnRa!~paX%9uEAIoblk?e9}R?_u0eo3~6z)e0T5@n@t0MnERJI<`Fja*WW~lyKN!CM6#wp1A~OamL61#PhKjb==nMQpyJR2QupP@XVRm;uovXL zO6|zT@-EA~G+}W`U}Sq79D!AHKKnYXDu;ziwUp1P^%&!X2cvga*Q|ItJ)ZgO7wOp4 zIcs^+M=Sc)tsI_O1C@mXAW=b4kEF-=a>pdJm>iQ$4?%v}v{>A!- zZPot>68F^Vt@>ecF(U&TyvjQpSSoZo^+C(>S{4x&&$3zhx4imfG&ixiK zx-llvn{AJN*$L8!mNC_qfae0306C1D2 z^LcHs_4vjcWNHEY+nSPVGyPe1%wQu-_(0$%zatlzUPG~mMBnvl7|&n^oJe3BGi_9roiUrHKq`2F`bey8fl z!RhYEftFF+v4d#*$}V?{!Bpm}uWh54LGeW9*u(*^qHQ6*EOw4Vh05XTM#5Cwp~WmQ z11x04#8DM>Sg!q2E7Q3amd>2ZDzOH&cX zTX0>BRT*}SktNs3m5qhe3*(Nj8Zyt4h6%~oh+Dxqkld>K2;kY|)_=5@A0)RvVlVF` zw@Mv`b(32k=LJSiZrx`u#L>02@ON_SkL=~SWJa`RZVd15$b;N_c zd>J>#bS}+T%G`?0X83{4LGe>FdLNt`7hkWs13~Lh$5=b~NOUTwb{*=N);Jk+qbR6j zf;3hj2suHTD-hH%K~fb6{3l3T1%mn`2%<5<+~pvh6$t8&;&fFYs6T?hhp+0*jxnu+ z?bz}kon%rtyYo<)v7)#L11N-aiFE@;sjVa3rM}wkWNsom`re$KwHw*O@>-&2>(7$g z#2MMqpUue?UJl){?nCo#*d7#b8lclTnbS>B;V_?9sKb7d@~>$f0Kr_o`n&k=CVJxB zRs>RCMF?qWg-`lnr4w3NOfW@9#3RAP7M1rl{_B~{yYaU;JhnMv*+@23#w+Ag;b|RZ zJ|@YFlq%0SkyksZ7A4cnAqjWR7UnO;lsa7RPEVhbtNO z7PL-#vn`PJhLLDWsS(vbko_r_05T?{i(x*%nQ3%wRkN3MdTr<2hgAr7is;9{@|mCH zGlw{%oom@I2W#vw%e*0niso8QR<4%uT;>5zk;`>a@xs=8<^eVwaFjhSZ;8h^7>>Cr z;1F`lQ|us-P6zes@Q~yjnJ5yj5vTI(_{Xe;_Y^b^tTr0$*bO27QTvYQlsT!o0xbG0 zXQ88cf0U382V+)i2if=T@S4`M5<&f#(x&9Ji5O`Ta^kz3%<`uD+pfMT^Cd@ejQ`Y5 zzT+%$o5E>bDC%>Y5=4cFaN*txZaaX*Rw3$ZXAMs?1U1`y*!;!Pz5{h(p|3G03{WlX zM}-w_VPOzYr@DFpjOPC(D@nORXPYVF6*`m4b_cUIG)f?~%Ki zn!>YR{8BO)$7tDxz7vf{CeN4WzK^Kauhu*k_-;<;b{3f5r%QjCqB;+Fe5|K`-;ZNQ zu-?BwKnTZ6EX4e+R78Y_Znjb) zCTf|udQnlkC~Y~hI#`BqT%EkNJK2eo+C^Os(piB74gzcJ)|>iW?V?^%1(i4}TpXYg zo<0Xz;UW4;=&aJRzQSYHz9=Z$7PIUle>G|Xq$Wa&d?gvokq3TkXcL9ES#|IaM*t1z zJVq+OwFZ5G0D6k^k)(i5pMvd?OH&FE^C&Z?x{P?{9d=LSgFwDF#^56bs*HVfgH|xK~Sfdk21C#AN)dfXxL6 zXq^8LlSx1zIeRr;L;>woVj408fKBkv9d&3sx~D)P6%ub&Zlqd~OK_0Q`3%)cZJ!qLDMik<3%NHZzD@Rj zu;7=VvLRqxD0e6e93xHXsfx9{uN(#fP-lKc$IQ2|mCifWlPb=*L^2~H@dl;5lDtO5 z6jn!y5n-cxjY7kS#_Sjz6PCxTj4<9|Q({D847zVW1It4}%a4NjE(G@{xy&yD@3}aa zd5xhZ*Yc!ZfVp=0rXzUfkPSQR{eIp&tdj@Pav6rdZ#qAEj8OP2!M|9`yMXg8(_zc; z5SQ09r+7QeyphBCDjt&XS&B4K6RW953=^Jt_h{V1uL!U)g;5hr2N_iDTn0~%#9@?r zMsdb1j%#^wz_j6Ed?XIj-3RmRL}9BBGpJ1g-cQIHmN4>Xj>&LSbtB1OAG75kej1H4ZeEB*P)NBi?cA4sa-|37&HA$uVm=BBfw> zAp4caYVGQ=e#^QQ`a#Id3y*?~$;$c;7~EpuT}3Xrgg1vn5wZnb)Ff0sjM*-2el{Ji z6@lrMtN+(uw6xwe<@l)lC7`NGl_ zeA5O_Zsi$=_@+6S{^kpdkg6Q6C2+GPUKA*xPCYy&k-$f@K5QJ~Bc%@;d-!P6N2iaL z)<>8BpaCl0;B0&$dY5AK`WTRVi}%286yD;85+f>p-F!6YiPJa#0r9rDAp&eP4TZK4 z?_Za`TBq-Yj}7JC&L(wqyFpK#k6zZOHyx0^h7ptM8wpU=NKjGL=1Wxr5>wT3#d%Pu zjz5vTnLoM(dwodHU+1CkPC~bu%6f|FV>-KnV_@lZPomfT>WZ@Suefga5)Qx^o+9<` znPf1=biB@Ge(>Y(NXcVr#(Z7gs8H<68+6g{3Xj@MuB_tetnud>8J0EI`~vFTx2yqA zs@FNyL$ft&%}B5NMp>_$Fum?=r`KsacBJ1(t$QGBdFzAJIt%PmV^k}37Ge!rt<+hF zHE2btlNLu-V1eLL|@$fk&hCD0&uR z>{D3QMTqjzcsQHFr}FexQlsz*f-oqTu&nS!=aphdm85x3Py}O~ZhUtZ-mupm>{Z*I zG`-MwK6WseV4`=n87NOah>yUh8Bnxd|1qeK75-zBK3p?7 z0if>z3-sy`->$LTd|Kg~eE7X0Bj2vcyf0h6w|V3ya#T@OBBhwFNhDtQuo06GlU%Mz zB+?0~@d!HgQRhFp^wH?E-U(K3@68uKl`Af;ld^)oxf1>Fb?JYBG`>dcK6%`vN!eQ= zJ7m7NJSEMp53MI(WKkI13;~E67W6Jm@wwt%odK#EI^3WXyG{9)Um~!X-R6o|nmW8` zL$Oi+ep4N893+(M&%NQm$!lY>(t@M-*Jj@X~Bm{%4(7GysCI( zqN~=Eu)?xwE^I;7ds{l1X&)pGGq2}?fMSQDvUFB>DM(Do!MoIG=Y|x@4Hy=v*Or^V z5_NAXC@nZMKOf(6#4&9`CWU>+SQ(K6mwWS>pXcY_h)oB54vPRf(H>=0T!)DKR4#+j z^L4ZlG`M`>#=3m*#zx%K+jR=4LTnLU*+?Tb2N_hlw@sOQD?fiZNBCLOU)fAsrLZjL z+2lU|vbOwu7W7;2!iS|{lvJGjdXcVZ|l`3y_{BrIN* z#@!P74sQSQEcfPU!s5y<+|J>?jD)!Y&5R1>#!Fo2(Yz~>0f)hjp>Z#AXkA@uD;W$al zlu+d|lPJFI9+9QLz`Yl&rjdabNo7T={YolGuwlj!X}tiIvI~FDa=u$S<73>7z^3ak z^JqT9d;rJ9KMe~XmA-BTn$P-gagC;N*+yC!7NKtW!t<~N&I!}H@F4S2Sh$>B7MC}h z@56U+9++ZN4`lEQ6>9YsQA3XHk<&tn8G2qhh$(g(+boAy{LjcQ!Bu8de!HqpGXQ zs>ZjRVA9qxKekjAOr&d5paz;)l_+nUF9d-*EYNG=5NMp`6IF={plI84#UcZLR`5Dg z!2LAls0$Jtc~_ZCfaic}-KCJUQuyN6PYKc~08P8(6<|K8AJ9jOwFaC4rlmFvaF@2KbUb4oq5L9?d#zH)n zRV@ohF~mJz{6QbS(|<==oJn2cZ? zo7H2qWaS-~1I21*BFigs6FxFFI_pLXBetp~9E19p@*kUW)T2!h)m#?88uFE;XUt+y z4xU0puXCnL)U#-P1u$tfj-d&O5Mf6o9meHee+M9ExRA?wly|frS6>Wwtgc8ww=$A! zyW%EDhSzgp;sT59Z$g3SntKcZ9^QTdb=SX^S-j7o^MwTo{egqdHU(n=eEkx@Auw{hV?Ojpo|gkw04)JTC6EUT+{Hd>6*K&8^{5Dc+m{LDb<#w@q|#I69ZKsbg4 zVO6-H5CcbjUqjPO6x=Ui?KfkroLLHHK}s(wFwpw+8mKv*OwCuw#0QdIMRL8xkAJqb zrZLwt88n$OOCbgCo26ue4>(Ss%&4}TttM2mvZy!igh+XGHp+|%2>Uqw3l3vo-glhA zIAqDw2@yI#Xm=cd(uU#hVp9u>bJ^_kQ(byC23(^;o%(29zOaCmNfTZCm&a6#nFn!} zJgp97(K$FrpZ)dYIORP!f5+=`@W!md>5sx>Aq?7g2J2K?W5Yl{_(jSUYhp%^Q-o| zBH{eF9(OXtfd07l9v0}Aad_>`YC-*sT&Ux z<00x~J5wz2y9;hNSnhJGiz@0hltooBlT7+{PsvW15ZrhsTCURzjj z`?PePJH=7)!ePfegf+8YEi4?18;O0Glh-rFk(l!X#8G5VHhIKO!@|SberfpV7xr8@ zdDj`%2_pV0pMVOAoE~v~xb_kZK&(KWUI8E;09;yEfuQ0G(pZ6@(+k2pAVR}73r?>% zGi>6LbkP4Gx0tlC>7*je3YVtjlNymWiAZZ7zX{Jp{n#O1u5I7@sQwYpnI}YZs@?j!X;O zuBaKETZ$_knKcB$wYmLep1;lCb&a%}ws-N4OEE@|bXZ!0>7(S=|7<@6zPW8PrZ#+a zX~P#g!Y~BbAQv@6W%madqn3Y`y&pb;vlqvg64-WDUPp*Ud{uY#MZD!37&{>Rgv3Np zQWX?tr;N{JB-Ou~k&@AQC%50#{Bvo6L-aZTCh9#4y~d1Qgki$h!V4sUCEidMg%V+F zO5|WjpzBxFpIB^wIkEn9l17QY=9tG4I)914=RfT__I9USOOQ-gf~9>Fp@D zcOv1H^dw@@Y&oR$kfm*= z1{d}U30>n-uuM1b!UwsOMZ**a^A4LDQ?U0U@ssdrWso8DhK;CQCgfi`HSx zRnl4x$nk<5$ggEShI6aB2%pU@MsiJ+oHX^Y(g_nKH3XE)5a1L7L0B#x8I%!F?5d(h zc|{n74WvS`DOSeUb>3XHeL6VId3fF_5AUGH+C0WPPE8KuBITWY;<3C!4qB`O7VC9x z@&Ymb8?Y`iSY4LJXY^nUU=-gKBzS2h{ z9}+KIa;49deX{m@37Pk#H6KUdFx>qAI<_&8X>gOC61&G>8B4z0V_=60Y+re?rzYs2 zgBPeE1!X|(Y1B(2FU@*k`0PpP1#~@adO`m!*Q%%U;3pXUjCf`HA?FitKjC);VkG$L zYtxQwzYBS8h&Pk7+my#Q+@K(@HPW5O-|f~=XJlOgL&iT#SSTmKyl3bo#N zjH32}K#xlVk_%H}+*j!C@xq2WCc(n;bn;AA^3dZHM|Y7Y_L(=EhqdZaxT(>=ES;6+ zenim`UH!BuTYQm|YFvpwx^044*aq9B>1OvRYjl*b1qEqHOmP#9ehys1aS^WQNIVK8 zozsmUSS~-S|E{qe4>!0i;Ft^il4Ml6$$g1I-Q%g z;pI&k7qJJiF{Q)ZUK@6N(^>AA=Y>QcCweYnzI$WP)Ht6P6+3&W*N&Ku8WD$*PZ8h)b&|o>^aM`RM#@1&C0BNWsY;w z%dBB=o?z*UiiH|kR0HnIkp3~#0u zvq6htJ>_>;qimh7136(Fonc>y%|8M+|M)P1_L`aUxs#Bxe7*ts%m#X5{SklbsX8+dYyf=RPH~tK zhb6!EXCnG)O*dBQxQT;mBlmX7CE>7xr=+x)(`0ki1mpi;CSoF3`QS!BlEu6zM}m;T z8=hfTQFM#r>Ar)=P@eqm#0Beb$`xKQMTPBB$0xsgE3;;5H9~5+RA6DBcDHz^IeN?B52OEQWru1)x zrA5a{Y&od=woHUAxS;E+BUQfe^IR!xJ)S%KV_ghSC(qS0YUy6&(XdDp?pC&vB3vL> z|7yN8K<@7oda!iX<-@v6pr z{jVfQHS8!K1R_`{DTqi~m#_Z?seRQ*Li7;w;a1J!4Zq0|@TZ)af*gW&DhlbWh;OoO zjQZ-jcwM{n2lHsm@97K&KNJr6;|&V*XcLGb&d`{>sLbrG(7o_%uh6E8KnIG`7Pq%? zN$ITL_0dcTLt5KH(!(|@z`X-;H{tN_aTgy6am3bUTAq#6HC#2cfknqx2hl#XR)ePp zzWybXG1P<}^gJgrfNgAylnO-vo7;}A7$f3kgo=$D7(EGeLxT06Srq)^Rf=6SgwP$& zR>#nW0SzTu5pqbS5+i7L8PKUATFMzwWF#M|ijyNqnBM^g5Usjosz2&Rbbdyf532RS zTxkQ3TZ zIWv8aZ33nB$8G3-!dfq$EGS(@5Thf5^o6aKwIw0C;~(YLe#CG&&UKMz-X*NV>Ku~& z+VNVE$|=Cnx|Ifh3E^BRi&S_xR~qEuEO8V>y_#xM2UXIl#=fFaNeYToj}N#5Rzy|A zLf@3_r09>qu|Om#aEp@y4v)GBhv+HAW|3dT#p1hKWVJp9ro8s8O_{QDrR)h$g{9jO z6xLPg!MS?QjWLMHCXjE@C17PC^1k)7K|}>&tmW9^(m89h=EwVmIjT7a)(Y>Vs;_<8 zWQnfGLkI})bEUva`(!@Bt)0*9XS^5qG3oVOWp+eDK(s;7Udz55@pZML~^TKyJTK>=e%Ue**A?LI%hiG9w|LI4#pV~ zn(e-K1;u_YQ2i59KKC87i2BAm+7VW_%HJHg+s)!!`5QgwVRlvd?|eN6lYg2R`Wmuu z=+yR}-oiqU=Jug*wFgyDGoNn6o?8wNe=_DJx4xb=QqzNG$ zHiKG=e=3Y5iPK5eVRJ)DFn=`}K@sjFT%5NlI<7+S8d*zX@}(kIymF4b*&)2;-3%sK zB2Cy~@XSPE_vn#1$#1`z{Pw=lV{_pA z#9RMJ#cTNHqy4GT>A9KXEK8Qo`n&GJzRWwrFDAL`1n;NA6Uotc=O)H7Kj52>Z2JgT zfsani%_hc~OZ1O;{W8SI7@dxTS-5r+Iqb%Jo}yGda7ux8Nj=ZD8G)g;n0&)s63;VD zV8HoFq%vsPAE7|q{;p?dRp6L_n|xrG1=^8gnSFIq40g4^Ev>zl=eSO&kYuxm?r>0> z=;>@XK>?ueY3koj1!EvhW622bPRLc#)ud6Q{4&J=R0=0y(-*m zXl$Bm>?_N|mexigZAq6dN$}Ck$MDg4L+6+ah7N}t-)Y{#r&J9~TDqeyy5ya+u0T~) z2^x`2I{$W_`eogiPKc3+VN~5g+I^p5l4YP$fk9*ue9*)1^>7hJ@Xa2+!^0ghSRC}< z#$Sio#OLGPCpbjg#q-eB+ci9^Q00@AqsK3@f>X$#mI_#Ow(DtJg=rlgHg&)ESBXa{s zcMLh>NdoM;JLGaHyiSPuu~Qd4eVp= z1e$w=8nhZY#Sc651gF70Ul@$AorHxr(j-`~Xp^35OX=EbY36o!aM_Br`PK({qd!=u zMpIRP&`>&M&u_I(^DMkD2_7Cg!X+bTgAQy?5~7djjFpcL5y;3*FmSa1mP0!y)CA;RQC6e$)mT?tX7Scr1=g-|=v3sOWkK!m{U(!69r_fq?&LyAq+u4pLiJtLuGeco;OV(W~+U>B;H@`)l?Ewo?@ z8#p1QArT>U0C9D4A@wXIQ*SXL1!_KXEYeXZy{f=c>&nu~nLjj!VbTBG zY=+^7?s3oAh1cpx0H`HGDm3M@n$|NCVIEAsGcYBQ?I@B6_71F07sz=BE^i8lCEpJZxalBD$Q#gM%NYXjyp)oU!%xUjPv(@}Do$he5)oq|Oo z&zaDaqk#$TijqK8dj}Q(^Ev7@mSgHqDZkcW0ep^ib9Y})*mTwV z#LC@fo-Bn#bm1tvh~KABuvvD*+QxSzRBRuw!dV8YWqxF@X5Nq?#L?#6kVJ!o$hAC^ zD62A&H(6vFm1i^|VMMTs)*=oq1*eLRNQV=ynF3w`nCUd9`Bl0d zhTTZ6oej!A`w#Gi2+v$tQSP%SQ9)c(a?=!nS!*o4fJ_Y-#0}^)E=eI+b;1g>`_Sjv z=Orqsppp?O!4YU8rrrf>Qwb?dTHg@EbFh6%kk8P<$Z(o4pP^o38K%f^_@TMO$0B9$QWmvXeTb+Eqiy#2*YQ+F z3KPpT>PdzM_Z(#~!kR6ODT8{g$iz$8Up)eEpbRcHnFyC`EzXdM-*75W;pgJ&1D07? zfbA5MJ8@{zA+i9tKIKE4Fes;qi9>b9NVKVqD%hM%D5n{#gv9!zYOii)%&RA@vqCj> zC9+Q1az=AmE`GoSQpslOYF-=0(DVt(o3fmc9hb=ZR(T6A$Xv8TxyPhaS;e)04ktS$ z2}LkuT-d=lr8E*#8&?$46O(W_5)yxjwZSIj06)*YE9th0+=9i`XV9Q2a;$D zDScSEbIz5cs+0zdmMyrHmk~i#+a}_INm57pzSJ(mQ;Y8+;iE>98!CU)ol}A%heQqy zNsb{&li72MHXtCJiRC_rk44y zvVN+g53&%(%#B9s$iM49$^XU6ECaPizRjYIU92SaXhYXk+PU?m6sy9!`QyC9iOa-2 z_#uv#h;bAAK%KS;*k&kGpZ5B-q=NRtMq?UyuE#(|qiqB8iI`^M|he{vU82 zfHD9&dlM)QSkyz4l;he7?)3)ckTL0k`D!HU| z$DBHLJdcLlB~S-|r5@Yy?A9UThZ~~(VL|17;^Dn@n3wl1?js>7M}y&4rn#JWcyw^| zU@Zq1v{HEnY?)n-fxaj6Tug-F$R4+WHhPrya@ItIr92+L4Qg^m#y^cDlkMkL$CqC;9gq zkB4#+&=`JZP3u&0YaizpVm*IPTg@lFyy+bM*Ix69bY_!UH2OuW3(*rso%vgQ$t4%0 z+OE2818wmtG~!V?;0{rv1+H z&&2JYt4VBXOnmH&Q|q>qsnXa&GS8hpPRP>)1JC{cg8wdVX#Dz|TtoBMYA2|I@!Xt)Vm9kj^%=5$EEDX3|{TP?wc+U*)lxKm9Ir z4}<-=e_s-VMP<0!!xr$o-@gy(xu~JBG-qi;^F6go8d7)94I0{pPg&fMUfa;d_o67@ znr@>0(x-bBV${^GNT?QpY7wXwJ>^<-s}{A_B^uJ*R{9>p($gR*p|W4-8|QERQ?OqD z{vl7`HejnftVhqDhQ_<+WE+}?YZo{4)ut1tH8f`%8nYsa;)?eA)#|yVq4AzMiyNBn zuDzlmH9U9Da~2o!xpuhU$Nd96t^U;0*PmJppHh2Dq9H|Ij^;I@neT&5H`lk-*F9~7ui3+fWAV=Muy|UjB>F9irM+?%n3N{{hTX&JdxwWD zkHMtu==Yj?SiEm~ShLR~AZ(Y1{k7^t+kbsdIFp0vb9c|nii4Ln+?%LfGiSDLSX0wU z^0^WS{2tKLaKY*EJ`Jwnd9{B#cV-{9vUT~if8@*41&S*@?7v9p^r~zp;=6m^V(VQu zpVE--t->olz1QPdpgM=@2bZcJbXz~ThE8+2$&o8hpR>K(Db#M`KHU?%>!pCMHtXuL)L7pO?p^etUT{|*r^_0v(jsYn%{iI3mSUoJaL*yYtiu>AEq+|PTnBT?~&BJ zdoJ=_@^)~}&eIy&vN5THq}RAH;M4x+GQX0xipM;^E^Zh})P5hq*vVKj+qlsUK6CTV zQ*(8d+3Skc3jPq&9{5zN}$WYuDmRRa~dpf(@$ad-by`oUD9_Wz!9@;a)`M?603 z*Os^O+al$CRau+`r_Xtyp&8Y~)*1ZA@9*^= z<(o~8%()KIqgj`=%bwF$&TI=e?(}(FFA5hwtG|bJs}I~J{eb@RwOW%mxw7_cbBNk! z5-0N9o`-(;=wrIyD?ckodSQ+SELGpX1159_Nk z&-$;t3qJ1Q(Om064^MeP7|pj{^6JG@dK&7W@Y@R8qh@of&p>lP1hY;ka#FY)?K4^RERgWKGQ*D(+8{kVfi<$uM) z$348)1=q}>0agA~s{^=pt*QB458v+L(LCn@5AXeiiyzH(WTiGbd-yhw|5gw0`vV7v z^8I%nexHX&^B&E4gs1TjUHoY7^Ft3$d-x|k{+~zqtKz@s;hQ}?n#+8&*5U7Ja|oij z&>wsFc)NoSd;ED1@B1SMi12*b!&4m&9?gqn%vJdZ&zTATYY!js1t0eK|Ix#H&vk(1 z9{#L{-{;}4dH6dXzT;C45Y3f7#CW89N74>%^Cez09zHnV!ENrt>rxNzGNl221+RVs zQT)%iZ=2ijy3NB=SqHcI3a>kW&(<&gi;v%Tv5OzgQ${?z>k9r1SIxesEr~3Bt0wXFLQw+%Ig~*p1$3|qxMbJx$<}Yse_w7 z$!oWV4{BiIXL=#e>pgt)W$Sd8t4|EPdEG77yBg03%%rUZ{U-}Hf(@;^__m?zH}v%OS5?hQc*FX2 zH~a84z5Vf=Gv^C=IXt|6EhXsfpILwfR)Cq+th8#U)ok6MC`VJpv0J6r_q(v(OJ@+> z!dCgPs&u}}8%`2xHD0x0<4J;zUK>t^+7fSAb&|wZncJ^lzs}mSQb||ZSptlw*R55< z#cOWhYgesuG^whd(R|(dS;H*h>b3m@&S(VJcQ#%(Ya%N(1o@!QlNH7gue$z(3=QY% zn>VVrQvMl*v9Q6}!;Dgcn`RHRgd56XRdlhUd|=>)uXw7(X>B>)yl$=aT~JnYp(C9W zJ2f|7fAfaxhvLbtOgDJ3bV9(YSpqyl6=eol9DIYi5XGpfT$IfTsVsnOP6)7iZ5Uj$ zT7tzPoROU+T)S@l%>>8G?Ra&T087xn?q)B7PE7LwVQa5jJ%o6fk&)}BG1*t?FTMxQ zn#y(GS(91O`-hPIuF5m&>)0a-ikIHy)<3kWoDg!&Nb86k51uvss@1oA0IgTWgJ(;> zp&a4F%qw9hret(GapbY;LUjr>16#&Mq&3%W81hXrGt{Kt`fJy&S|`5fUAmxu-TLd# z@82-Ee(jAt%Gv-6KbKwFz4AK7jGo@5SFDVON27Jd4{pM=cB7C%)LHPI7=LK}MiXFa zgbzw!MWs#RU7j>2(uX+Zo`13kYp=ht+;p>Ihzr1zAt|>X5oV3^9{b$R~s zB=G+h!xJyhfAI69>hgTg!&M$s;&S<)kH!C!82qz-UL`yWV(=?s@HpKz#o+OFY4P*0 z>hfHA6-fCBei45W{Wp1dbvd7o#s73H{%bLKygX+uBND&reCIB&z|*`&`To71|5e9- zJO+=`=b4khzx~Auewh*?{D0P8fye3dw=sB}4*xR-kLUZn>nnKT<$ov!kLUZSpLbT* z>u3xf&-WBRA65K#zI)cqp6_EPfq#8tC4RiV-;TlK`2XP~@cLUTcr@3J==tws@Hn3D z+%|jsAH?AC`W}eE<9L1<9M97yf&U@~ zkC*fO%@mGbb-jYk1~z!SJnLidczMQS@OXKiI|=;l7(8B{=0B^kUo}7cT?`(_|GksI zpNPTZ_@9lz<9L2{68O;=JdWqP-d<8&&gI)G<&WdP_9XC4F?byR<`_JV=U<-${vTuT zIG#Fhzfn2keApO+$ML6P@OZm_B?gbT``_I&dwuUe3H-?zJYLQ}C^|277X^TYo<3H*mKc%05t zAF1Tq7%S(<$7hHC4<+WO^2F)$*=_@$0KcebcKG68cKCvrJdfl5gPpU-PdPAam0GW? z{M6R^MezIFXU!J>jNs8apl6eE{AeBUTUGI+b-wQ}1i{pvb`zEU3eShfU{jv%kt@qW{ z&cqX~_vuW9eoCglXuU681&`MIx~t&Pdf$pFc(mTPrV1Xd_ie6%N9%omUImZV`*v2r zqxHV~tKiXkpN>)M7u73T@9VCDN9%nns^Ej4ap}KN1&`MIo~(jL>w1$_@MvAH^%RG% zT%K!qvU(YoH6DtNT6cYhT;TGyMaNiV-B-)LR$$|`uYuD7`g9s^GN9%W+s^HQ3UCp^0Zo7Ht+Us}@t#{9X=xzP=Ypy+a z==x1VHRrCncIeugbFbU5q2}E6>-3@MnR8i>^Pl}2hBD{Zu)25i&DXCb!P<30*PqM5 zici|ood3RY?Z$Jp^mqOGq1#9)^w$rt3U%$x*Sp&MpZ}i%g@!ucUCIc%{F}LiDML?O z>-`vE5>Z{TIC`D>fde%9_7FLhk7w&>c(3^b5BFl%CF1`F{-*poM9UFMIjs zzD}f{_+z&8ozJ@zUMxk)PoTeT16Ytbf93h{Xa-0H92c!eQonAy8QSa9CVQdA#2cJekaJ5`2KvI0BiI zb;N!ADZW?n|6Y_kc8;I}OtxRhw{BFx6NG)=->TD5$#&c_;Ojapa^nF<%6AHed*Pkr zrKdD>J$2&9ysPr$xGg#Hq7&sic#=jy$|WFYlQq8yaBv<7JKj^!UwEAbu%1W#J{H8MzuYc7hnnPLlACmfvf z#6wqi>!6*nCqzHJkGWTSABnw36Um3RwEiJjE&M<%d?NNf8GE0Ky&Kv221m2ufF|3l zh&b{tI}4^~*yT0j5r4{aJs0g<_$%&_!`tc$auy5-w`6ZzgoD=$@uVLN{~{sRuIBai zLcD)m7;rqC)8L$z?UJ`w+;(xg*uszd@WbZvSyw#Q%jdIDnCIqWgo9M+@juUXR=*~F z;M3!DRw$Hq6ddLB&7?Q?C>%Tvh7S`%rK6vd>k+%^$+CN^bk-7cAr>UnPTVt-6^*VMZ215pgYUyf=gt99x(to7#_RBQYOiXV!fRS(&wQWoz-Sb5)V z@(0EHy$+6ejP6K9D)GM4!4aLen1s4d-#9YRko8VCESKCmYP?S$uw0x!DfuL7v~S$? z7z%eEy?h>w^Sxb6!1Z%O+-+LmE;@YanX4Rvvhpp=O*nYBm2c&V&x8ep)4t=Em0CNv zL@l3rKCGWIXS8{)$bhYz?M|i%!yLEEK}0N=T!6p|>=?o;hmV4IT7478L~ z(_h~_GZ5!9`1q?NqJSXP;qElqDzI0QU^`U^OJ~jDrlT-39+WQRo&~&-ALT|??lITB zq8TnR*d1h!g!ud{;GX=*g<*md@r-6iF2uPmC&lHaNDYGD;9Ta_AoCzsKj;>U%&WRb zguopH>fR7Bc>+JK1iCVg2iJ z3S5ut@)tkDL4E#Sq4A!{?R!sGzH$X9cSdvdC-+d)zZl}Cz5ZRUn0{w&E3RR7${`HH z<}@`op)3Z(RmO-Yfk$6sNO*Tl-@wI)Ui2p50NyVe}r+6lH2bx?8Y|?dY@m`%Ogv~Ih|qY>?S$E$vnt~x?#(Ya2;_bbqVp;o#C>J$z0|UyZd6l-G%ZDPIS2{ z=fYg#5%Hp!IbZmRAULMgMc`bYk{Qp#5-nVwG8!hHF%PIjGk*^6UU*q)?%BDP7xI~j zT;|Dq=7;$fVo&7oJmOh9kK4V`Y1khodtO%+b7@EBanR`4(3rC zBr=C}V+Xy8`#`u8xP?@>zDGc04(l4?(t@Npv$2xAtw9H0?SE3kMU`RZAlI*02HbM+ zF0B_N9G8|kUY@6PDf7$nO2*Zd+*mgHGdTD~+8SZ;Odi1nzfxZD|0|!#)&Ek8tT-P= z7h@mQz0NRs{TpFDx6%B_G4{93(~;*o+ErXB#uhh%yLI ze;C*Bx+7Y>2Wcnuu+wUc%U|N+wf(}7dmrU&|4jr87sN?f$WvfYtAlqb8(qSK9Fz8e zz7IkhJc4|N3qZJBLRy`!U6`e)sj!35Mdb~AdGmz_apEt%wD|;d0f07U^kO4UuTd`#@l!8;))aM?QxbLQ) z55483ey_Bp3GcPgL(LIxSe9Nb4Vr9B#;ovDoOx1CWa)-0s zB}j5Y$9+XW)jqBeQoi1vm*q}r+_k~!k}JV%?>m=bW^v)82oM=r3LqyJF#O z+E4|V8;LAXOcXOwbSm)_BSyC2t*G{4!)qjmYHl14sX6x);Q=Qi4!8Qe9GrYwqi&-Z zIC?C(Ns~$4`OKALrXZXAm(-NZ2rKc&sw{O8g^Y`Fy;qR<_YUI z&(u}{#F3;FiU+!ZE{57DWDHMkQ1ZcT3g-57#MzXvc6T2&Vauju$xyB9zsQn{#<{`# zn@*CG&8V`Wz|4d2Bc=~)MY}c0q&x~I1jie=l(iOrm6Cc0<2Zw_dcgC#GJeR?GJH1B zAw2m>K~~n>%`dwY+=~58H>@b--msZDtJ7uGYo1dk`PbnQHzMI73bfInYtaLy842QoOX8kzE^x}RQJ%=_GngtL8aTt5(^e!yGJJGm(dsg_NTnn$zvC(Pr@W`fY?LOOz4R2+Ld&uoIbc3uyppgfF%qVB~zBvk#v1fw4F zLSF3xGWs*JyWywc=lb}pRD*G!*9dWP&10m~G8 zXBNW^<@}~|_vzR*rEf`#5Ys(kQ6e$5GVhBjEFOz`stO4^ ztHYXlqZt}Ady+nl|8glcqv|Zd4+6DA9?NFFL zkV`+DWwhYRvox2qA=>YDJq-t%%}=SZVS81(`7uofT(37iM$?5)5_Cu@yQtj17O$u- zISnsIg^c9%SR@x^+D4f?^~1#TYJl|f+4P$sdZB8aqyIO&ZHXR?1c5ra$X6VN9j3bs zlWFH+g6o8y4bywGY3?FI3y)zKA)0xM8C0BUi0an^uITSp8ATO|hz(?K_A3>GVs7=t9J69Z&IO&wQn)iZxo)Cw8KZ=+ z!g6#DO7*=}-|7eUyvNZ9mG5?aYiJ&vdB03JnADu(R$jj89H$N+Fl7P&_dghVM3tVX z3}9B>@O(FF4)UZ)H<-p@RWFYD7SpIQfE&G1EF;+DSfXVxFpdw{NimHO0~3khqsIai zpI#M!tMTZOp3*lo0*%V(wl!ypx+-t(u}0 z-#Gj`{1kuac?NjqJ^^*1tHpA_!;aKoR_L(1-<4(~#bj572Y|#JmZ`H=l-=Qmef32C zmda+kJoQ0t2Nz&kbM1nIzH>1OW1Ic>QIajtRa{GT$JTN*n~y{|f`Qi)6naGJuibQ~ z-bvsv)VO&lqG-eDz*vG>YkukRsXWV7o(og_cQs@>w2PNDUHrGSn=f3y9U4}6J1-CO z2Sq_U)m7p&<;^S(20tr0;Hr^}N-i;nJ}G zG^0N3yGUQX7nQKTDEK_Nrq9e$L*m-rLk-TD(=^meTcbGK2t^X+Muwe){Fv&EjlBSk6s%VZoo$}Lmbv8ye?XK z-jE3)uT&Z43Crt)G?`;$U{v?X>chfH{=SgP>H4NsjR)``8I@0I7NoN2U9zU--!Mbj zu3Va#9=3?r!~F7;66&T^w8uAs*_Ytvk)XmwO?n>-^8^;?j(i-@f9R!8=h8m~k0C*w zTGK@KO}X@8w1XUWhQdXyVg3eyx3qFys3PW3oEd*fig}CPPb-A!7hFTU9HyTLP{i|J zZT%87hu^7g=F6GOAX#R4tUqHGDx4S&E~yH8&@+})$>(u;^n$@tFd@Dj&V4eu=@EJf z>@thL&pFP9y~iADulj`;|0#lQsf9NlfYsCso`E>xAOyiPxPDyoBoVF`Pf7?p#8aF- zlB`PtU!;Vv;4=scvEUkRKU2KJ7B5+Mp}NB&B?fa8$weR#UR^>?-U+LT@WUuhD1LkN zVUi4fk|MUW6`8nEeLk2yOIH$v3_jvD)R^5w4)RN?g4s&|lN5E7n^AnqCET97q@GyC zAnwd{NS82SU6P6iH5G$W1U1Ejtb?d1OKA8dG**PrkcG47qq8ib9hbC`k-CwtbESZb z+9jxw$)Cl4NKHt{b!x+6+&2}sU2$I{E`N%!g6o2ZfQF)mUi*qRb4<{P+3Ny!Qq{X{JepZYZO_ye@p_!UDB<1k15Jt zm%@og#bYcNRf;};A&*$h_b2#DmMA18tyX|*P>AykCbJjSVs|$SICC3VhM6SFZk`3# z*^A(-QV@LQgW#)0@Kq@YzVbov)gt(+6a-)SAoyw#d{qi+D+a+=i`wEr?Zu!rg4*Lj zK{2SEpdcR9RSXIU>WT*~D+YBDw5${qm2Mf}ZV1pVQl0FyA z!|JAPLnv3i;>p+gMVMdI7xxZ{@@FiGs@bk+=&f~-Y$xIKNR6Ow$JmrRi7th|B%kS#kauRo-;#K$ObFg^e z!*^G%8awto%rhNO0IqwHRX75K)j!MHwQ3~*X4`$JZzTXY4v}FAz!J~CtZs{)`^@^k z)D?nlB~|o9G^F55U*0vH{t44FSaZ{3XL@KcOgp%GPI@T&J-^M?9a+zw3M<3;JkS{i506$Eeu5b8-zMiuOcU{Sp`Au;OM=#CooJOaUh9 zxW(E05YG@~Hy`ptd|s`-7-h^4@p-9^XuAgPveq$D19vb7VfBH^h-Y`iuwH;%S(2C(CWZ% zO{-PE&#Y@#B1{~BV41nkCclyK1j~H6%xC%W^!eWZus+}WTj}$`AYSL^?(YADgaNH% zecz8z^zS-uVzhlQ3tD%fug=oNZ2Z;ohY@~$ia+}9{8s+jnB?Gt{kO$;B5E?~sZcIJ z*%aCZD33zDKzW0H0n;*NK^bDx5hu?ARI_02ll|u(xBLWL)|#waE&+8_d$R6oje4uQ z(DF5!UDutgyT04$4?*F>fxos=qmyo`)M%9FeoAB=Ps)R8!u69pDbLbYp6Db?+jzF~ zZ08y9M7S>L;@QP>8P8=ryLoo=?B&^8(pMsST|ilCoW{2V@nG}W%b@@AR7nsApO}vx zz@=x>W}yf@sa^Abp5(Tmji+i-5gfmr4*g4vf@&|rCmIeeXq%>!26K1zH@Tu+*v8Y! z7Vu(aqh8i7zCM;OXmrV6o}#%%g&5YT5W^Z(i6G(vh*36!i{EVclB{T z`fZEcEme_+e&?QlVle1S4>^>14wSwlX;;){+rV_rvg;hc}_tE|?skwSt zKzp3T->j>WkE4O9il5gYKEDM~BOe#UnHRZh5@?Oh(E${Wb*YjS_dy4lI?;u;)#CsF(O(n!#le(*~U$&@L1O>7h z*MgYVRw{!kT~?oOEdiKm0O+F>Q4}sB6@;=xkd%W^q6pIDAe74>`bq>~?W1HT6{9Vz zV!6&`yioaQ$u9qyFdv840|dg%IEtBa5U%zyh!RyUY|1v64Le9I#KN?&iX=>I&udc4 z!Bou$c+btrY_#57C5edcL@OFzx2q_B@;$S-d76-WgncQ@n z`jqRV$xYhmOdV8@Q>h2VRzJ0Rd=VzFQmax{k1Jq;cd#`rP^GvsGr8s~Nd9;32cnPp z?fkd49moSf^fAAS|8DF8!t`>1KIV7x-@Oh5W}(oS55D3j|jpJ}Clqw`AoLFrDQ!CR)@2^2!>X2|hc@n#@x$1F}) z9bL5Qlz%dtuOKXYWaTt;Q4G-~n{S6MiZq!nv2f_3@X2(Eg+mvGPo_&O9J(lcGF@Wf z&_&@fx@av;G|AGVD4>jkC4O*c0JP5{kHsC<;Qph`VrGV!OE8W6pg0B&ywV-1!`eg6 zbfGwLJ#?Yhm$HTRblID=Wl^*{koaratm%-ALV}v~Ak!p)dNi7GE2%S9G>= zn=Lc{;i}I3^VvdW=iuduAL^)z%rHUr$RER=EDu;SJiw@VZkTv0sM{^BWS!ixB#Q^* znSr-wB{zK@by3+1{}#$nB?M%+MP=D)s8|B{&?S1eEwi_C`D0~&QhtK3LA>JO7hJ+v z*^&RHE@8}pvmR75e@Ekp(ax25M1WCY*)J5M5n_tf-#F$GkHrv6%g782a}D;}v#!4Y zv?;vTUT*m|m8#}iPI-#mS~5-3E@gEpFm_M}vAJ3^p4h z3}!%e5K^(-7|tafn}@WO6~9+7=VdGt_dQzM=%2G>N*cQcxXqwfNfo#M*u-ik} zP#yQw=Ms-oLdx;eu*EWi8f2#Jd$|N#SRc#P9kOn+v|agZ2Y0>l601L5MD8+zLyH+C zShAYml&#xG0wy2x`C~y8)NI46V?#chq^#gWLMD!X+Dc3Ds6n7a6w@^yK z5<`ky$2P2SpP978C|+%lEXMO)Bsg+_OHaePJ(3#@y4IMHNHxIH2uNwk5#7W!opCmr zjH7lgdFQ@FF7X(WgKQBeYIdKtp0vEu75Bx`EAjD*A`DiPeH2AQgbHOc zePxO|J9Ms?Mr#lcQ?Mag9o0vTX7qrs%uq_f;9nG?Ntl`@Ve)v@TVmLR3KBx6`WfT_6`81%xjaiTo`Up*m0Vm(5}Wm8kwy29w~ib8l+P=iQa=Obu5QU9cLvvB$b<*yJw{?R{~m2 zBq*kx!g&;SnTy&Q6*fZZ@2aK+ukWT6nX?twvrE$!?Gy2uz~X?FjQpc01l4TKsM4N8 z<}}IgvTB6Fli#JKRGZ{LOm>c_4-da{uJM01|BU4>kuf4kgXUnd?qhyI#BB1rl5#dR z+ND4#0(S*E4<7g(`=Ecgp=cWmVbEvry;G3bZ+ z13}9Y^rVN2VlkKe?#nr@?<54h$mfj)dcfxmi&EFCQz6@1wtc>!2wk4dHSD4h zC?1OMrHxyC@eY(4hJH4wVOoC!4+QzATsd1^IknS&tN7HcYgpvC1)UQBuz+fzP%FP; zw6Gi#4P}&VkJ({IC>v7F*cCoYyqT+e&)Vyz#@oFV(SWiOzTbn~XEcElbd|z|ZElw? zU4{A@$r3L>Dyu;AL$0|oL~xt#<&+L=7EBy-`8Tp`ny-6? zjwa660ONFo7L>fGK;*?JomUC9X_=!WBxra*ne9+!LzdZk6szll^2|&DnVK2<2+Q+J zsghe92~0a6Q^^dOQm82mo1>RK5Bqkh`9^||UCL#^$-AFG+P|P)=&Lfiap9;v>5I7>SdB)9w%rVQCh_{6cAPwy};L0#K&w5d|C`} z)6w-*1zBr@1}B@|XMQ~z)V;3U4k)*A->AsM2AP1Kn)jt3-^tnn7XJ%-sb{Ngk#s6f ze7>gD?4I|vBjBB2<+1#hEn60MH8-TGx%X-6ER`6KQ}mYXVLyKb2MA%ADvLC$G{ad90>Nk zA5@R4aN0LJ_sN@{b`_xX4F@jB&wN1zPJUy$4FskiYB8d4OH=-}%np?^C{U#4@sP!) z?DwOBh_=daIJ@s14r^8K=T2=zmjiHm5dD&xWcNMKP7r_$ifvkK2nsi{q(kR;$I`Kp zgmi@4f(@%&q?7=3IDbZRrOn@nvUg+Eandn8Jt>yVWl3C;A@NU&YroO@7gKb{A4g04 zF?#V2RM{evJPDIz#3dQng!AGR8Th0#zpr^BxSjSI9?vxI`@TGqG#~9~eg^v~N>t&r zy|iM7n&Jg(%S>PdP!Eragzt+taX&fhyLXoNSBQGvUHrgFc@b zIC{>_XBsOW6)Qga!K}zWJ=-|~J+c_Mre*BChqf2jPkWwFXToIpSg`Uj-=9WZe|nkz z^w{vx6Clja=3Uo3G_QlVhX#($`tvXCFxKtalQF`U>fAiaL6wIgLq!I{B}Ntw&N-1I z?cv~x-Bnu=tW_MzSM3HKsDi~j1&(o+d||$0)#r02HFKQlzxPPyXQkN~<&`QJ} zIuSd1ZhCD3qtPv=Q{3CXlz!{WZ0f1Z4$d3STxxyM^t!12w*ICuiNmp6MPKCauu!3s zs6oS%9Hj}XvHG=zg_>+LXKJ{~oN=rHNjoM6N;f2*&iS~+tI!``$|99JCUn~`2(}D?Q|?9n3)!*wLY5*p)j8%rG!b4#2hOv7xCv2m0#G2yf*e=M*x@ z=a~r?Sh?gNZk~t6$>z}@F%ifFt_}TeKS)?uT9tqO-_)JLLbCY@t;PK)5*&Fhc^|bt zK9=80M`uwIQ1$+>u#9nwLqhwrG&&*J)-7Z-#5;{>swt5RiYG$1YOkF>6-rY(ZWN}b z%C}SNcIG|1vip8+d4*g&kNj=mQu_8*j?ZhYdIzjkA(79)jgE#9OxW}rprc5l->7bp-b3y;#YH z_0Q26e&?2t&>0d(=nd)&Uyk>KxPbKgdFT&4do$>KuD54QC{o2eRI#IZXU8===jHeC zlH7C#Gztb;!JYd^a?>_GSmgpRk7Xff_zCE&O-pm% zPi}e=LVI=zx@no-(m2!ngcybq!EuYR3L>5Zp-hR1x(rEg?Z_ykZHbB(vdRuucjY)6 z?*|iYQ1q$P^uhG0)PdTkPen&;Z<~^eoYbXTNyF4l(u(@wYhpB4Jrd?mq(7vG9Nz?k zT@dMsk+y7VP$t&}ygsra35H*6dIS7S~AngtUjU!0lAW%GlbU6t0cM$4b zxqw!rmZu~)>M@SWQc%snHVO`{dMT|E&AzBs7&T{bsNfCZsR9oxc{*S>8PA7< zLfS^}y+Jd_uwS#3I-f^DG>TW_H)VLREEo+BD^9DwfBs3Pnp_@uLFIuL+Tn$1 z@Hk#jy*N#PJhIx9mB;ad@YI3_4wwc{mC92%Ritj&P&J7}Fa`~71cyYevOuKA#SX?V zaFX%eo&Zu;A06!IIu;)hZM?Uw`X52!o>;zBKP)U@WMG3=ac2Wdg>I)lh*@5%B9$Ev zV&f{^P~Q5OD8j#CVyD}=-yl9Wz9f3R?a?nfJsQ$7W~&|8$N1*_2oZ~&Tr3B;M2Xke zpB-!-TL1an<_Fg=&24^c{iQiRFAp{!TYr^IEr5SdQ*v#lKh2IAtcMNn3;g7FXrAdc z6nkI@DjhsmC!zNqUH_{?7&Ld94u9zBFu!NVOnS#5hPlUf;NGI*&;u+d$^Bi$p?jGx z+TecZf0XaecltzTF-PeJ&meBa;^^o@IU%$8Us~e9uFB0r`QiNN_j`$+%nlDcUpYK6 zW8m$?!2V-%N0Z^s!813@p?tBwuBn8?7u4o)x^S4ciy08lZyk7brnLfQ%vK|_(baM& zoYsgZ8h;XV;Dw|C2i|*k{XJzz4o-GQ4z!HojvYkfS7xbO45l()du0p73<^`3V*>}g z3buv#!q_`iXg{R8l9a`V60%Y(_y582CG$<0!SVcq2BM|pvflbiS23vqN!E&QF_{1bb5Cb?O9 zW3ZW*XYJ+H%XEk$IWl8XUirYZHnhf9Jb(V_o?|h@Z9?o^BQ%K_6np%#ySXx#}iES7{GR}fBDcq^T?Qfe~2?RFFPeyJ!em5hg_8&`Vps1 zGdtw<^w2%@lgy54z5X+uCu3%!L*JrrWo$ls=)cjqGG>xGv?a_xow3e$@J0>5`celp zm5PHp8S8`xFC#3>zmTzxc(98vq z+QCPnQ$dw$P{*{!$&edGK^+sMwgf@Q2~uBzppFTWDnZ~sL7GYs)E_|*jS=Q{2Wcxo zP=6Gsy#zu15d=PbS#NfXX$@@0mjCD^lfv1Zhsul<#YN~vA*4&J=`~7i9_kqEuIxx= z$1=n3&bX^`JzH2_Npx=hMRJQcBQyMq8QJ`cp*z-nXx3F*gTghvbUG(DJl4h=#)>8gI-z29Xe~^qdxB zjZNmx2JT>@-;sYm*=z+58~fy#L6eefVOFx)dmxg767;l6%s05M%X5k&0>C!_INnf% zz&C=BeG~`25d^-8An=VK@Qp#-S5r1IztxD^-M2nv)d{AsShHk`s$ zwb{aIu=UHqQhy_j?l*$9>XQm+OBin(Y@blJa2@%u2MLEO8$lyrJHV!#d3Wq@tWt;= zLLq_VK@KB73k{eT#zGe3+qA;Np}Urw*mYC@lXQv}bMp}*<>ds2g{uPrQP~tAk56pI zNgvg!o2bT;EsoS!4p%blEohzgW?LZb4I|OGQX{G#l>I5205T$@i(%f+nQ1A;RI`h9 zdTr<2i&Y5si71J{a_OJt(uX*soo(1BhidFFOCOd4MRO%5D_6s4Hhmwb$mOx9AU9q2 zvEhKD>^K_3xgiI`F;@i~LT-419VF7~pk5V@k(?hBbDMx!0O zA>=k{?@^sHCsliZMW5v?v^4L364IGNF>37~d*2>d)p%MWkP0ndTli`sMk@(9@f}5y z!e>rUY**j7`Hmww#%pRPUvZYWNhxXFBJS#OK~#tc7hbL4w*6Ra6{5a&+Q0-uP`%BE z%|9&d+glapyK94dFV(_+lwZ~q=KEkL*Gq~c%lcCpRn*C%{>cUmCJBSgJ^N%L6XyE&cPSz!K< zF8vjX>YUHV3>EVnQkT*d&H) zuG<8!YJ^joa+|4)0eeZ0sdPFH4$Y;q4ZNhhB?&sf4$8 zA_vCWkW;2?Ea2a2^X-!GSP$Q2W!jA&2>C8!6%ubWjChaCCOF9Ee1vMHwp)w% zlp<@}h1{DH-zNJ%Snx|w*$^-)l-raA!|%ABs#wE&%Aq#^HU7C8-pMtvmCpNml`77- zL^2~H@%p5^lDtC16jn!yAz`C>wL-&)#{3u@W0nUd9}8F7PDO%-B% z-}CUUk1+1X{?cfybPVT=(~R#VM0l8%#^}xBMG-I9kRCStPs))FcxmG@g|w9hb1REw zg`lxvo;>jM=&_kf(5nzKo0<=@MGDm9npr-z3L&$2eSnaODHg6O19#itYI=)PS;#8N zMZSX=0V7iN(X<+gP18909nIs$uCm3nweB7u*3eb_j} zM@k9L9Osa1rKvg3_ zNmZLIRSif?Rm&D;L7^)CMD}|A=oaktAw7R>hrWLRx>c0cQ%oPz*%ch#O0Rnyz3$f+ z7oC5_b-NdE0LJhXsdrB$gAu0VRW9>`pLk139#b>s>+(j0VprUti+-1X*k*D?6;Ef4 zKVQqRthweFQSa`y20X4_=Tr~P)~q!nz3z^pUN>fX-5XA?({}7gzmZyZAC4zKNUgKL zZZ$@^QfDF7pyf)Pg;;}@=6%xQ43pK9#4dlp2Lk5QKr@(^pa9i_R;>jw(s>9-|1x zI34)w%pbPb&dskTw>)loq3?X`U@*Z%?`$$!s;BVbT1=xeAJ+d&7V%;I&%_WPflt$` zXkGrJPan(t#|C}4W^w{R-@O*-)giuJW4Q^w!Z-Nv+eJpcU6XkiwtR2#$W7#^qN+qn zFfdjx!;ON3a(&Yq4xGF;CL5eH1GAuc>7-_q1Pu~Zt>qr4 z7!S_*FiBZ2ae<$HbGc9%fApL#^umm zYP5663FUeX3)E}M&R&kXHy#YmIW;#M-*Ut;Z9*o6z3;O&A_p$F=hDB-&Au9&4*DDx z0d%5W%Brvi5&7wC8l&f{Xd@_kx%|~txx&@8xTUx26HtZNBD}noMye0esB~|bGWU9J z_EL`Uv!=hip0-M1SeQfsiy)F@^Of+xO;cAd#FNL3P=?*JD z8Wg^Of#SKKpktsgigd6L?|j@@@llP=*0z+B*$$aJ77osA!KYzPVoz%kH?S>_O|GM1 zdS5vEqj;vLp=lVQ%BByX__BLMmi|2VTpY0sv`8u|TIE+$L4pl4hDhrLsFdw^4VLfS z!BalQT?lNt4$}|k(#!{NM*Q_7r^S~6FdLV;es8Fjnh#GQQkDL}t97m?POyN=8%b^+JS5u+8K18C# zf_@c}Z$Ok>0?v9MOgt^;gt~15wH|YFfh|q>ud*19X>Eihah+CR=7S>1HYgZ%Jgh$8 z#5L1RQ!jzAC$Xa zNbl4%emX%QX(wl;6dN?J*a9VtiPd0`N7WM}Lp`k#siJD%s2FZ`VM>?@m`Rm(HZTPm zRv9v*s;kPX#@$XZY3rCDTgnP1(lsei15K<-l()$jg1~JS=(TVNG|KXcsze1)v~9X# zk%41#HPtqPGplexf+O!rlL_$bSFPI>(khkR7r%O3kTw~2MUTDjV3wSj0E;eMVb2-@ z*cggP?G&H0s+bMG@V2(ml6!P-?EjQf zn7)I)DXNgTLOOJcmt^xDrkTlRs(fWL?Y8GVrb9_7l@!-gEv@GSPiyrK+{_mBz_*fH zzJ3B?37!$69P0-;q=n_ag%k>KDqKk`Q%+H5QFx@qZS(Q_eE41dJJRAz>JopWg-clR zp{j||yV%&Q$>2Y8z5)6V0}f5iT2~_i{Xyd z6)EUeMv`q++yu#RdM->{I8?UwqB|jkgg!lFk=Zc0TOx(+wXAf{_F$s0nBu)tD1HL- z4e|&b5sM1hp*KR-()tXV6g$RIbL1dbD@Iaqc1eR_$)SN|8HS(dy(j>wbBrFThqR%zrS6XMcK9?%z|ZPr`79SVoL zti{VPq?>5aU{I3eO&pC&x7*;el0`@@{C6uxyJB?Z22ZKcHC0ag)FQtW1}+AmoAz=S z1WJSa7R$%}ZfS1R%JvF#hCp4s@+Md!!3lX;kg-S6eT6CiI@`XRQ5@tql5Wnq8zi>$ zf{hS=;b8dtm@>E-jD4}VwLa}*Gz9x5Xro;EiJb1_IfW%EJPUI<0B0rH;6O*ur5}6uW``YQZNfrdQpLa)~DA%&GBSvzDy=Q zkaQ`M>n(o#v!ykSxt2+v$&6_VX;NdFk_q1HIDs;w+HSO(P|4Dw-l!8I#nIU)Ga?}D zpe{DQZ&fB=t!BC_Qw5|Je)AaP>VM7aE+SHB~7lZv@{#VL4^ z&ifd`_#7!~5~L`4iaA8gQ@K|0oLn_mQ|y<2?w^I#`!5_ky_($!=a3l7z%$w*B6s^1 zy&_l5IAu|P&UV&wLbk*Yo^r0Ni3|{&etAmK+buekI-7$qL}zd~$Gm^DqCix3uu-ch zPPHObkLz<>-MEh!4^SuDnPQ3GK4;+mM20^j1Y1=GetBY)8nPW#O^tfhBLYu|Ivc4b zh<1BKeU=FV&{=<6Y6%0P83t&mVvH(el!WZ#bVxepu4+7`|MxR{-^aAK`7^eAfC0uB zBa?sNU6Lfzu@;G zwf;Tr;*{BuX@T1nHK}t?fPs$88Uo?k+x{ZY-{bF!TG~z9yLiW?7^6pPIJgSa$Dm*T zv;7qK=C;k4+VIt`4PWdC!w_JDT+|Sy-5+3#TK;MFe)tH^UL0RaVB1-79U&I+r{EH=PQtv{WlR^qQd=COp%pJKr*djxYjVq;tvh=Z~V z7$=4I&f_4x9p&~;B)pPdhd@&JQ|O!l zcqFHggBEMQ#d?)1DM5_?2CR!r7PKtA5x&uhbNODuBZeKa7b4z4Y7PR5-e8cBqjF>5 zy`xA4+(L4t)%pD+l#ZbnWgKrHAmV*ul1mg4;|=C;(LG3vb~FK-MoG$?%g-7;x``sX z$+*aMl4lw}+>#~R^yst{r_^v11rqpT8PQ^{bo`nMF?3jAQnIO0@1nxk_Iy-V70pQ; zlRB%h2%{mwI$AKuP8E{|aZxZr@MKY-u3at)%GWzti-hT;z5I0c8g=-%R)p0oJp}MF zlLGASM`9(LPia)|M-IqdP8W20IqCSB{C!r)4puGPD(OxYydn~U!C)uH=XNDG{TLu< zI~lRxnc2wASNf>sL*j)iuJnncQ9fDwJ)g`wTQwg?;4s|$|2noYkZEv}o)WvqU>G1O?pB9E!L{D?cf=Venz~a z{gCqsxS#O50x=SN?Ue~fwvR)etK!Y%>^8;m4L2yrYmIcD;qOLks8(8z57wAzux?Ii z%fzFtf-C$90v$5wOE$YvPgXJMjbgoRJgs01Yx(=_O}7*=L>+FP+`N%CG9}_mWf8g8 zMEj4CzuhITJouFjY2ivYxh6`a(>=~0lRWi#^vRnaLR-6;dluHXU0M2iLBb+=>Vc4T zro=u)+Nu8z2Kh>FJVsG_PM}960?CCbG43mL*LZ$i6_a3Lc`|t_D|zT~ile*76MM~@ z%^t0K5YH>6X6gxBgW z;3l#LnGA2H7PCQ%VLjz{Sfg)QlX75^DTNUjOH2AaF3r}ZC_lV!-SS&vdxcU;h>+$yNvox`aQW5Vy!jtI2Vp8b1$+`g@VW91cBUt&chvv9?l*yig_{6-*y=$+8Hm9Mt z=H-yIr&ZOLbelYmP5_xQj!v>K#O5D?n}2*5L3`O``P@cGQ9fUVd}aeZvHqC9wN#xM z2sQvdZlpNOh{Hj@_GcpcQcX8j=(vf4Y9sen$|d2jji;ovnA2o)*#zT%VJ2cCSoz>a zKa$0~C`W>j!t0)5S5b6}EZ=iaHo}yytqNG z`sLhUFXiIO`i6spr(HB~l!~5YyP|UFPK#T0y-=}UPwOaemWqK}`6?Zi5%Qe2#JmQ+ zuy8H=1Adh~!lHr>P(PBbej+=#*wqf72!&idI1Q1IaFj+PD%*kC&Rkero2&k{B&o)o zBhR@!SgvS*ObGm3Rj!&V=<$PVRU-+}Ly-X&s*yzX5(V-~IX10CYvhY!x39B~TrbZL`_A>PoKzNkgmT%r5m*Y5pmQVjea`P*YMTQ1QwlN?L+<0Vhyey z`1*5ZW9SK;D0)t209#)hX%&h9Hn$&LF^0szw3aiZ$cR346(>j#F~1KCAZqoX>Hg>&k$nrz2i5xJ zU@%ARSg$r-q=^RS*nPpl5$uEN2ERJj6qbh9F&As{uK}1|vQBJoEumQQt+23NNouO%V6;~z0jGb=7O0hc!q z7kOaPRl+*2&MDcizh5a*ISn{kxYFn^DXf*J{Ln&t&6qO>3ZY6KJU2Vo=li@e9*JJ#f*>ji{vaGnL=pqnIWa&oYNbA+9_D8Ah6tPQN}@2OrIUfly6HG| z)B@86E$I#3h@`N-nrrw~wwjY;3}dni-ti1*Q63;EQFh&xa0i>yuWBA9OU~X24AEKB z@peh+!ErFoh|p~JzAY&BbAhTKlk&OueT%4XyrUgub*uQzfxDe7&K1AWbM~;S%75po zIhg$OME}wBC<19#;ZeM2Lg-U7T3ep-dunm5ztF{XYtc3>p{zmI$mQp4zRS(q-bwhz$N`V+B zO#Zm3m&b+O$$(BR$PAu$ER*~$vmLkRQRi}dbuRaS$q(sysr>z!;rC{A(6XmTMovv9 z+2D0#iY$>Pgltd=wfLvPNRT+4WDPbqgaq?f6A=ii?SzZ(Hblo&2wo*?Nld(y#EMtW z5jWd}x44_ZBuk_TYp$G+M3;-%kv}ke;16`zLxL@nU~vO^3-=|ohh(E*&A{AFs}5Eo zPd}Jr5mVZq(GDZ-?|J}Qh#cf}7P1BX<#Zm5S*&s0-Pp~$b`{z!=0q8j_!+#j zG3BB@PM54wRHEntan*U5x+$uG<3jWIQ+%!E*b4{eIuHl`^0#78J@5fJveGeg$7_`f zQg-G}$IK%LTf~?_>zH{2X_e<6CMTKXzv?)jrkzWhzE2@4I9>XDqIu6?cxocQbNJ|t zT9(8+>591=^8gnSFIq40g4^O^sca z=crDokYuBWZgWrx4m;aTPypx$T6^}i29BWu>a(xHGO!i^s-_ck`y{AqJ7&TqDDjAn zLQ8jxK@Cf1F5FBGA2@?!s#Ii@V7xUn5AUF3nBz8$Z#`6Z z4EDLl?zUHjy9|v@bB%pvdDzrgE2IsrgXbsssOMwgomu^7nhS;&ha2B%-od9d4NE$B zQJHNGyA_ix1CIJCA8)(h5N!v~LziyV;H*LwPgV{eJJ$+MA%jXJp+$GwD2fLy zhu`Mzl+pn(to0*`PN{{8TT~Kq*0`_`{si6`VeQ0xY;%x?p-h|Y&&}!D()+V@*hnUr zVPp80pZZzaF*I=W#N?)L8#;DT9Xr=u=)v-fZ7M{QL|ccnoPc5pgm<`IHln}L_M;T& zG(I(jAHoVFa|1_r3_0UT0_?gw>yD6j>#Nrz?~Ng^H{|V= z!u(}L>WeU2YXe|_x*2ckR_s1u-k^ruDDtV6G?KjovmsCAkG3HdtB_JI14DSaAe)sk z&)5NBrz;v7*vHrjG`9;iXf<+*AGYZUPJ?^CFc@KX5f6*G?b3p^X|q8p84kvfQN^UaLLG7qXU}<2+>D$#>;xIMytGS zF&%>?wMTQ@o_91>5M*e?0}6C~HIfH@xWIx#kQZ2rRUAl|ke5OfDHbwO3Q?q3h;sGV z6e$)`RSHq0C?tUh(kF%N5(%8>ROFyxPUXP8CX-I=|1`4h_(DmfVG>tAStwcgA)HkU zp)^W?^oxWN^E>6pgiF*#s}jWrsSZlA-6t`|A&E*Z_>hO2 zU;(~G>0mIcEO>?tB|@F2mrp96*xL56`p#?bl0g>zUVkcyi3YNsk2m~bw*&Y z3)N)#L=mhOTChc~I3cAW5h1l7admtl^)w_?Z!sYSYCf|p(orbAs=!j~iqguNLQPv+sGKS;**0cyJcvTXx%Gkdsm+lhSNdwm{ ziy`WAK17isNkXBeMEDTbFNXP;R29Y2oVZMq zjv*QLn-wM;IS3IecN=-K6cW*eqv#@jw?e^Y*%50C-;q$UeY^^18K{!^k-geRBiTV5 zZQc$^)JKS1%QK0xDie8wMW#`CMiUZrGOK7M;?PoXs_3Y6I6?K3fRyyo)(ENeC{>mz z;AMcBPIH=HrQ2rMjpW+dp!_r6gD*sQ=E91y-J(PVaZ$-lQv_zMvGf8mHDC}opwqY{ zg<#b&E6mPAUtph?sHB2QMx+Espoy4z7pzGoq%f`eh8UiM?Nb^*jzlbmt8R8+7?p09 zRJw-=M5TLG3zpgu_9WNVVOW#qRf(S?v@bL>+0h!bvql!mN@M`5LgU$iw^8kWK)qFv zZlOnUVSh-0?PR)HgUYD4NGt}Tx<07s?RtI))k9CP=7}!M++4?6;JDXXIOwQwF!zGl zRd*fMQ)GwWQjus0Lxnn`CsTm!dfH8ZG=Ych;He!_^liPC_E4;=MV6E4jE?*xF4MxF z)hok3(U6RWh^~zFKBA;#isTs8E14@;SS`qlMGGU&e!{$v(rZab{h8F=!TF{Ft_%u) zmQscre1>C0jWRr-WG=&Ty^^7Vm7xXs3@wZdCkXQy>NS>OiVO!Hm^tu%qzqobq86(U z5mjNdjXwV>p2|pJVwqY!$Mcb5n zOga@+TnlJ%vQv^!1VhG!EsRr2Bhkg=pMpyW=}3)ef~@m$O;%%*lPzdjih=bG*{Gb6 zZ`vfVkyqMKn2N#~>{fXs7;@G~)PlXw5+Ols^$s^^5GzX;~1!F z2XS%gQKcg&4J<;jw!nH;o>?k~Z{>J+ubJiZ*Kz8X^$Tolc+D{u&*m4=@s~8o3>$5W zqLX5tp5H2_mie!=da9!jvJl41jYjIozw5ut|HX@}0yRgz&7zH6EF^VmL)T*M-1>5g zRpFidao%C-GI1wYyU%osG%OK+JQ%pIN*e`iyO=B3!Eb#5hvP}@TQytf?#@5sssQu*sGl7Hv^n!-CTN!~?slFfZ?3&`m;8 z4hI7-O>jB!z;NI2!AcG;Xrb~H*fO&e1AS-una=cM+}JzVF)M*lG<__ym}6}DU#H*7 zT+*5T#p3j<7juA{6+9=5co`F3K{Pe87tNLEJ{?@|Q}mgP{vr!M%m)KM&utp-&w*Uo z;g?u$WkrDy1@F)0StNPMg2QS&2)wVILBlTsI5r1gxs2So>h~3MEM(Kv)WXxZVP8$d_X;Ja15LUmD%fFZ%{)JC_A6vv$?+e`$w9kSLo2!0P z0otCn`p2wF4a3LgjPHIOKj5Ri)>fzZ!rWcgp3>KF^20QQKJ7@xZhemF(~ev`pwIpK zw9^$9c~qa>oymV)e=L-ffZFh!RgL4x&E1?^i1qwkO%-Q+Wy6{Juesuk*7OFoX!MI# z7osPOI{CNY{PX`L)wKAE^{e~Wr_$-O=A6~~sq}jLOyB&O&z#jdr`dxo9YUv~mOruj zf<=p^c?=1L#I)aO{+YP(^A(8=wTX|Na$?n1GF2K|N9K8#j}!7Vfxz?r-{rsaYHGhR zBU@Ad^~&>VQiC(kt7*FJgpQilTW6hL(>8G8!kTTfD*yU-PpWCl)U;-5nuv2=O+9JO ztEtM!xv%or$e(`y#XSu6P5-_y28+t@We=Of^Irenujl-l+QAu%YU*#RTv(I3b!Jf0 zG;qR#n%31dO?=Of@~!9~>YF~@%MhcYa#=#P2vmzewdgF?qC>T)ydqK4+F_;dG%TGp zk`gNWJl{Cq@lV0J{QHMIft!G>@UTujJ8Nohosp@jAE;bV(_Pt`IH{&SQ&XD}NfcMK z*RN8~g*COe%~()Ve{1E%HK~D_GoG=ykk7Tly*}1p++p1%InV&H_z6B0Ek@^Un< z5Y42|>i65wO!aCKt@w4hhpWGb^~7LZ9;RuFeoDK-!`2(b!K4i6x5Ygy-fbQh&tsd1 zT@;IVkB3G4sXRtJ>{GFLTG-Yv9&g;k{)Y>)d}sQ$`i7^C@YQ?RKrG&w9u`k4l|;Y! zv9y;=1C!FE-++5qzBhT;(ilw2j()GWhsC?o!|Ht=0bx5l>>pJh+Ws3e!pR&=pSyKd zMjX7T=JrJ8su|OD!-|SFlFyVt;CG*%h6_%Q_i1nq%&Pp(%*lP&%GU1F{;@AlJ18#k zuz!-!=~CII;=6U$0_$DZo>0@;Rfbo5db`IlM|BR>4=zwY=&*ip8J*@LlOva$JY#FI zQ>fiWeY(eZ*H88Pg@>Iv9j*t9xGp+5<2oZ9tV8li~ z+J!Y$3s0t-(T}ZfsvOIFx;#XmUg@<$&2P5i1vOnW9y`gT zwdi=J57QX}CvTAFw@GT=IurRWdD}PRu9Iq-GBK%xq}RC7>(l;2kzYw$#$%pe7t{c?)?qrxWwc8ZOd_+PuHV*7(Gn4DAB`o3zKOV)r?kFe)7cQ(?f0X ztjG78+CqJ%N_FS=5%;iubh?NAX$;otVFeFUJ{=ymNib`3lT`~$R`r(Tg4(>#$KCnw z=?CM9%Kv@F@$0BIAM*IBd_VB~HeY!!E{e0@T1`oIm+ z59lvnuQYj+Eo$F3hp2oiF_q_bJ@Dg)AJP3LAMjIC&8&Fs*mO}~<|*JhATwg{yL^n# zdiZw#ZSx-9FSBnyfch{!dOX|@sl||95BDOv2*1|DJxPl2wf5!*%_6j-;(8C4%!>bR z;-eg<@In4grCu99tgq5M>z{cSe8|J2xz_z2Uh4&6G~ar`!}~nEpKtp?%IWg`9pJ)0 z?&I5Biv)k{;bXt&l1Fo=1s=ZDE9=qx=_(K3{s%6;&7pYRu;^FO|aPX-7FM0Tohj+Q)iWxMZ%3s^)0IpptDn9Pv8$CRl=lqF>x1ZtSM{^xn zsg2GazQyCe-ov~8$N{2!|JuX1d3ZGM(VRzkDn9ArM{}AVdw9yjKjrcNGQwXL|6LF7 z^YCac^U+F&zqQFBh~`3{_3)u)2OseGa~|IH#|{wT`HF|vwm5h+FOo4=fknC;x+Bz-LoCs z=03bG^6*wu8sJy(>em~^KgWIB+=kaJ9$uSqaGS62x()br{oJ-ly$gWG(A*LDx@3LHF| zTXcK)b}tzI!Ub1s@bLBv9ALu3|0;rq4iL>VG-nb0yK)X5%{4|my!%22xA_LI&wKbb z-yweNf-5vv5uQHZA#5H&*hdhNf~PKV5p6!e>ue9NUE<)T-}Bn#;oHC9;J%qFzT)BI z9&S20QEv0_jXf^DuSUhUJ$%%|O?M{Bk0bcCljFba;i=UQZaOZn)hGJ)@&Y3&PosyA zdbk&(73X^RxQ9o&=~54Gz0Tn;xJSi$4i-nUWEiVD;3c;4#awVu&TcLV-y58wWm zitTkUo{vO$@&>LjU5eLNJUsQkIk@RWyjG*{icdEFql24n!)uF&xBruaKkptDogUtL zmjjrtqSq@{UcLOhIq9>PpWS*^PhVff@-Hs>od5pZdD#Wa*Y&RI>{_+*te!Qi*Y)?U zUDJ0~YdlUmtw<|ZUw7@A6@5g!xOF-I&g#2-Z9fsu3eUIy(t7)h{+q4;=IFoARxDq> zuK)6$YnJ!)UbFnF%U7sPPrzo9(rGb+!DmD4Ajt-!UHU%zI3 zf8Y9kOS-&o?aI~tSE&&3JmxB9&${a`_mx^XHSpRs*InsqJSi~UY9;77Ua%3Yf6aL} z^k2EIv#Y19YF5Il)~>nMhp+1DiRYX?TgZ#y;gzc?L08Y@0?e@jOs;0BRokp)Yx+bv znktUnD!sPHg>_vpiRc!#!iSZm^HpAVoKUOrigoLc6KwQacRbXVc-@NQB(}=jc;(tP z)|RD8y3$S)U_8BMwHhv7a|2(#VuhngS@n$OYt~L1W(ilW?jdkeBe=e^{)%Z6S*an& z2ZbK5Fot-=l~Xb_oGY(guii@eCl$uR`lb&vO7(4+KF|`bD~6TP#ftKQf$P5NsTQZT z<#_Fy)z)`GS#ppNC$}C&JwO(v-Vno)pJ2LEAv2e* zF4pe`uMjhxtzc?Ug#T3xj>=txf6K##M|y9B=ljQjKN7=(>RXKeT8a;T<>kqK!okbS zb9oFNFVAWZFE7u3Jr4X^F+B0|e8bO^%FFW|4_A3miHqg`aV-9SiNVkE^D5z)6N8^0 zgV)C3y)k&aUF!Tith_wuEG98O!O!I{qJOW4mzQ&QEdJ+W@t=*sy@=XvG%z8QnJ z#_;^3pXZgw|4|Gcr_Y1Of&bl?K*~>eWJ-wYwYEplseJOcF?gH~{}6-6^Zm}1B|P!+ z|7#2$&-aIZ-dSF+Los+f-(Sbz@qGX1n(6cXx8uNXSzn4D=ZC+G!Q=S<`8e>m{XA9W z&+!-0vv7S0e;m)9Hi$5<0kK_NL zpC1cP9KQQF@aJN1nU*3tycmPW@r)k_exjd$E8jSt-;KdP6~q7gF?byRr(*CpeU`@H z@pk`V3?9d``#A9DV(@r5|7atH<5y0%wv7fhc)UDU#NhGr48`E_@;r1L_|IeTczLS+ zqQZVEPaOaM5rfC^f9E*xoiTVE|DG5;j_2{?zz@aXaXjDt%jwIxU`q)e$A8gr;Jq<; z9DiR79>;Uzao~RygU9h4jltu5IK$g@%G>?a7(CwYm&f4ocKJVVo4&sP*Ky$Y$KdgD zeq_+$nZX0oP_aM0uyuO;M~?%q`>Rs?IR4chUXK6wydA5Y-v<7=geM&<&)DrHczhiH zDX~JX-Jj zW*IzM@4KrE9ErUnvdNVcYhiPt zuiVgIan_2<`!BCJ>xy;jD$ZKFMjwivK8y7@|Jk#yKYexut9#d8d*x~ptX|W9?Wp`R}V&uRlvme^;*Uzk!rOe`PPLP?ukOrK`>V`u{0VXsGkurHHWIzx98+2(lOH zH1XfZ_>hQdj{|uhd(Z)DeS3(U%Ez;HMZF8I_#+SZV%I|}D()%EHwy5>a`ahoCU3&| zA5AY^NjN{lU;G#4Ul#}R9_1fB+db^mvUsDu{HZc{M8D{%IlpkVmc<+Q=~ch@FUmK1 zE+sH}kHG)^-ahIaa%UPj0iN7d)#6Q#JZ7FxS^nE_T@9-&BEKe`-Rn9v~**B#BD=NO?<(vDO zN^9}Qbm^O(bt$}9ijq%hE4K|`PTTU&ww<-+)2UQzs`PX3?*Fsr%&~y8XMgr=2kAcP zmdQqv9K$`6S;Boz^0cq>kHHU}asOE5#k!CL zuX;2Q=UUI^?`9ov?cpMm59_3}w)2IBMdX4zCr$=$oOPsb1gHxb?lh+mibTN05K^)4 zFqZ^L+z{^<2A&6aatznGnGj$?S?I($PjXh^o%SJMq?ZGvFce-+m5d^V1|%`Md0Sx1H`5%0BzP zw{fFAISTHd+x&C8e-80fd0>V+%p-!1@$axgcHrd;@>N+3E+;nNCg;O}!>X_qXQF-b z_8$-mqK^NUxc85atGe<%U6ug}crGbn5@o_lsuHC~YNgXvF+DB2d5y}*_PzEkTLf&> z9e$|WgeZXrN@53*5O79zmhTjmc-EtPdDifU-x}sE&znq#o?&{NZn|5t0Sog>w)r8O z0Ky4aMu3G0mTUu_&v&15t4g*>I`dx7u#oHCea_kE+XL=sgjb7yT!?j=4vBo~U^quX%1& zbNEmBGyeIpjV*R`QLq`8Z0S=q&-FFstVcbL6e4@_i=GU#3LLn26Cf(dJ*G$5w833qaP5N7az0@?*#IuOD_DU zo%HFryZz7#H{k!@Fmo-M!nmMT*y$6XaK#$%180$Wa)wxrbw4yTIAT!cmGT|VeYF*I zg$y70r<3{{p)k9lhe+71MR@1~MkU13F@Qfsrv%9kuRk7g$k#rlfg*%awfwlgV$ z`$y>cFCfbOEgQ&qM!RNx*T8R~OW$vyOaE`DOY<4^|88_SgsP!&wgJuwN`E4$w?*Gn z`aV+BJC-YbADQf3(aX6C&)Z#|jGiBK&#ijayh>Tb)mJ<8KBRY~#|Xd2yWr3CrYjLU z5lJ~}jO5OTB>7sJhJXl{hnS`) zc~V%B3xvVKC4(<%DORRaDVcMXfewm50^cX7_Q+=kz)pv#AkHF9SLR#8=>riTWi(f{ zJ6D#!2<7C?u;l#rMdeGI@P$H9)kx9(a50=Gl*dpp`&6W0sZS90AR=OW_K7Hu<92)k zLLXv4M|pgmpI%gqacTO5=(!DeF@A+`DvNML5oV7n!YrW_h_aC-sO&pY3isu5O~J6i zNx$ou73Ism80B9N^UoIZk3?Alb-XT5z1GbsT&=q}y*L*zK2G6?{;eQ?Ajt2xP!}(P zSz&L1q~2LxzU;qALVUUyxIrxUsEZU6UM{I81qG?Rg-QzH`pp_XM8l&LAGw$K4^f`j zEH8jJBG`L=w<6|3KJgG$(AwV%<6lI10)y-^)cBRpz7eR*+c?{(gw(`W_=sGA4ZprH zjB&H{Dt-Pofy24u&(jecI-uo@;ICgEp0jUSh6daUykdNC*z)ZCAk0n#c)uoKdBcff z!<#|FDVk<+S`Wj7iiAsY5tri)uN!4FTRYeaIiFhJc)<80*sm z#`+A6aeW>`My&6rj1;4(nbEYuCUNI;P3}#mgerc(k0u;6swk*6bBLofYpB~at7vp- z#&A9;||apT+8(3HRc!;Q_~^P$r5|MHorhiKt;p1^P5mHd~xF=mt?5 z2w6fvOgCZL42(-{6%k#1x`kQpRbrn?&Q7H8x|SX#4#4VXB<|MuWxn1(>s---yuX7x zlv8(KeKMn0YgROP+RWJMrG-M?qv?JtXo}@aE+8WVDkxu0n3mJU)GvzpUl6*vn0xcEe!A?F*ToS0_EFFH_LvUuz_Y0aFJh+=zXh-xU&oS*<`TGkkEN|3{RUx0*%70F3fS!t4>kMG$W#0xI7%$HFXwz@)4Omm67c zr~?^a46KIzQV2BA7(@*p1`SV`{}l;C))ovKD8Xoi;}EqrxZYQ>y(e)of?QWHoQ6Yk zzTR*GSG8_bUCF4D5-QeLhq_VaSYLeWMwK4|j5ZqrSTMzR4oAeBwk z$`8xaqD8N2$Pze&u-j8=O0jLi#p6W6pJY}bmJ#v{w``V?NE86`L@Hr4ONfC_xZW-z z*$3ZFg>5fIL~tUt-@YsUsk!~chd)g6wz-nhOydx<-ZtQt1G_5d-sqY~tzxdc_ft!#B1qtunXPxXQ{j$WH^(BEy z)B?H$TF5t{mxsXu{F8|}NOGb=$$J#lXaOr8r7U1Mq_&{V`tq8b)Y0CbrkX(9Dx0nj z%L5K+z(Qh;3l=L-^;4>_RcNSCf>k*PrQn)lv!x_E0Tc+CRjmidM8iyx5vp!dclHEN zbfd9u62PjtnoRtVW5Gp^3W`)Rc=B|5<6mnkKy(wB?i%PU^+<8x+aqf(B-EJv+0~QUS76WM3lYB^KS=BO5m2zWgJ*#ojHf}Ky-UXwaF@Yrb zJVD1C7WI47h8YAInN>Wqu=`IF z!>|4+f&rBe2a#Ss#CM;TN-Y^NJk}DvBL9Lu+W514=^txK7$yD4`YHL5#ZR610Wr~#oH zCAb82{J&R2Nkhz!mvORcl&Q~)=wCL#U_s0V_dE8|C__1@jxsa|3YdU(qfE=5Oj6a6 zs13#5h8p2-i)}Bvp{B`Xo9c2yj#lwa8g+!TQvYnRv_lNK7gm%nf&K?XGA$!cGwM!g z`9&+RTWHmU+2fs{jRgo=$o>$0D|@1-F)O|3Lk%3J@3tdqmRea+F3J}-6;ni}B2uO1 z43wp#k)qtOo%q+X!wBbe1KafiNZ#C z{0OQc3|?IPo2U($dl>nmzX+2*n2t`iDFxKHA9WFfD%Jyu$r-*+3z7k! zV_XfTAErE9rcsq_wRa{b5AXGGV{Yg)?%_QK$KWYlZ`1>26_rXi#=GE~?bo~SrSMkE zhatdzS&Y~(!r6ZB_a;_nO@&})R9x4mX1Srx_^}$W3aNT(8nI?LzveRG$f7IwkcZbB zW{kJ~U5ui1S$c)ndVu%s_I{tU;{xBIe6Vyka7@+i!PM8mi4*`_mbw&YT(&MBo>^q3 z?tW4bM0l1&h>VJJ?fWVgK?|{IpAIg3JuRdi9!LUq`@~%|~ zyc=0~eG)Y0S~M6urk)-Vu??j<+3FxX?@(~jvW~!`&W;-LEoZea1J17#LTYjs54U%# znqJFw7P`iKfELSN>j3@-f?plQlfmGd zNu-C*atxbPS2UkgjC`K(9kJ<|NpS1p^xp*|vXH6bqTd#AB) zuB_K&R9=>j*23GL4B7~Ox))0r-1cEGIP;nGj~2sUe6V`%Q#Ti3I&t39aNOfJFA>|} zhVld~GzJ8}thevIxsZO5m!qTny~5xAbdw?v<}EFKl<;gv_w)W|gz|3U_jWPlUVtz0 z_gqrg7reId-LCZQq03TWP?CNWMsXN2>87h1LGg8Qt5E!czh}=xkr9fkToy|26N)#4 zg1<+>ppL#O$3Hjb3`+CW^cTQ+ir<&{)AyZBH{GLL-%zgC_|w38gg^TI=&p2A2)x3- zv{8(^PP+S(LFrSNXtaSvM=-CB z1~F!ZLVZ-aym;tOofRc})h0 z+*J(fWvzT@nBT>MyO`gDIW3BBY^52k7^l^YDSaztr$D6C(p8w;|BM_r=8E})#r(@j zLE?_xk)thuA<;2xaOA~se<#3uIxx~HV?0A8VScKZ#~y{4SU`?ER<1)q{*7S4w>r@1 zS?PTBdUf7)1p@edi}bO=4bZ%BV@-c+e6wMt;A$)DqqQs^*VN;onSpzPIk_RfLBO%j_RL1lAHVV&*RqTB;H8R ziMqGb)wdo8fJie*hcH6E+%AEs?$Hc?`(sMlE2(y4KOiP#$>ya(p}FeDPDwzf!K3`$ zuKpZ#xe%u5+iz2^OGc`fkG`p_5{CR)*5}eq*P6gwN^Q5l;PQ2e1(ygXPYx;NN0m51 zeo4ifJIQVmH9`GLHKkkl4}qUQ!~ZP#J4v~_+w%KnoKm)vWaH1WA$*S>CTllYukGcZ z8+w6A+8%WHm!ywAp+W}@Zf_h6JK7Aa? z^$~oEnYzlSkI&*$pXB&dNmV}eNsdpIROM5jalIn4MQPd$tObDY~JX&pELuj&g?{KS&YAIGp>kAv|q6Y9Ah2jd|-(iSn&fCgaK zm2K!LBoM4{w1xb=Af1rLqf|23n$Z?zRh-y z;-&^wWxoM6vs;?}F0bQv8vPkxLxt6Bd*L@;hoy$1^35Ij$HOG{K;3GnAHR2X{&;?0 z{>60DGE~52C~?bj`O{%c`0!uW2Nq5DgDmxLmy_OJ2l8b`6hKX$;-T?^kRT+@|a`Nrz2k?6J5k%RsVnMt55X3+dw zkQd_SPeaEV;sOy>Kf4iJ%8LQq+|_$p;+6jC3N1gZp(Re>k2??hf{O8aTKlPV=Q9Kc)KwMW?_*VKS zReBa~VD0F?*Xa2X>#2eN*XyZ)-)TJ+l$X{A3wN*kyu^;1l~=;zUfW{kaRMaWbYpH8 zQRx)OlD|g&n)%D{*UDdxKXy$}HO^eG{m%F=AUrN>09COJyCeC*%^cwoh^rRb* zORQ%S+Ek{B;PXp6G-^dDquB0c0~&9#1uoBMh4f2q+Y4R3i3 z3wYs}B?5wlJJ)^DHFK3{Z0(eGWbG7||m;hoK6F@9u z0*GZy0I`e-22do`|NrXz9B90>)BL6SVt!Y`JZ`}BCIbfMVZbEoiPBQIU@3H7O7AbF z=a5TtM}X*s(5UI#m!p$Ei@Luow`)sKx-h6?DAflgDyfqhC(v^v z&y74c^4!dGGtbRDXL!!=3`;L><++vTR-SV_=XlNqrLS}Zb!$2}{oJw3jgPR(_2Odo zofO4sQBa3Dg3~5(z6u~XG=Oi>iX=<3gV2@)l5r4Plt2jQt5UQpf#e*7))_=^sRC{K z7VVo`$+noKH2a8Z%3{@AWPdjPauhGGfj0vL(&%$4OWooO5Q48IWm{dIOcjy?f(mE2 zQ;R!-^5S}mptcdw2TuL7po~$42MxUxe{|!d@5X|9PTe?}bYmgu#>u1`7pog(DVlWM zSk(uDi=gHo%hD5Ev=}lwZM--Qg%5KS_?(8@F9k{mDOc&0NY z%W3;XBHS!_jx~bQB5RLVj_7azKcNMrbDwPikWPeIwu(6nB2p)Cbln-F^J1u)05br| zrjT~NM_L^OswNP$;u%GwQ;$JaveV-4*mz;Av@>RGysYE|17pU<3uC37F=OL}vC__%vGKyR)V>@N z2g!H|%E@?7Z@gbZ!p)!QjX&Xqj`!pKcm9rV!Z4>WRW1|vEbZi0I;lsZH?*#kiX?hN>pH1PqBpdzld2?o zL+d)JOQJWlu9M0ndPD0vsZFByR|c35pm%qL-oK;#XnW^e^5a5)|4QR65h18qxYu>CA6R&wW&S&ZT#_bQ*t>IWmfwUx@v_2%XBU|7&8-mG5ye=S-vW zG3O%srVVnvGk9c!)2ej3_UHbzXq}@QN2{S*7_$dG8cu)X9CT9-(JhQSp_?+zrdv%q zbW{3ly49pZH>J;}TTME2Q~GSW)ucl=rO&2YO*(W_dJWxth*TOMbnpQ(Cp&#z^32^i z<4lM};M0Y(Fn*u&L#vDNYgY&VP$AUdBO9ARShc2Hz;#?HJIcFb@~Xi|e}L*9K=UxTC0iBOZIR zUPi&%>>Cb$MlEAPF`6JY%8h%(<28sWOj~!(6DjUkp@I`0ZALFspv`!+69UW#?Nowx zCWtv0sODbMQiGJD!{sIODlM(|C|iXA`G&sYNL(*KvrsZZU;wCMUn2y9BKs;NpfE_! zs~~OlNOQuG18L49wOTq<9JY5zJCvu>Bkim~O5x$b54gH;8;7h5gYVa;H~j})ViQPk#xsQiwd2ems2}2HL42M`-EvEr960Yhat{+j!_| z*#?Bqyao=KzKw@2@dPR}kR3pH=%VwbI0G30!b6vO81)&*7!V$aqX>jAV^b1Hhi)}& z(RHA$0?p|3W%gi^1N7va3gS-|n@$C#CfF1exBaSmW)Li896D=1KbU@_NZ9bE17T_? zY|^1>N=9|Y+1IsfH_ld8GBM3iGDY5E{7BHQz1yXYQTzF_T24)RQ9FZ=iq46i<}|CJP^(F` zjJR6bugZWrbJpjbfxfwlzWJQ!g?dzY6QOY}c$3y^4o2@jKPuhK2&qy~%@-BhZ&tfA z;q;r36<{MkM>Mvmmp1cVY;Auu)y7rtL_#%HmP@{;)I*eCrS@p7Ay)^UN z>YY-(GfBO<>i43hIuiylPVz16RL%87iq#2yRooF z)BYm*1@wqYYiPxqOffzXPP28O(v*aRQM`|`5Yk$K?1(-c*^oTQ9CmFWQrL|*Aulna z+OO)cRxtja2orwK6jRSq1+92VwYXMPsySqJO!^8QR0TWuOsk+9q>Ll3)CsXMz*5KU zR)M|)zHH)CISA3N@o<%TfDZ%+UXOH0NHsVQE)p_6jmGz=5Y2RGL9g=FvZFzEENVyY zsqEP7vdel^NM+m6gE>#(zdK5eMopYe8P=?6Q-_YMf@EAsCS-Jl8O0LWUA`x8?Efmq zCw0H3sQQJ})qW=?Q|IM@<}-9tyKl)#hVeF(riKIeV!BJBDYjdfwRi6RC^o z2ll6mseOoOszp54R10Gy)nf6eDckJ$kReiAUWGrpDZ(Ipa5rkF6ZrZ7-ZIs3Zp}18 z)39M0Hl%S7kE+Lv9%8O#2sIi8Z=s;h!c-$Ms(5YCRsi>(;x=SMq1m%#6%~W`8@aOzleP6Dng&6;U9(t( zoMc&GD)1C&sz@2O=RkT^ix}`!;|2-~v)TcG4Earj>2)oDOVn4DvS*DK8r$cxvZ8T~ zO{h&=Za1XjJNn^0w||f*bL`4LH*5X!rjB;iN2R;#0}gO)4@wIa_n!aLKjY@x%oVc7 zX4$u%VNFOY;0O)e;geTb9lB$p>Y4ZB8NMu>K1wEyoOnX{SkP+#WyjDNBXUf?EhTLS zmp!A>P3VB=Z$m=NZ9GcxKRVSY4Qga;Y7}V&qsl}}S4k1pwV4M^u+bVc9+m#0xl$z) zh_98E8WpR)t;%b~yU;S(Ki{fOpl-OEkCG&1_u74tJ|{x2Yhu>mSo%yc#XZeui%n00 zgSqoHZj6ShN5ZD(q;_)u2_1BlZLP+r?WBoxB?a*twBcC}8HUWL8bh}sfgn*=%b1p- zu5xBPt%}qFUmX=8W%u*N98rkLdWcVBs-#kmCVX&(h8-=6Cnd+2G$j~rLm0U!$eQz@ zYff|093{EtXok`^Z&MB{W(}GUJ+}EKP0<=OHz_7Hox#+_)ppeF-`*n{)zl**-V6jI)u$&CL&LBMa_UA-w3iVF)rzR zYNYiOqGM$MFwVIkWBm*h?nVCX15by{O(tOMs_b@}>YA=a*n=p5G&5{tRF5*Y-NF!u z3B}Z7#U?I*K@9&j6?#4vVr~O9X-PL!+W8pQM@bH|2c(AXkQzD^woOKCQcDRkOOwoQ z?I@t7JA-hVLn$1?n9()g?aWuQe&}i{bUILMI-%tmDchu`YGES%Z7+qJef?V;!K=p{xX9@q_$vFN+A^ZHjD~G*aNxC`y1Og9rj`k(X|qU7?ig{`T=OGsVuW%@ zyx25p6QY`I=yM1Dyvt^CFrd?D<-fIO({ght}6@_byQ&RkxY%r z!|$*1rE5QwmG4yWjnfTJ{M+*Cu6XR~;hE0{!$&h+saJ+ipBJBM+ugQnhdhuduS+y&^2l1-SNwVE=fHT{Sxr#`E@-mtlc9 zwGegu1srlcDtq1z{lh7)AiZ)lfBXn9b1M3|r4@d@2w2-pq3uAhwToMZrLLV*!Ty<` zVKj^vtKP3t?>(ENwTJ&+PX4OCv7&f9m>w&Z=k4_S_F-w>Xjob|I-^#PgDc2R1pB$d zKc&X$p2or#?mFl`fYxUxR>boTsln-=EcOSeY7Ovi|A%wvrB%83oqtv{wddK!Mf=6A z)dOdeR{O`X(eFRS#rTG?aQ~|?yuEW|Njut$JHq|r#fAe|lZI!0pS|8(#AbPslS}av zR;p;F;uG4m1UcKv*co>DqyrRI(sC4<<&Ebqg*{?%{kcmuMx_gD3aNDsV`SB~NfcjL z`@ymghcwdh%gHLgj9&c@`uYmfya3Y_#5D!jrje8ae6u9p-!>C$rT>Pf3T^xUJ`KF> zWLMjZ?3bWtmoC{$uXY(jS>F~03O_vA&UK#jPyRhw)xY!kJxBizpV_~LWgJvB{kyl? zzbTjQI`~!Wq6_c-qOs;lvF0}=VtW1lMhz*Bi25z!Nr!tzTg}C z{P-GmsmdJaL>h2_hK3)k7$G&^bX{kH$fvzE>Yq zj#x$|tnG3!^MZLO+8xB$ZRUq+oxlUc^#C>*+-qd_;*tX&8j)?A-`yCsJrkvNYfhA?&ay_9hYN3W4HRN0kxh6#?9*)Dq*$Y15+0toVwcGuu9(!v z$NovfFDj+m@MKYSeo_~6Re!9=oh6k-DJMEg2dDW=&@mI>!7l_Lpd{_Ik5C-ms-Fj4kPYhV<=93tAe5gT`QL=AjR ze@<5^=V&(Jwp>?sy6$4#UGlIbxGERILN&N-Ls{+Pj)zUPw+uGBQ6OM~nB+HqAYZTFrD}aI8wN> zk%#U~x(V|jY|EBYu3)qk<;O#)8+{(4>)_|Y57Qf`p}J?Q&VJZ-pzV3F6SK~%D!^RE zjAc9$aWE2&>I*B|sKx9^kz3_16ZAP0Go38cNa-zR_f)5@gTDN=@IiOaxl3sTcb~fy zW41ducd157b)HqqT~+JupbV=g2}sO@BMc0UiTHx#d|!TuC**uk#%1Ti=hGYiXJ`TO zIAQl0etIG1%_3$W#JnxTLw_#a^j!{TeYoxs%5a|Wh4jY1ab*TN(@j^9WuTkmrz+Ib zt3#bU^!9UDGFPJ`m9Tr$Dm?1Q0*>TK+7pzpQP8gvbvhX&fuxf_5*zH{9{HmWPoH+@ zT1o#z5OaEy0nRTfbT`>q4VAhnqK?OLX}ktO*G^Vh>) zFMoaf_479n#9KD-QAa}ZR`<&)ogV09hCf4xAryaToF%IO8VztqeHGH|Aha_nlyMMR zoIqL~gtjM;oFJT|)3i{BPAk0@r74K-;KNqUI?iSCv6jC7pS8~#leDt%;4EkTb?&CNsn@+k!`9%Mmm`x)=E1&6l8^@Ic%5_p7uMNZ6aL2 zRx0fg4p2o6%-BNJ=!_1@YH)e3$R_c-^pPD-Ikx-9(;=Bg%CN;@)y4t`dGOz zq9L+kHk^cZ<*utvGZg*#5>}I?RRclkyU=n5wYp!$+WQAoOxi^I0BbZ()TlVM;Wtap z67jCmFddZo`|)=pcT~<73obF1W6gX#YUkY3f}qc=ec5+VYl8Bfj7LsLNt;3VF9>?0 z_D(u{+Q?P@mQs6kq>;Lc4Xmz&q=%W)<3Q7)P>;vcUB%N49+;~ZPcRD)#R71_l7`D; z=nQd)N@Kw5+S3Uh7`YZt$C-FKzytf&;$cB*cqr*mfrhJP0U8l(;=W6VH~A)gn)|L+ zG9U_S@o?mGc6;Eb&dlug*jdpEeZbL7dk{Odcp7Kn0Y{_9;oGnPnd@4GQ2m(eHr)C= z12(v70Iq^tjH~Ex{9nC|ko}i@5=@*=N zNsM)+CX7`zm&9OHT@o`kW#_uS;{3|4bzGZ?QhO+IBTkHU3PUH788g&PUcQ^t3w!li zxfGVd@iX_uvbbsA z`mYx^J-+_dVAJXK-wHMzU;kbCoB_gYbB*2Dy2P%&t?$DC(c{br&R^p#LyO!z8}A() zf{I73ki(R{C)d9{iIr}rt$`*FVpiL69`nv5Q}n(a^YnyCea{Y7hI1w#Mg++>$DGOk zBZ!ZgIy1R_f_I!gFlEcX0ax40Ul3$9&azL5-e(dzj9;@Nixue>FGw);#r+b%N2_ zsBBe~a6cWt?p-Gg9!eW<@Pqf)|DR`EZ@Wmua@LyUf}4F$b(K}w*|-`9;M-|1b#vnI z#>Se@+vwagm2|}4n92C$#vHF-?@YIGVv8rcCv!)ynydETgSK}gcMdsR6P2#zZxuOl zu^g3_b>mT;d^fc)3GGg|-P(eDGU1+X;}n?OgKwZ6@_S;x?yS#UVpD(adJG|sXICpl zD$~W~c%8GkD$KqRrN+W6J|npZr`a9%Gwg5cIm|wX=`PGZ8&uPRfNct^owSi4iyJKW zPPrcKideb*+Lg)f3u8{y!}|^`B6rB1IWq=ZCv&AdYReVibOI4ty!RNYpbq~zd|Z0d z|D{jlI^3px_HaDC=@ol8o!;~+55-MG=}o`1hsV>KUb6=>AGU`V)0?F32b*}9w1>CS zo8GddU!^x4vj-s3y^D;byNjE^s<&Y9@)qhoX^&78B4hSj|3`9yvK3(EUZkrs_~9es zh^~03#^6`jA(IQ^Vu=mB&N+;+f(^Vk73bsg^9Amet;D*^#92YI@ z_%{@v)J{xchr$(1{@?8X6?Q1_<0$;GfeMI*OXvQ3q^y{AI=&P>P7B=R_~R>Zv^rJS$BKA`Wp8a6#ya>0Oz495TvLeja3M9 zjv&od2s4!+nJOgbAh3H7v2Hs%nZ$XwfpBHbUvw+|RmHw|@_d+WN=;do*A{khxg)^m99 z&D4@jze;ZwvlWJaH8;e2s&f!Cd2w}pe9Hg=#L2`iGQ`uodZ8G^x3&y`W*(rmo&0l4 zw}d1Q-{}oXS0X)_vfRwXju)>?OcFH+pIckHC1853Z6-kz=QD`}o;gHsCO%a zVSOV5K|GL*f<%;V1SWy0^R94A{JcNt3g1*L0!Y;{%Vc*ZZ1ub*!#3AtLD|VUntnsB zD?UDpyGAIIAHvd%_}|#Ffwy#~)A97?-)B}WmM(88 zvN2sB#Wx`mA?gO&S7d()<}{yRj?8-L#GH$!!Ba*VZM^Xk2uzbC;=P2@OSizZ3JM6k z4YYdc5txPv6X5M0+$(TS;AVkEB)#cKCV5!?iL}koyE9<~JPo*!Ufx@md{Q+jpm0-t14z)>{5iroT1e`u4z!3rIInIQuWqmbe*ten>#?gi;W$Ll+@VKm4FB40+ z_x%d4(ZO3=E;I7?L7vM7XP8=d%JDJ>GT?F;GXzhgo?45s^b%t{Kt)6s7E$#MFcM+Q zBIn*a#EBa4Re|#{1dgOeB5*ivW`nC@FVSYeuQ`nJ!PN%GZA0vGpcV%4(Y9UU>^bql zuU?-H@a}V@=akgVS@J4=2G>oM18b68h^-&KIpHjR7b2Fv(kPdGfdl+`CMZAb95&;x zuLB^S_1?EuSDaEfmwRwYX>m@GJY+r8f0A9@Jj>w-tK>;>ywLf_Dc~o2^#Kqf(Cq&>Y30(T~mJ_qToLi!z~&qMTvc{`hHQk|k(?oBw^i z$p4V*4q{tGr9X*Ex6qu+S_JMfa@2;qU_dLub=AX8s#@%eb&}N&IltMki5QN67ZAuC zhd*S!DgGI83D8MCk|{CZ>kxxmhzvIdaFXv6)LIgtn%o~#LR~FXQ%V3Bm?vNXOW)xc zAApuYVJh%Ot1gyL$<2o5JCIT0nS^aV!KRnecc3Qj&6OZ#KzV>z54CKwIwT}Y(kQ+U zJtHJ7DK>MIR`Be@dC)S)J{w!ctuEk($#K3~3QGJ^8cM&ak#KPHO@yD1_Af&A`<=^D zj_ztgK|Ux1g3%N9(3FH-`#wiU`X6DjRS4T9S2%ptZYwP3mewzHG;=YHIR~6UYL_N1 zW~rzJ3;3@U$A@n=TDD6}%ONUk2pNrHWa|l2cy+kX&BNeF29CLj%S}a^!kDD~Ws{kN ztxapALb=UovC%uN<@4|gP7Qqlvt0fIM!mv9G>eKd6EN>l#t2U)<~w^Ivd=fK+#9{i zYfYe*X0&ckymD`Jjzq0`=Fa=Pw{$Q=oN+@VSxr$S(;U^RS$&)-mi-^*+l?*t0;YyE z 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Π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�nE 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

21cl0myU`8T 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%0DI?m$H%kp91`q0O$QYZuB$$ zwmQ;NCY+Cz^!6Md;7!8SKV1R-ec`<2Vy;|u?W$Ma(X{8-_<)$QdQ zgsYy#0lreW>bXw1`t8rc)o-r_cp2`uapP|7?-b$uj?CMCvhV|ie?hqR>x%*2DV(>I zy#6l*_&VVl-;Kgm&ou#lqj2>b?>lm%A5{NP+|T2d<_8A&p~4TqalT*Uglk+T2Drb^ zm2P*A$g7=~3DM7a8a_dC5FwP$jG&l0Zo%nR@{ z9Orbykb3{Oi2SF8uN2NQT3)_O^w1@q^Is#m(GRNUGU2M{o1%wry`HN@UiJJ%fld@UgVZIM_1|EI`ne{T`4e!EAw%0DPv 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


8*^t1A@!d1_{!ZmIW7q0C! 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

A8UAclctlmBqZ`E43V%f6(<*2fJ#ZdoLyt?{S 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

-<(iTPq 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

r7%j2>A&x*X-U$z&NqR=gvntZ%@Mps@XG|( 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�?iDrh3n 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

sg?8s{A|)d>&J>;3U=3K9Sb( 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 diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/.gitignore b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/.gitignore deleted file mode 100644 index 2b5d52e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/aes.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/aes.cpp deleted file mode 100644 index 9986370..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/aes.cpp +++ /dev/null @@ -1,803 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -/* - * Implementation of the NIST Advanced Ecryption Standard - * - * SU=m, SU is Stack Usage - */ - -#include - - -#include "arch.h" -#include "core.h" - -using namespace core; - -/* this is fixed */ -#define NB 4 - -/* Rotates 32-bit word left by 1, 2 or 3 byte */ - -#define ROTL8(x) (((x)<<8)|((x)>>24)) -#define ROTL16(x) (((x)<<16)|((x)>>16)) -#define ROTL24(x) (((x)<<24)|((x)>>8)) - -static const uchar InCo[4] = {0xB, 0xD, 0x9, 0xE}; /* Inverse Coefficients */ - -static const uchar ptab[] = -{ - 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, - 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, - 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, - 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205, - 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136, - 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154, - 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, - 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, - 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, - 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, - 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, - 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, - 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, - 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, - 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, - 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1 -}; - -static const uchar ltab[] = -{ - 0, 255, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, - 100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193, - 125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120, - 101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142, - 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56, - 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16, - 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186, - 43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87, - 175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232, - 44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160, - 127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183, - 204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157, - 151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, - 83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, - 68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, - 103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7 -}; - -static const uchar fbsub[] = -{ - 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, - 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, - 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, - 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, - 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, - 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, - 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, - 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, - 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, - 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, - 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, - 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, - 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, - 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, - 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, - 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22 -}; - -static const uchar rbsub[] = -{ - 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, - 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, - 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, - 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, - 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, - 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, - 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, - 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, - 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, - 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, - 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, - 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, - 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, - 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, - 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, - 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125 -}; - -static const unsign32 rco[] = -{1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47}; - -static const unsign32 ftable[] = -{ - 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0xdf2f2ff, 0xbd6b6bd6, - 0xb16f6fde, 0x54c5c591, 0x50303060, 0x3010102, 0xa96767ce, 0x7d2b2b56, - 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, - 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0xbf0f0fb, - 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, - 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, - 0x5a36366c, 0x413f3f7e, 0x2f7f7f5, 0x4fcccc83, 0x5c343468, 0xf4a5a551, - 0x34e5e5d1, 0x8f1f1f9, 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, - 0xc040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, - 0xf05050a, 0xb59a9a2f, 0x907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, - 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, 0x9e83831d, - 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, - 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, - 0x712f2f5e, 0x97848413, 0xf55353a6, 0x68d1d1b9, 0x0, 0x2cededc1, - 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, - 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, - 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, 0xc5434386, 0xd74d4d9a, - 0x55333366, 0x94858511, 0xcf45458a, 0x10f9f9e9, 0x6020204, 0x817f7ffe, - 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, - 0xc0404080, 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x4f5f5f1, - 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, 0x1affffe5, - 0xef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, - 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, 0x57c4c493, 0xf2a7a755, - 0x827e7efc, 0x473d3d7a, 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, - 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, - 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, - 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, 0x3be0e0db, 0x56323264, - 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, 0xa06060c, 0x6c242448, 0xe45c5cb8, - 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, - 0x37e4e4d3, 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, - 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, 0xfa5656ac, - 0x7f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, - 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, 0x241c1c38, 0xf1a6a657, - 0xc7b4b473, 0x51c6c697, 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, - 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, - 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x5030306, 0x1f6f6f7, 0x120e0e1c, - 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, 0x91868617, 0x58c1c199, - 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, - 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, - 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, - 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7, - 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, - 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c -}; - -static const unsign32 rtable[] = -{ - 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, 0xf1459d1f, - 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5, - 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5, 0x495ab1de, 0x671bba25, - 0x980eea45, 0xe1c0fe5d, 0x2752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, - 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, - 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927, - 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, 0x184adf63, 0x82311ae5, - 0x60335197, 0x457f5362, 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, - 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, - 0x578f1fe3, 0x2aab5566, 0x728ebb2, 0x3c2b52f, 0x9a7bc586, 0xa50837d3, - 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, 0x92b479a7, - 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4, - 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4, 0x39ec830b, 0xaaef6040, - 0x69f715e, 0x51106ebd, 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, - 0xb58d5491, 0x55dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, - 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879, - 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x0, 0x83868009, 0x48ed2b32, - 0xac70111e, 0x4e725a6c, 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36, - 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0xfe75793, - 0xd296eeb4, 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, - 0xaba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0xb0d090e, 0xadc78bf2, - 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3, - 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b, 0x7629438b, 0xdcc623cb, - 0x68fcedb6, 0x63f1e4b8, 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, - 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, - 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947, - 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, 0xc74e4987, 0xc1d138d9, - 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, - 0xe49d3a2c, 0xd927850, 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, - 0x5ef7392e, 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, - 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x97826cd, 0xf418596e, - 0x1b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, 0x8cfbc21, 0xe6e815ef, - 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029, 0xafb2a431, 0x31233f2a, - 0x3094a5c6, 0xc066a235, 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, - 0x4a9804f1, 0xf7daec41, 0xe50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, - 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546, - 0x4ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, 0x5a1d67b3, 0x52d2db92, - 0x335610e9, 0x1347d66d, 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb, - 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, - 0x79ce1418, 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, - 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, 0xc25e2bc, - 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664, - 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0 -}; - -#define MR_TOBYTE(x) ((uchar)((x))) - -static unsign32 pack(const uchar *b) -{ - /* pack bytes into a 32-bit Word */ - return ((unsign32)b[3] << 24) | ((unsign32)b[2] << 16) | ((unsign32)b[1] << 8) | (unsign32)b[0]; -} - -static void unpack(unsign32 a, uchar *b) -{ - /* unpack bytes from a word */ - b[0] = MR_TOBYTE(a); - b[1] = MR_TOBYTE(a >> 8); - b[2] = MR_TOBYTE(a >> 16); - b[3] = MR_TOBYTE(a >> 24); -} - -/* SU= 8 */ -static uchar bmul(uchar x, uchar y) -{ - /* x.y= AntiLog(Log(x) + Log(y)) */ - if (x && y) return ptab[(ltab[x] + ltab[y]) % 255]; - else return 0; -} - -static unsign32 SubByte(unsign32 a) -{ - uchar b[4]; - unpack(a, b); - b[0] = fbsub[b[0]]; - b[1] = fbsub[b[1]]; - b[2] = fbsub[b[2]]; - b[3] = fbsub[b[3]]; - return pack(b); -} - -/* SU= 16 */ -static uchar product(unsign32 x, unsign32 y) -{ - /* dot product of two 4-byte arrays */ - uchar xb[4], yb[4]; - unpack(x, xb); - unpack(y, yb); - return bmul(xb[0], yb[0])^bmul(xb[1], yb[1])^bmul(xb[2], yb[2])^bmul(xb[3], yb[3]); -} - -static unsign32 InvMixCol(unsign32 x) -{ - /* matrix Multiplication */ - unsign32 y, m; - uchar b[4]; - - m = pack(InCo); - b[3] = product(m, x); - m = ROTL24(m); - b[2] = product(m, x); - m = ROTL24(m); - b[1] = product(m, x); - m = ROTL24(m); - b[0] = product(m, x); - y = pack(b); - return y; -} - -/* SU= 8 */ -/* reset cipher */ -void core::AES_reset(core::aes *a, int mode, char *iv) -{ - /* reset mode, or reset iv */ - int i; - a->mode = mode; - for (i = 0; i < 4 * NB; i++) - a->f[i] = 0; - if (mode != ECB && iv != NULL) - { - for (i = 0; i < 4 * NB; i++) - a->f[i] = iv[i]; - } -} - -void core::AES_getreg(core::aes *a, char *ir) -{ - int i; - for (i = 0; i < 4 * NB; i++) ir[i] = a->f[i]; -} - -/* SU= 72 */ -/* Initialise cipher */ -int core::AES_init(core::aes* a, int mode, int nk, char *key, char *iv) -{ - /* Key length Nk=16, 24 or 32 bytes */ - /* Key Scheduler. Create expanded encryption key */ - int i, j, k, N, nr; - unsign32 CipherKey[8]; - - nk /= 4; - - if (nk != 4 && nk != 6 && nk != 8) return 0; - - nr = 6 + nk; - - a->Nk = nk; - a->Nr = nr; - - AES_reset(a, mode, iv); - - N = NB * (nr + 1); - - for (i = j = 0; i < nk; i++, j += 4) - { - CipherKey[i] = pack((uchar *)&key[j]); - } - for (i = 0; i < nk; i++) a->fkey[i] = CipherKey[i]; - for (j = nk, k = 0; j < N; j += nk, k++) - { - a->fkey[j] = a->fkey[j - nk] ^ SubByte(ROTL24(a->fkey[j - 1]))^rco[k]; - if (nk <= 6) - { - for (i = 1; i < nk && (i + j) < N; i++) - a->fkey[i + j] = a->fkey[i + j - nk] ^ a->fkey[i + j - 1]; - } - else - { - for (i = 1; i < 4 && (i + j) < N; i++) - a->fkey[i + j] = a->fkey[i + j - nk] ^ a->fkey[i + j - 1]; - if ((j + 4) < N) a->fkey[j + 4] = a->fkey[j + 4 - nk] ^ SubByte(a->fkey[j + 3]); - for (i = 5; i < nk && (i + j) < N; i++) - a->fkey[i + j] = a->fkey[i + j - nk] ^ a->fkey[i + j - 1]; - } - - } - /* now for the expanded decrypt key in reverse order */ - - for (j = 0; j < NB; j++) a->rkey[j + N - NB] = a->fkey[j]; - for (i = NB; i < N - NB; i += NB) - { - k = N - NB - i; - for (j = 0; j < NB; j++) a->rkey[k + j] = InvMixCol(a->fkey[i + j]); - } - for (j = N - NB; j < N; j++) a->rkey[j - N + NB] = a->fkey[j]; - return 1; -} - -/* SU= 80 */ -/* Encrypt a single block */ -void core::AES_ecb_encrypt(core::aes *a, uchar *buff) -{ - int i, j, k; - unsign32 p[4], q[4], *x, *y, *t; - - for (i = j = 0; i < NB; i++, j += 4) - { - p[i] = pack((uchar *)&buff[j]); - p[i] ^= a->fkey[i]; - } - - k = NB; - x = p; - y = q; - - /* State alternates between x and y */ - for (i = 1; i < a->Nr; i++) - { - - y[0] = a->fkey[k] ^ ftable[MR_TOBYTE(x[0])] ^ - ROTL8(ftable[MR_TOBYTE(x[1] >> 8)])^ - ROTL16(ftable[MR_TOBYTE(x[2] >> 16)])^ - ROTL24(ftable[x[3] >> 24]); - y[1] = a->fkey[k + 1] ^ ftable[MR_TOBYTE(x[1])] ^ - ROTL8(ftable[MR_TOBYTE(x[2] >> 8)])^ - ROTL16(ftable[MR_TOBYTE(x[3] >> 16)])^ - ROTL24(ftable[x[0] >> 24]); - y[2] = a->fkey[k + 2] ^ ftable[MR_TOBYTE(x[2])] ^ - ROTL8(ftable[MR_TOBYTE(x[3] >> 8)])^ - ROTL16(ftable[MR_TOBYTE(x[0] >> 16)])^ - ROTL24(ftable[x[1] >> 24]); - y[3] = a->fkey[k + 3] ^ ftable[MR_TOBYTE(x[3])] ^ - ROTL8(ftable[MR_TOBYTE(x[0] >> 8)])^ - ROTL16(ftable[MR_TOBYTE(x[1] >> 16)])^ - ROTL24(ftable[x[2] >> 24]); - - k += 4; - t = x; - x = y; - y = t; /* swap pointers */ - } - - /* Last Round */ - - y[0] = a->fkey[k] ^ (unsign32)fbsub[MR_TOBYTE(x[0])] ^ - ROTL8((unsign32)fbsub[MR_TOBYTE(x[1] >> 8)])^ - ROTL16((unsign32)fbsub[MR_TOBYTE(x[2] >> 16)])^ - ROTL24((unsign32)fbsub[x[3] >> 24]); - y[1] = a->fkey[k + 1] ^ (unsign32)fbsub[MR_TOBYTE(x[1])] ^ - ROTL8((unsign32)fbsub[MR_TOBYTE(x[2] >> 8)])^ - ROTL16((unsign32)fbsub[MR_TOBYTE(x[3] >> 16)])^ - ROTL24((unsign32)fbsub[x[0] >> 24]); - y[2] = a->fkey[k + 2] ^ (unsign32)fbsub[MR_TOBYTE(x[2])] ^ - ROTL8((unsign32)fbsub[MR_TOBYTE(x[3] >> 8)])^ - ROTL16((unsign32)fbsub[MR_TOBYTE(x[0] >> 16)])^ - ROTL24((unsign32)fbsub[x[1] >> 24]); - y[3] = a->fkey[k + 3] ^ (unsign32)fbsub[MR_TOBYTE(x[3])] ^ - ROTL8((unsign32)fbsub[MR_TOBYTE(x[0] >> 8)])^ - ROTL16((unsign32)fbsub[MR_TOBYTE(x[1] >> 16)])^ - ROTL24((unsign32)fbsub[x[2] >> 24]); - - for (i = j = 0; i < NB; i++, j += 4) - { - unpack(y[i], (uchar *)&buff[j]); - x[i] = y[i] = 0; /* clean up stack */ - } -} - -/* SU= 80 */ -/* Decrypt a single block */ -void core::AES_ecb_decrypt(core::aes *a, uchar *buff) -{ - int i, j, k; - unsign32 p[4], q[4], *x, *y, *t; - - for (i = j = 0; i < NB; i++, j += 4) - { - p[i] = pack((uchar *)&buff[j]); - p[i] ^= a->rkey[i]; - } - - k = NB; - x = p; - y = q; - - /* State alternates between x and y */ - for (i = 1; i < a->Nr; i++) - { - /* Nr is number of rounds. May be odd. */ - - y[0] = a->rkey[k] ^ rtable[MR_TOBYTE(x[0])] ^ - ROTL8(rtable[MR_TOBYTE(x[3] >> 8)])^ - ROTL16(rtable[MR_TOBYTE(x[2] >> 16)])^ - ROTL24(rtable[x[1] >> 24]); - y[1] = a->rkey[k + 1] ^ rtable[MR_TOBYTE(x[1])] ^ - ROTL8(rtable[MR_TOBYTE(x[0] >> 8)])^ - ROTL16(rtable[MR_TOBYTE(x[3] >> 16)])^ - ROTL24(rtable[x[2] >> 24]); - y[2] = a->rkey[k + 2] ^ rtable[MR_TOBYTE(x[2])] ^ - ROTL8(rtable[MR_TOBYTE(x[1] >> 8)])^ - ROTL16(rtable[MR_TOBYTE(x[0] >> 16)])^ - ROTL24(rtable[x[3] >> 24]); - y[3] = a->rkey[k + 3] ^ rtable[MR_TOBYTE(x[3])] ^ - ROTL8(rtable[MR_TOBYTE(x[2] >> 8)])^ - ROTL16(rtable[MR_TOBYTE(x[1] >> 16)])^ - ROTL24(rtable[x[0] >> 24]); - - k += 4; - t = x; - x = y; - y = t; /* swap pointers */ - } - - - /* Last Round */ - y[0] = a->rkey[k] ^ (unsign32)rbsub[MR_TOBYTE(x[0])] ^ - ROTL8((unsign32)rbsub[MR_TOBYTE(x[3] >> 8)])^ - ROTL16((unsign32)rbsub[MR_TOBYTE(x[2] >> 16)])^ - ROTL24((unsign32)rbsub[x[1] >> 24]); - y[1] = a->rkey[k + 1] ^ (unsign32)rbsub[MR_TOBYTE(x[1])] ^ - ROTL8((unsign32)rbsub[MR_TOBYTE(x[0] >> 8)])^ - ROTL16((unsign32)rbsub[MR_TOBYTE(x[3] >> 16)])^ - ROTL24((unsign32)rbsub[x[2] >> 24]); - y[2] = a->rkey[k + 2] ^ (unsign32)rbsub[MR_TOBYTE(x[2])] ^ - ROTL8((unsign32)rbsub[MR_TOBYTE(x[1] >> 8)])^ - ROTL16((unsign32)rbsub[MR_TOBYTE(x[0] >> 16)])^ - ROTL24((unsign32)rbsub[x[3] >> 24]); - y[3] = a->rkey[k + 3] ^ (unsign32)rbsub[MR_TOBYTE(x[3])] ^ - ROTL8((unsign32)rbsub[MR_TOBYTE(x[2] >> 8)])^ - ROTL16((unsign32)rbsub[MR_TOBYTE(x[1] >> 16)])^ - ROTL24((unsign32)rbsub[x[0] >> 24]); - - for (i = j = 0; i < NB; i++, j += 4) - { - unpack(y[i], (uchar *)&buff[j]); - x[i] = y[i] = 0; /* clean up stack */ - } - -} - -/* simple default increment function */ -static void increment(char *f) -{ - int i; - for (i = 0; i < 16; i++) - { - f[i]++; - if (f[i] != 0) break; - } -} - -/* SU= 40 */ -/* Encrypt using selected mode of operation */ -unsign32 core::AES_encrypt(core::aes* a, char *buff) -{ - int j, bytes; - char st[16]; - unsign32 fell_off; - - /* Supported Modes of Operation */ - - fell_off = 0; - switch (a->mode) - { - case ECB: - AES_ecb_encrypt(a, (uchar *)buff); - return 0; - case CBC: - for (j = 0; j < 4 * NB; j++) buff[j] ^= a->f[j]; - AES_ecb_encrypt(a, (uchar *)buff); - for (j = 0; j < 4 * NB; j++) a->f[j] = buff[j]; - return 0; - - case CFB1: - case CFB2: - case CFB4: - bytes = a->mode - CFB1 + 1; - for (j = 0; j < bytes; j++) fell_off = (fell_off << 8) | a->f[j]; - for (j = 0; j < 4 * NB; j++) st[j] = a->f[j]; - for (j = bytes; j < 4 * NB; j++) a->f[j - bytes] = a->f[j]; - AES_ecb_encrypt(a, (uchar *)st); - for (j = 0; j < bytes; j++) - { - buff[j] ^= st[j]; - a->f[16 - bytes + j] = buff[j]; - } - return fell_off; - - case OFB1: - case OFB2: - case OFB4: - case OFB8: - case OFB16: - - bytes = a->mode - OFB1 + 1; - AES_ecb_encrypt(a, (uchar *)(a->f)); - for (j = 0; j < bytes; j++) buff[j] ^= a->f[j]; - return 0; - - case CTR1: - case CTR2: - case CTR4: - case CTR8: - case CTR16: - - bytes = a->mode - CTR1 + 1; - for (j = 0; j < 4 * NB; j++) st[j] = a->f[j]; - AES_ecb_encrypt(a, (uchar *)st); - for (j = 0; j < bytes; j++) buff[j] ^= st[j]; - increment(a->f); - return 0; - - default: - return 0; - } -} - -/* SU= 40 */ -/* Decrypt using selected mode of operation */ -unsign32 core::AES_decrypt(core::aes *a, char *buff) -{ - int j, bytes; - char st[16]; - unsign32 fell_off; - - /* Supported modes of operation */ - fell_off = 0; - switch (a->mode) - { - case ECB: - AES_ecb_decrypt(a, (uchar *)buff); - return 0; - case CBC: - for (j = 0; j < 4 * NB; j++) - { - st[j] = a->f[j]; - a->f[j] = buff[j]; - } - AES_ecb_decrypt(a, (uchar *)buff); - for (j = 0; j < 4 * NB; j++) - { - buff[j] ^= st[j]; - st[j] = 0; - } - return 0; - case CFB1: - case CFB2: - case CFB4: - bytes = a->mode - CFB1 + 1; - for (j = 0; j < bytes; j++) fell_off = (fell_off << 8) | a->f[j]; - for (j = 0; j < 4 * NB; j++) st[j] = a->f[j]; - for (j = bytes; j < 4 * NB; j++) a->f[j - bytes] = a->f[j]; - AES_ecb_encrypt(a, (uchar *)st); - for (j = 0; j < bytes; j++) - { - a->f[16 - bytes + j] = buff[j]; - buff[j] ^= st[j]; - } - return fell_off; - case OFB1: - case OFB2: - case OFB4: - case OFB8: - case OFB16: - bytes = a->mode - OFB1 + 1; - AES_ecb_encrypt(a, (uchar *)(a->f)); - for (j = 0; j < bytes; j++) buff[j] ^= a->f[j]; - return 0; - - case CTR1: - case CTR2: - case CTR4: - case CTR8: - case CTR16: - - bytes = a->mode - CTR1 + 1; - for (j = 0; j < 4 * NB; j++) st[j] = a->f[j]; - AES_ecb_encrypt(a, (uchar *)st); - for (j = 0; j < bytes; j++) buff[j] ^= st[j]; - increment(a->f); - return 0; - - default: - return 0; - } -} - -/* Clean up and delete left-overs */ -void core::AES_end(core::aes *a) -{ - /* clean up */ - int i; - for (i = 0; i < NB * (a->Nr + 1); i++) - a->fkey[i] = a->rkey[i] = 0; - for (i = 0; i < 4 * NB; i++) - a->f[i] = 0; -} - -/* AES encryption/decryption. Encrypt byte array M using key K and returns ciphertext */ -void core::AES_CBC_IV0_ENCRYPT(octet *k, octet *m, octet *c) -{ - /* AES CBC encryption, with Null IV and key k */ - /* Input is from an octet string m, output is to an octet string c */ - /* Input is padded as necessary to make up a full final block */ - aes a; - int fin; - int i, j, ipt, opt; - char buff[16]; - int padlen; - - OCT_clear(c); - if (m->len == 0) return; - AES_init(&a, CBC, k->len, k->val, NULL); - - ipt = opt = 0; - fin = 0; - for (;;) - { - for (i = 0; i < 16; i++) - { - if (ipt < m->len) buff[i] = m->val[ipt++]; - else - { - fin = 1; - break; - } - } - if (fin) break; - AES_encrypt(&a, buff); - for (i = 0; i < 16; i++) - if (opt < c->max) c->val[opt++] = buff[i]; - } - - /* last block, filled up to i-th index */ - - padlen = 16 - i; - for (j = i; j < 16; j++) buff[j] = padlen; - AES_encrypt(&a, buff); - for (i = 0; i < 16; i++) - if (opt < c->max) c->val[opt++] = buff[i]; - AES_end(&a); - c->len = opt; -} - -/* decrypts and returns TRUE if all consistent, else returns FALSE */ -int core::AES_CBC_IV0_DECRYPT(octet *k, octet *c, octet *m) -{ - /* padding is removed */ - aes a; - int i, ipt, opt, ch; - char buff[16]; - int fin, bad; - int padlen; - ipt = opt = 0; - - OCT_clear(m); - if (c->len == 0) return 1; - ch = c->val[ipt++]; - - AES_init(&a, CBC, k->len, k->val, NULL); - fin = 0; - - for (;;) - { - for (i = 0; i < 16; i++) - { - buff[i] = ch; - if (ipt >= c->len) - { - fin = 1; - break; - } - else ch = c->val[ipt++]; - } - AES_decrypt(&a, buff); - if (fin) break; - for (i = 0; i < 16; i++) - if (opt < m->max) m->val[opt++] = buff[i]; - } - AES_end(&a); - bad = 0; - padlen = buff[15]; - if (i != 15 || padlen < 1 || padlen > 16) bad = 1; - if (padlen >= 2 && padlen <= 16) - for (i = 16 - padlen; i < 16; i++) if (buff[i] != padlen) bad = 1; - - if (!bad) for (i = 0; i < 16 - padlen; i++) - if (opt < m->max) m->val[opt++] = buff[i]; - - m->len = opt; - if (bad) return 0; - return 1; -} - -/* -#include - -#define KK 32 - -int main() -{ - int i; - aes a; - unsign32 t; - uchar x,y; - - char key[KK]; - char block[16]; - char iv[16]; - for (i=0;iKeRdzJck^D7?3RqliS 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%0DVk#)fBCtmccUc$lBGVrWVp5EZ2x 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 rK7#q!(GvgPbPzay^1GT>zpa1^=00DZ^ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/benchtest_all.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/benchtest_all.cpp deleted file mode 100644 index 0a5b42a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/benchtest_all.cpp +++ /dev/null @@ -1,1462 +0,0 @@ - -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Test and benchmark elliptic curve and RSA functions - First build core.a from config*.py file - g++ -O3 benchtest_all.c core.a -o benchtest_all -*/ - -#include -#include -#include - -#include "rsa_RSA2048.h" -#include "ecp_Ed25519.h" -#include "pair_BN254.h" - -#if CHUNK==32 || CHUNK==64 -#include "ecp_NIST256.h" -#include "ecp_Ed448.h" -#include "pair_BLS12383.h" -#include "pair4_BLS24479.h" -#include "pair8_BLS48556.h" -#endif - -#define MIN_TIME 10.0 -#define MIN_ITERS 10 - -using namespace core; - -int ed25519(csprng *RNG) -{ - using namespace Ed25519; - using namespace Ed25519_BIG; - using namespace Ed25519_FP; - - int i, iterations; - clock_t start; - double elapsed; - ECP EP, EG; - BIG s, r, x, y; - FP rw; - printf("\nTesting/Timing Ed25519 ECC\n"); - -#if CURVETYPE_Ed25519==WEIERSTRASS - printf("Weierstrass parameterization\n"); -#endif -#if CURVETYPE_Ed25519==EDWARDS - printf("Edwards parameterization\n"); -#endif -#if CURVETYPE_Ed25519==MONTGOMERY - printf("Montgomery parameterization\n"); -#endif - - -#if MODTYPE_F25519 == PSEUDO_MERSENNE - printf("Pseudo-Mersenne Modulus\n"); -#endif - -#if MODTYPE_F25519 == GENERALISED_MERSENNE - printf("Generalised-Mersenne Modulus\n"); -#endif - -#if MODTYPE_F25519 == MONTGOMERY_FRIENDLY - printf("Montgomery Friendly Modulus\n"); -#endif - -#if MODTYPE_F25519 == NOT_SPECIAL - printf("Not special Modulus\n"); -#endif - - -#if CHUNK==16 - printf("16-bit Build\n"); -#endif -#if CHUNK==32 - printf("32-bit Build\n"); -#endif -#if CHUNK==64 - printf("64-bit Build\n"); -#endif - - ECP_generator(&EG); - BIG_rcopy(r, CURVE_Order); - - FP_rand(&rw,RNG); - - ECP_map2point(&EP,&rw); - ECP_cfp(&EP); - - if (ECP_isinf(&EP)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - ECP_mul(&EP,r); - if (!ECP_isinf(&EP)) - { - printf("EP= "); ECP_output(&EP); printf("\n"); - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_Ed25519, RNG); - - ECP_copy(&EP, &EG); - ECP_mul(&EP, r); - - if (!ECP_isinf(&EP)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&EP, &EG); - ECP_mul(&EP, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("EC mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - return 0; -} - -#if CHUNK==32 || CHUNK==64 -int nist256(csprng *RNG) -{ - using namespace NIST256; - using namespace NIST256_BIG; - using namespace NIST256_FP; - - int i, iterations; - clock_t start; - double elapsed; - ECP EP, EG; - BIG s, r, x, y; - FP rw; - printf("\nTesting/Timing NIST256 ECC\n"); - -#if CURVETYPE_NIST256==WEIERSTRASS - printf("Weierstrass parameterization\n"); -#endif -#if CURVETYPE_NIST256==EDWARDS - printf("Edwards parameterization\n"); -#endif -#if CURVETYPE_NIST256==MONTGOMERY - printf("Montgomery parameterization\n"); -#endif - - -#if MODTYPE_NIST256 == PSEUDO_MERSENNE - printf("Pseudo-Mersenne Modulus\n"); -#endif - -#if MODTYPE_NIST256 == GENERALISED_MERSENNE - printf("Generalised-Mersenne Modulus\n"); -#endif - -#if MODTYPE_NIST256 == MONTGOMERY_FRIENDLY - printf("Montgomery Friendly Modulus\n"); -#endif - -#if MODTYPE_NIST256 == NOT_SPECIAL - printf("Not special Modulus\n"); -#endif - -#if CHUNK==16 - printf("16-bit Build\n"); -#endif -#if CHUNK==32 - printf("32-bit Build\n"); -#endif -#if CHUNK==64 - printf("64-bit Build\n"); -#endif - - ECP_generator(&EG); - - BIG_rcopy(r, CURVE_Order); - - FP_rand(&rw,RNG); - ECP_map2point(&EP,&rw); - ECP_cfp(&EP); - - if (ECP_isinf(&EP)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - ECP_mul(&EP,r); - if (!ECP_isinf(&EP)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_NIST256, RNG); - - ECP_copy(&EP, &EG); - ECP_mul(&EP, r); - - if (!ECP_isinf(&EP)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&EP, &EG); - ECP_mul(&EP, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("EC mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - return 0; -} - -int ed448(csprng *RNG) -{ - using namespace Ed448; - using namespace Ed448_BIG; - using namespace Ed448_FP; - - int i, iterations; - clock_t start; - double elapsed; - ECP EP, EG; - BIG s, r, x, y; - FP rw; - printf("\nTesting/Timing Ed448 ECC\n"); - -#if CURVETYPE_Ed448==WEIERSTRASS - printf("Weierstrass parameterization\n"); -#endif -#if CURVETYPE_Ed448==EDWARDS - printf("Edwards parameterization\n"); -#endif -#if CURVETYPE_Ed448==MONTGOMERY - printf("Montgomery parameterization\n"); -#endif - -#if MODTYPE_F448 == PSEUDO_MERSENNE - printf("Pseudo-Mersenne Modulus\n"); -#endif - -#if MODTYPE_F448 == GENERALISED_MERSENNE - printf("Generalised-Mersenne Modulus\n"); -#endif - -#if MODTYPE_F448 == MONTGOMERY_FRIENDLY - printf("Montgomery Friendly Modulus\n"); -#endif - -#if MODTYPE_F448 == NOT_SPECIAL - printf("Not special Modulus\n"); -#endif - -#if CHUNK==16 - printf("16-bit Build\n"); -#endif -#if CHUNK==32 - printf("32-bit Build\n"); -#endif -#if CHUNK==64 - printf("64-bit Build\n"); -#endif - - ECP_generator(&EG); - BIG_rcopy(r, CURVE_Order); - FP_rand(&rw,RNG); - ECP_map2point(&EP,&rw); - ECP_cfp(&EP); - - if (ECP_isinf(&EP)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - ECP_mul(&EP,r); - if (!ECP_isinf(&EP)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_Ed448, RNG); - - ECP_copy(&EP, &EG); - ECP_mul(&EP, r); - - if (!ECP_isinf(&EP)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&EP, &EG); - ECP_mul(&EP, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("EC mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - return 0; -} -#endif - -int bn254(csprng *RNG) -{ - using namespace BN254; - using namespace BN254_FP; - using namespace BN254_BIG; - - int i, iterations; - clock_t start; - double elapsed; - - ECP P, G; - ECP2 Q, W; - FP12 g, w; - FP4 cm; - FP2 rz2; - FP rz; - - BIG s, r, x, y; - printf("\nTesting/Timing BN254 Pairings\n"); - - ECP_generator(&G); - BIG_rcopy(r, CURVE_Order); - FP_rand(&rz,RNG); - ECP_map2point(&P,&rz); - ECP_cfp(&P); - - if (ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - ECP_mul(&P,r); - if (!ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_BN254, RNG); - - ECP_copy(&P, &G); - PAIR_G1mul(&P, r); - - if (!ECP_isinf(&P)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&P, &G); - PAIR_G1mul(&P, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G1 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP2_generator(&W); - - FP2_rand(&rz2,RNG); - ECP2_map2point(&Q,&rz2); - ECP2_cfp(&Q); - - if (ECP2_isinf(&Q)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - //printf("Q= "); ECP2_output(&Q); printf("\n"); - ECP2_mul(&Q,r); - if (!ECP2_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - - ECP2_copy(&Q, &W); - ECP2_mul(&Q, r); - - if (!ECP2_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP2_copy(&Q, &W); - PAIR_G2mul(&Q, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G2 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - -//printf("pairing= ");FP12_output(&w); printf("\n"); - - FP12_copy(&g, &w); - - PAIR_GTpow(&g, r); - - if (!FP12_isunity(&g)) - { - printf("FAILURE - g^r!=1\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - FP12_copy(&g, &w); - PAIR_GTpow(&g, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - FP12_copy(&g, &w); - - iterations = 0; - start = clock(); - do { - FP12_compow(&cm, &g, s, r); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow (compressed) - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - PAIR_ate(&w, &Q, &P); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing ATE - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - FP12_copy(&g, &w); - PAIR_fexp(&g); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing FEXP - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP_copy(&P, &G); - ECP2_copy(&Q, &W); - - PAIR_G1mul(&P, s); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - ECP_copy(&P, &G); - - PAIR_G2mul(&Q, s); - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - if (!PAIR_G1member(&P)) - { - printf("FAILURE - P not in G1\n"); - return 0; - } - - if (!PAIR_G2member(&Q)) - { - printf("FAILURE - Q not in G2\n"); - return 0; - } - - if (!PAIR_GTmember(&w)) - { - printf("FAILURE - e(Q,P) not in GT\n"); - return 0; - } - - if (!FP12_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,sP) \n"); - return 0; - } - - ECP2_copy(&Q, &W); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - PAIR_GTpow(&g, s); - - if (!FP12_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,P)^s \n"); - return 0; - } - - ECP N1; - ECP2 N2; - - ECP_inf(&N1); - ECP2_inf(&N2); - - PAIR_ate(&g, &N2, &P); - PAIR_fexp(&g); - - if (!FP12_isunity(&g)) - { - printf("FAILURE - e(O,P) !=1 \n"); - return 0; - } - - PAIR_ate(&g, &Q, &N1); - PAIR_fexp(&g); - - if (!FP12_isunity(&g)) - { - printf("FAILURE - e(Q,O) !=1 \n"); - return 0; - } - - - - return 0; -} - -#if CHUNK==32 || CHUNK==64 -int bls383(csprng *RNG) -{ - using namespace BLS12383; - using namespace BLS12383_FP; - using namespace BLS12383_BIG; - - int i, iterations; - clock_t start; - double elapsed; - - ECP P, G; - ECP2 Q, W; - FP12 g, w; - FP4 cm; - FP2 rz2; - FP rz; - - BIG s, r, x, y; - printf("\nTesting/Timing BLS12383 Pairings\n"); - - ECP_generator(&G); - - BIG_rcopy(r, CURVE_Order); - FP_rand(&rz,RNG); - -/* - iterations = 0; - start = clock(); - do { - BIG_randomnum(s,r,RNG); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("BIG_randomnum - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - printf("nbits(r)= %d\n",BIG_nbits(r)); -*/ -// iterations = 0; -// start = clock(); -// do { - ECP_map2point(&P,&rz); - ECP_cfp(&P); -// iterations++; -// elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; -// } while (elapsed < MIN_TIME || iterations < MIN_ITERS); -// elapsed = 1000.0 * elapsed / iterations; -// printf("G1 hash to point - %8d iterations ", iterations); -// printf(" %8.2lf ms per iteration\n", elapsed); - - - if (ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - ECP_mul(&P,r); - if (!ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_BLS12383, RNG); - - - ECP_copy(&P, &G); - PAIR_G1mul(&P, r); - - if (!ECP_isinf(&P)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&P, &G); - PAIR_G1mul(&P, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G1 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP2_generator(&W); - - FP2_rand(&rz2,RNG); - ECP2_map2point(&Q,&rz2); - ECP2_cfp(&Q); - - if (ECP2_isinf(&Q)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - ECP2_mul(&Q,r); - if (!ECP2_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - - - ECP2_copy(&Q, &W); - ECP2_mul(&Q, r); - - if (!ECP2_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP2_copy(&Q, &W); - PAIR_G2mul(&Q, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G2 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - FP12_copy(&g, &w); - - PAIR_GTpow(&g, r); - - if (!FP12_isunity(&g)) - { - printf("FAILURE - g^r!=1\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - FP12_copy(&g, &w); - PAIR_GTpow(&g, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - FP12_copy(&g, &w); - - iterations = 0; - start = clock(); - do { - FP12_compow(&cm, &g, s, r); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow (compressed) - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - PAIR_ate(&w, &Q, &P); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing ATE - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - FP12_copy(&g, &w); - PAIR_fexp(&g); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing FEXP - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP_copy(&P, &G); - ECP2_copy(&Q, &W); - - PAIR_G1mul(&P, s); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - ECP_copy(&P, &G); - - PAIR_G2mul(&Q, s); - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - if (!PAIR_G1member(&P)) - { - printf("FAILURE - P not in G1\n"); - return 0; - } - - if (!PAIR_G2member(&Q)) - { - printf("FAILURE - Q not in G2\n"); - return 0; - } - - if (!PAIR_GTmember(&w)) - { - printf("FAILURE - e(Q,P) not in GT\n"); - return 0; - } - - if (!FP12_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,sP) \n"); - return 0; - } - - ECP2_copy(&Q, &W); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - PAIR_GTpow(&g, s); - - if (!FP12_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,P)^s \n"); - return 0; - } - - ECP N1; - ECP2 N2; - - ECP_inf(&N1); - ECP2_inf(&N2); - - PAIR_ate(&g, &N2, &P); - PAIR_fexp(&g); - - if (!FP12_isunity(&g)) - { - printf("FAILURE - e(O,P) !=1 \n"); - return 0; - } - - PAIR_ate(&g, &Q, &N1); - PAIR_fexp(&g); - - if (!FP12_isunity(&g)) - { - printf("FAILURE - e(Q,O) !=1 \n"); - return 0; - } - - return 0; -} - -int bls24(csprng *RNG) -{ - using namespace BLS24479; - using namespace BLS24479_FP; - using namespace BLS24479_BIG; - - int i, iterations; - clock_t start; - double elapsed; - - ECP P, G; - ECP4 Q, W; - FP24 g, w; - FP rz; - FP4 rz4; - - FP8 cm; - BIG a, b, s, r; - - printf("\nTesting/Timing BLS24479 Pairings\n"); - - ECP_generator(&G); - BIG_rcopy(r, CURVE_Order); - FP_rand(&rz,RNG); - ECP_map2point(&P,&rz); - ECP_cfp(&P); - - if (ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - ECP_mul(&P,r); - if (!ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_BLS24479, RNG); - - ECP_copy(&P, &G); - PAIR_G1mul(&P, r); - - if (!ECP_isinf(&P)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&P, &G); - PAIR_G1mul(&P, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G1 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP4_generator(&W); - - FP4_rand(&rz4,RNG); - ECP4_map2point(&Q,&rz4); - ECP4_cfp(&Q); - - if (ECP4_isinf(&Q)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - ECP4_mul(&Q,r); - if (!ECP4_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - ECP4_copy(&Q, &W); - ECP4_mul(&Q, r); - - if (!ECP4_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP4_copy(&Q, &W); - PAIR_G2mul(&Q, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G2 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - FP24_copy(&g, &w); - - PAIR_GTpow(&g, r); - - if (!FP24_isunity(&g)) - { - printf("FAILURE - g^r!=1\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - FP24_copy(&g, &w); - PAIR_GTpow(&g, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); -/* - FP24_copy(&g, &w); - - iterations = 0; - start = clock(); - do { - FP24_compow(&cm, &g, s, r); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow (compressed) - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); -*/ - iterations = 0; - start = clock(); - do { - PAIR_ate(&w, &Q, &P); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing ATE - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - FP24_copy(&g, &w); - PAIR_fexp(&g); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing FEXP - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP_copy(&P, &G); - ECP4_copy(&Q, &W); - - PAIR_G1mul(&P, s); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - ECP_copy(&P, &G); - - PAIR_G2mul(&Q, s); - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - if (!PAIR_G1member(&P)) - { - printf("FAILURE - P not in G1\n"); - return 0; - } - - if (!PAIR_G2member(&Q)) - { - printf("FAILURE - Q not in G2\n"); - return 0; - } - - if (!PAIR_GTmember(&w)) - { - printf("FAILURE - e(Q,P) not in GT\n"); - return 0; - } - - if (!FP24_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,sP) \n"); - return 0; - } - - ECP4_copy(&Q, &W); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - PAIR_GTpow(&g, s); - - if (!FP24_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,P)^s \n"); - return 0; - } - - ECP N1; - ECP4 N2; - - ECP_inf(&N1); - ECP4_inf(&N2); - - PAIR_ate(&g, &N2, &P); - PAIR_fexp(&g); - - if (!FP24_isunity(&g)) - { - printf("FAILURE - e(O,P) !=1 \n"); - return 0; - } - - PAIR_ate(&g, &Q, &N1); - PAIR_fexp(&g); - - if (!FP24_isunity(&g)) - { - printf("FAILURE - e(Q,O) !=1 \n"); - return 0; - } - /* - PAIR_ate(&g,&N2,&N1); - PAIR_fexp(&g); - - if (!FP24_isunity(&g)) - { - printf("FAILURE - e(O,O) !=1 \n"); - return 0; - } - */ - return 0; -} - -int bls48(csprng *RNG) -{ - using namespace BLS48556; - using namespace BLS48556_FP; - using namespace BLS48556_BIG; - - int i, iterations; - clock_t start; - double elapsed; - - ECP P, G; - ECP8 Q, W; - FP48 g, w; - FP rz; - FP8 rz8; - - FP16 cm; - BIG a, b, s, r; - - printf("\nTesting/Timing BLS48556 Pairings\n"); - - ECP_generator(&G); - BIG_rcopy(r, CURVE_Order); - FP_rand(&rz,RNG); - ECP_map2point(&P,&rz); - ECP_cfp(&P); - - if (ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - ECP_mul(&P,r); - if (!ECP_isinf(&P)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - BIG_randtrunc(s, r, 2 * CURVE_SECURITY_BLS48556, RNG); - - ECP_copy(&P, &G); - PAIR_G1mul(&P, r); - - if (!ECP_isinf(&P)) - { - printf("FAILURE - rG!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP_copy(&P, &G); - PAIR_G1mul(&P, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G1 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - - ECP8_generator(&W); - - FP8_rand(&rz8,RNG); - ECP8_map2point(&Q,&rz8); - ECP8_cfp(&Q); - - if (ECP8_isinf(&Q)) - { - printf("HASHING FAILURE - P=O\n"); - return 0; - } - - ECP8_mul(&Q,r); - if (!ECP8_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - ECP8_copy(&Q, &W); - - //ECP8_mul(&Q,r); - PAIR_G2mul(&Q, r); - - if (!ECP8_isinf(&Q)) - { - printf("FAILURE - rQ!=O\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - ECP8_copy(&Q, &W); - PAIR_G2mul(&Q, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("G2 mul - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - FP48_copy(&g, &w); - - PAIR_GTpow(&g, r); - - if (!FP48_isunity(&g)) - { - printf("FAILURE - g^r!=1\n"); - return 0; - } - - iterations = 0; - start = clock(); - do { - FP48_copy(&g, &w); - PAIR_GTpow(&g, s); - - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); -/* - FP48_copy(&g, &w); - - iterations = 0; - start = clock(); - do { - FP48_compow(&cm, &g, s, r); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("GT pow (compressed) - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); -*/ - iterations = 0; - start = clock(); - do { - PAIR_ate(&w, &Q, &P); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing ATE - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - FP48_copy(&g, &w); - PAIR_fexp(&g); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("PAIRing FEXP - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - ECP_copy(&P, &G); - ECP8_copy(&Q, &W); - - PAIR_G1mul(&P, s); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - ECP_copy(&P, &G); - - PAIR_G2mul(&Q, s); - //ECP8_mul(&Q,s); - PAIR_ate(&w, &Q, &P); - PAIR_fexp(&w); - - if (!PAIR_G1member(&P)) - { - printf("FAILURE - P not in G1\n"); - return 0; - } - - if (!PAIR_G2member(&Q)) - { - printf("FAILURE - Q not in G2\n"); - return 0; - } - - if (!PAIR_GTmember(&w)) - { - printf("FAILURE - e(Q,P) not in GT\n"); - return 0; - } - - if (!FP48_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,sP) \n"); - return 0; - } - - ECP8_copy(&Q, &W); - PAIR_ate(&g, &Q, &P); - PAIR_fexp(&g); - - PAIR_GTpow(&g, s); - - if (!FP48_equals(&g, &w)) - { - printf("FAILURE - e(sQ,p)!=e(Q,P)^s \n"); - return 0; - } - - ECP N1; - ECP8 N2; - - ECP_inf(&N1); - ECP8_inf(&N2); - - PAIR_ate(&g, &N2, &P); - PAIR_fexp(&g); - - if (!FP48_isunity(&g)) - { - printf("FAILURE - e(O,P) !=1 \n"); - return 0; - } - - PAIR_ate(&g, &Q, &N1); - PAIR_fexp(&g); - - if (!FP48_isunity(&g)) - { - printf("FAILURE - e(Q,O) !=1 \n"); - return 0; - } - /* - PAIR_ate(&g,&N2,&N1); - PAIR_fexp(&g); - - if (!FP48_isunity(&g)) - { - printf("FAILURE - e(O,O) !=1 \n"); - return 0; - } - */ - return 0; -} -#endif - -int rsa2048(csprng *RNG) -{ - using namespace RSA2048; - - rsa_public_key pub; - rsa_private_key priv; - - int i, iterations; - clock_t start; - double elapsed; - - char m[RFS_RSA2048], d[RFS_RSA2048], c[RFS_RSA2048]; - octet M = {0, sizeof(m), m}; - octet D = {0, sizeof(d), d}; - octet C = {0, sizeof(c), c}; - - printf("\nTesting/Timing 2048-bit RSA\n"); - - printf("Generating 2048-bit RSA public/private key pair\n"); - - iterations = 0; - start = clock(); - do { - RSA_KEY_PAIR(RNG, 65537, &priv, &pub, NULL, NULL); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < 1); - elapsed = 1000.0 * elapsed / iterations; - printf("RSA gen - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - M.len = RFS_RSA2048; - for (i = 0; i < RFS_RSA2048; i++) M.val[i] = i % 128; - - iterations = 0; - start = clock(); - do { - RSA_ENCRYPT(&pub, &M, &C); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("RSA enc - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - iterations = 0; - start = clock(); - do { - RSA_DECRYPT(&priv, &C, &D); - iterations++; - elapsed = (clock() - start) / (double)CLOCKS_PER_SEC; - } while (elapsed < MIN_TIME || iterations < MIN_ITERS); - elapsed = 1000.0 * elapsed / iterations; - printf("RSA dec - %8d iterations ", iterations); - printf(" %8.2lf ms per iteration\n", elapsed); - - for (i = 0; i < RFS_RSA2048; i++) - { - if (M.val[i] != D.val[i]) - { - printf("FAILURE - RSA decryption\n"); - return 0; - } - } - - printf("All tests pass\n"); - - return 0; -} - -int main() -{ - csprng RNG; - int i; - char pr[10]; - unsigned long ran; - - time((time_t *)&ran); - pr[0] = ran; - pr[1] = ran >> 8; - pr[2] = ran >> 16; - pr[3] = ran >> 24; - for (i = 4; i < 10; i++) pr[i] = i; /*****4****/ - RAND_seed(&RNG, 10, pr); - - ed25519(&RNG); -#if CHUNK==32 || CHUNK==64 - nist256(&RNG); - ed448(&RNG); -#endif - bn254(&RNG); -#if CHUNK==32 || CHUNK==64 - bls383(&RNG); - bls24(&RNG); - bls48(&RNG); -#endif - rsa2048(&RNG); - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big.cpp deleted file mode 100644 index 3009e4d..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big.cpp +++ /dev/null @@ -1,1830 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE basic functions for BIG type */ -/* SU=m, SU is Stack Usage */ - -#include "big_XXX.h" - -//int XXX::BIGMULS=0; -//int XXX::BIGSQRS=0; - -/* test a=0? */ -int XXX::BIG_iszilch(BIG a) -{ - int i; - chunk d=0; - for (i = 0; i < NLEN_XXX; i++) - d|=a[i]; - return (1 & ((d-1)>>BASEBITS_XXX)); -} - -/* test a=1? */ -int XXX::BIG_isunity(BIG a) -{ - int i; - chunk d=0; - for (i = 1; i < NLEN_XXX; i++) - d|=a[i]; - return (1 & ((d-1)>>BASEBITS_XXX) & (((a[0]^1)-1)>>BASEBITS_XXX)); -} - -/* test a=0? */ -int XXX::BIG_diszilch(DBIG a) -{ - int i; - chunk d=0; - for (i = 0; i < DNLEN_XXX; i++) - d|=a[i]; - return (1 & ((d-1)>>BASEBITS_XXX)); -} - -/* SU= 56 */ -/* output a */ -void XXX::BIG_output(BIG a) -{ - BIG b; - int i, len; - len = BIG_nbits(a); - if (len % 4 == 0) len /= 4; - else - { - len /= 4; - len++; - } - if (len < MODBYTES_XXX * 2) len = MODBYTES_XXX * 2; - - for (i = len - 1; i >= 0; i--) - { - BIG_copy(b, a); - BIG_shr(b, i * 4); - printf("%01x", (unsigned int) b[0] & 15); - } -} - -/* SU= 16 */ -void XXX::BIG_rawoutput(BIG a) -{ - int i; - printf("("); - for (i = 0; i < NLEN_XXX - 1; i++) -#if CHUNK==64 - printf("%jx,", (uintmax_t) a[i]); - printf("%jx)", (uintmax_t) a[NLEN_XXX - 1]); -#else - printf("%x,", (unsigned int) a[i]); - printf("%x)", (unsigned int) a[NLEN_XXX - 1]); -#endif -} - -// modified to prevent Nonce@Once side channel attack -// Two tricks to thwart compiler optimization -// 1. Prevent mask removal by performing transformation that might change the mask, but in fact does not -// 2. Force the code to calculate an intermediate value, by making it part of (an unused) return value -// problem is XORing with all zeros or XORing with "random" shows up in side-channel, and reveals d - -/* Swap a and b if d=1 */ -chunk XXX::BIG_cswap(BIG a, BIG b, int d) -{ - int i; - chunk e, r, ra, w, t, c = (chunk) - d; - w=0; - r=a[0]^b[1]; // sort of random - ra=r+r; ra>>=1; // I know this doesn't change r, but the compiler doesn't! -#ifdef DEBUG_NORM - for (i = 0; i < NLEN_XXX + 2; i++) -#else - for (i = 0; i < NLEN_XXX; i++) -#endif - { - t = c & (a[i] ^ b[i]); - t^=r; - e=a[i]^t; w^=e; // to force calculation of e - a[i]=e^ra; - e=b[i]^t; w^=e; - b[i]=e^ra; - } - return w; // to bewilder optimizer -} - -/* Move g to f if d=1 */ -chunk XXX::BIG_cmove(BIG f, BIG g, int d) -{ - int i; - chunk e,w,r,ra,t,b = (chunk) - d; - w=0; - r=f[0]^g[1]; - ra=r+r; ra>>=1; // I know this doesn't change r, but the compiler doesn't! -#ifdef DEBUG_NORM - for (i = 0; i < NLEN_XXX + 2; i++) -#else - for (i = 0; i < NLEN_XXX; i++) -#endif - { - t=(f[i]^g[i])&b; - t^=r; - e=f[i]^t; w^=e; // to force calculation of e - f[i]=e^ra; - } - return w; // to bewilder optimizer -} - -/* Move g to f if d=1 */ -chunk XXX::BIG_dcmove(DBIG f, DBIG g, int d) -{ - int i; - chunk e,w,r,ra,t,b = (chunk) - d; - w=0; - r=f[0]^g[1]; - ra=r+r; ra>>=1; // I know this doesn't change r, but the compiler doesn't! -#ifdef DEBUG_NORM - for (i = 0; i < DNLEN_XXX + 2; i++) -#else - for (i = 0; i < DNLEN_XXX; i++) -#endif - { - t=(f[i]^g[i])&b; - t^=r; - e=f[i]^t; w^=e; - f[i]=e^ra; - } - return w; -} - -/* convert BIG to/from bytes */ -/* SU= 64 */ -void XXX::BIG_toBytes(char *b, BIG a) -{ - int i; - BIG c; - BIG_copy(c, a); - BIG_norm(c); - for (i = MODBYTES_XXX - 1; i >= 0; i--) - { - b[i] = c[0] & 0xff; - BIG_fshr(c, 8); - } -} - -/* SU= 16 */ -void XXX::BIG_fromBytes(BIG a, char *b) -{ - int i; - BIG_zero(a); - for (i = 0; i < MODBYTES_XXX; i++) - { - BIG_fshl(a, 8); - a[0] += (int)(unsigned char)b[i]; - } -#ifdef DEBUG_NORM - a[MPV_XXX] = 1; a[MNV_XXX] = 0; -#endif -} - -void XXX::BIG_fromBytesLen(BIG a, char *b, int s) -{ - int i, len = s; - BIG_zero(a); - - if (len > MODBYTES_XXX) len = MODBYTES_XXX; - for (i = 0; i < len; i++) - { - BIG_fshl(a, 8); - a[0] += (int)(unsigned char)b[i]; - } -#ifdef DEBUG_NORM - a[MPV_XXX] = 1; a[MNV_XXX] = 0; -#endif -} - - - -/* SU= 88 */ -void XXX::BIG_doutput(DBIG a) -{ - DBIG b; - int i, len; - BIG_dnorm(a); - len = BIG_dnbits(a); - if (len % 4 == 0) len /= 4; - else - { - len /= 4; - len++; - } - - for (i = len - 1; i >= 0; i--) - { - BIG_dcopy(b, a); - BIG_dshr(b, i * 4); - printf("%01x", (unsigned int) b[0] & 15); - } -} - - -void XXX::BIG_drawoutput(DBIG a) -{ - int i; - printf("("); - for (i = 0; i < DNLEN_XXX - 1; i++) -#if CHUNK==64 - printf("%jx,", (uintmax_t) a[i]); - printf("%jx)", (uintmax_t) a[DNLEN_XXX - 1]); -#else - printf("%x,", (unsigned int) a[i]); - printf("%x)", (unsigned int) a[DNLEN_XXX - 1]); -#endif -} - -/* Copy b=a */ -void XXX::BIG_copy(BIG b, BIG a) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - b[i] = a[i]; -#ifdef DEBUG_NORM - b[MPV_XXX] = a[MPV_XXX]; - b[MNV_XXX] = a[MNV_XXX]; -#endif -} - -/* Copy from ROM b=a */ -void XXX::BIG_rcopy(BIG b, const BIG a) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - b[i] = a[i]; -#ifdef DEBUG_NORM - b[MPV_XXX] = 1; b[MNV_XXX] = 0; -#endif -} - -/* double length DBIG copy b=a */ -void XXX::BIG_dcopy(DBIG b, DBIG a) -{ - int i; - for (i = 0; i < DNLEN_XXX; i++) - b[i] = a[i]; -#ifdef DEBUG_NORM - b[DMPV_XXX] = a[DMPV_XXX]; - b[DMNV_XXX] = a[DMNV_XXX]; -#endif -} - -/* Copy BIG to bottom half of DBIG */ -void XXX::BIG_dscopy(DBIG b, BIG a) -{ - int i; - for (i = 0; i < NLEN_XXX - 1; i++) - b[i] = a[i]; - - b[NLEN_XXX - 1] = a[NLEN_XXX - 1] & BMASK_XXX; /* top word normalized */ - b[NLEN_XXX] = a[NLEN_XXX - 1] >> BASEBITS_XXX; - - for (i = NLEN_XXX + 1; i < DNLEN_XXX; i++) b[i] = 0; -#ifdef DEBUG_NORM - b[DMPV_XXX] = a[MPV_XXX]; - b[DMNV_XXX] = a[MNV_XXX]; -#endif -} - -/* Copy BIG to top half of DBIG */ -void XXX::BIG_dsucopy(DBIG b, BIG a) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - b[i] = 0; - for (i = NLEN_XXX; i < DNLEN_XXX; i++) - b[i] = a[i - NLEN_XXX]; -#ifdef DEBUG_NORM - b[DMPV_XXX] = a[MPV_XXX]; - b[DMNV_XXX] = a[MNV_XXX]; -#endif -} - -/* Copy bottom half of DBIG to BIG */ -void XXX::BIG_sdcopy(BIG b, DBIG a) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - b[i] = a[i]; -#ifdef DEBUG_NORM - b[MPV_XXX] = a[DMPV_XXX]; - b[MNV_XXX] = a[DMNV_XXX]; -#endif -} - -/* Copy top half of DBIG to BIG */ -void XXX::BIG_sducopy(BIG b, DBIG a) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - b[i] = a[i + NLEN_XXX]; -#ifdef DEBUG_NORM - b[MPV_XXX] = a[DMPV_XXX]; - b[MNV_XXX] = a[DMNV_XXX]; - -#endif -} - -/* Set a=0 */ -void XXX::BIG_zero(BIG a) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - a[i] = 0; -#ifdef DEBUG_NORM - a[MPV_XXX] = a[MNV_XXX] = 0; -#endif -} - -void XXX::BIG_dzero(DBIG a) -{ - int i; - for (i = 0; i < DNLEN_XXX; i++) - a[i] = 0; -#ifdef DEBUG_NORM - a[DMPV_XXX] = a[DMNV_XXX] = 0; -#endif -} - -/* set a=1 */ -void XXX::BIG_one(BIG a) -{ - int i; - a[0] = 1; - for (i = 1; i < NLEN_XXX; i++) - a[i] = 0; -#ifdef DEBUG_NORM - a[MPV_XXX] = 1; - a[MNV_XXX] = 0; -#endif -} - -/* Set c=a+b */ -/* SU= 8 */ -void XXX::BIG_add(BIG c, BIG a, BIG b) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - c[i] = a[i] + b[i]; -#ifdef DEBUG_NORM - c[MPV_XXX] = a[MPV_XXX] + b[MPV_XXX]; - c[MNV_XXX] = a[MNV_XXX] + b[MNV_XXX]; - if (c[MPV_XXX] > NEXCESS_XXX) printf("add problem - positive digit overflow %d\n", (int)c[MPV_XXX]); - if (c[MNV_XXX] > NEXCESS_XXX) printf("add problem - negative digit overflow %d\n", (int)c[MNV_XXX]); - -#endif -} - -/* Set c=a or b */ -/* SU= 8 */ -void XXX::BIG_or(BIG c, BIG a, BIG b) -{ - int i; - BIG_norm(a); - BIG_norm(b); - for (i = 0; i < NLEN_XXX; i++) - c[i] = a[i] | b[i]; -#ifdef DEBUG_NORM - c[MPV_XXX] = 1; - c[MNV_XXX] = 0; -#endif - -} - - -/* Set c=c+d */ -void XXX::BIG_inc(BIG c, int d) -{ - BIG_norm(c); - c[0] += (chunk)d; -#ifdef DEBUG_NORM - c[MPV_XXX] += 1; -#endif -} - -/* Set c=a-b */ -/* SU= 8 */ -void XXX::BIG_sub(BIG c, BIG a, BIG b) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) - c[i] = a[i] - b[i]; -#ifdef DEBUG_NORM - c[MPV_XXX] = a[MPV_XXX] + b[MNV_XXX]; - c[MNV_XXX] = a[MNV_XXX] + b[MPV_XXX]; - if (c[MPV_XXX] > NEXCESS_XXX) printf("sub problem - positive digit overflow %d\n", (int)c[MPV_XXX]); - if (c[MNV_XXX] > NEXCESS_XXX) printf("sub problem - negative digit overflow %d\n", (int)c[MNV_XXX]); - -#endif -} - -/* SU= 8 */ - -void XXX::BIG_dsub(DBIG c, DBIG a, DBIG b) -{ - int i; - for (i = 0; i < DNLEN_XXX; i++) - c[i] = a[i] - b[i]; -#ifdef DEBUG_NORM - c[DMPV_XXX] = a[DMPV_XXX] + b[DMNV_XXX]; - c[DMNV_XXX] = a[DMNV_XXX] + b[DMPV_XXX]; - if (c[DMPV_XXX] > NEXCESS_XXX) printf("double sub problem - positive digit overflow %d\n", (int)c[DMPV_XXX]); - if (c[DMNV_XXX] > NEXCESS_XXX) printf("double sub problem - negative digit overflow %d\n", (int)c[DMNV_XXX]); -#endif -} - -void XXX::BIG_dadd(DBIG c, DBIG a, DBIG b) -{ - int i; - for (i = 0; i < DNLEN_XXX; i++) - c[i] = a[i] + b[i]; -#ifdef DEBUG_NORM - c[DMPV_XXX] = a[DMPV_XXX] + b[DMNV_XXX]; - c[DMNV_XXX] = a[DMNV_XXX] + b[DMPV_XXX]; - if (c[DMPV_XXX] > NEXCESS_XXX) printf("double add problem - positive digit overflow %d\n", (int)c[DMPV_XXX]); - if (c[DMNV_XXX] > NEXCESS_XXX) printf("double add problem - negative digit overflow %d\n", (int)c[DMNV_XXX]); -#endif -} - -/* Set c=c-1 */ -void XXX::BIG_dec(BIG c, int d) -{ - BIG_norm(c); - c[0] -= (chunk)d; -#ifdef DEBUG_NORM - c[MNV_XXX] += 1; -#endif -} - -/* multiplication r=a*c by c<=NEXCESS_XXX */ -void XXX::BIG_imul(BIG r, BIG a, int c) -{ - int i; - for (i = 0; i < NLEN_XXX; i++) r[i] = a[i] * c; -#ifdef DEBUG_NORM - r[MPV_XXX] = a[MPV_XXX] * c; - r[MNV_XXX] = a[MNV_XXX] * c; - if (r[MPV_XXX] > NEXCESS_XXX) printf("int mul problem - positive digit overflow %d\n", (int)r[MPV_XXX]); - if (r[MNV_XXX] > NEXCESS_XXX) printf("int mul problem - negative digit overflow %d\n", (int)r[MNV_XXX]); - -#endif -} - -/* multiplication r=a*c by larger integer - c<=FEXCESS */ -/* SU= 24 */ -chunk XXX::BIG_pmul(BIG r, BIG a, int c) -{ - int i; - chunk ak, carry = 0; - for (i = 0; i < NLEN_XXX; i++) - { - ak = a[i]; - r[i] = 0; - carry = muladd(ak, (chunk)c, carry, &r[i]); - } -#ifdef DEBUG_NORM - r[MPV_XXX] = 1; - r[MNV_XXX] = 0; -#endif - return carry; -} - -/* r/=3 */ -/* SU= 16 */ -/* -int XXX::BIG_div3(BIG r) -{ - int i; - chunk ak,base,carry=0; - BIG_norm(r); - base=((chunk)1<=0; i--) - { - ak=(carry*base+r[i]); - r[i]=ak/3; - carry=ak%3; - } - return (int)carry; -} -*/ -/* multiplication c=a*b by even larger integer b>FEXCESS, resulting in DBIG */ -/* SU= 24 */ -void XXX::BIG_pxmul(DBIG c, BIG a, int b) -{ - int j; - chunk carry; - BIG_dzero(c); - carry = 0; - for (j = 0; j < NLEN_XXX; j++) - carry = muladd(a[j], (chunk)b, carry, &c[j]); - c[NLEN_XXX] = carry; -#ifdef DEBUG_NORM - c[DMPV_XXX] = 1; - c[DMNV_XXX] = 0; -#endif -} - -/* .. if you know the result will fit in a BIG, c must be distinct from a and b */ -/* SU= 40 */ -void XXX::BIG_smul(BIG c, BIG a, BIG b) -{ - int i, j; - chunk carry; - - BIG_zero(c); - for (i = 0; i < NLEN_XXX; i++) - { - carry = 0; - for (j = 0; j < NLEN_XXX; j++) - { - if (i + j < NLEN_XXX) - carry = muladd(a[i], b[j], carry, &c[i + j]); - } - } -#ifdef DEBUG_NORM - c[MPV_XXX] = 1; - c[MNV_XXX] = 0; -#endif - -} - -/* Set c=a*b */ -/* SU= 72 */ -void XXX::BIG_mul(DBIG c, BIG a, BIG b) -{ - int i,k; -#ifdef dchunk - dchunk co,t; - dchunk s; - dchunk d[NLEN_XXX]; - int m; -#endif - -//XXX::BIGMULS++; - -#ifdef DEBUG_NORM - if ((a[MPV_XXX] != 1 && a[MPV_XXX] != 0) || a[MNV_XXX] != 0) printf("First input to mul not normed\n"); - if ((b[MPV_XXX] != 1 && b[MPV_XXX] != 0) || b[MNV_XXX] != 0) printf("Second input to mul not normed\n"); -#endif - - /* Faster to Combafy it.. Let the compiler unroll the loops! */ - -#ifdef COMBA - - /* faster psuedo-Karatsuba method */ -#ifdef UNWOUND - -#ifdef USE_KARATSUBA - - INLINE_MUL2 - -#else - - INLINE_MUL1 - -#endif - -#else - -#ifndef USE_KARATSUBA - - t=(dchunk)a[0]*b[0]; - c[0]=(chunk)t & BMASK_XXX; - t = t >> BASEBITS_XXX; - for (i=1;i> BASEBITS_XXX; - } - - for (i=NLEN_XXX;i<2*NLEN_XXX-1;i++) - { - k=i-(NLEN_XXX-1); - while (k<=NLEN_XXX-1) {t+=(dchunk)a[k]*b[i-k]; k++;} - c[i]=(chunk)t & BMASK_XXX; - t = t >> BASEBITS_XXX; - } - - c[2 * NLEN_XXX - 1] = (chunk)t; -#else - - for (i = 0; i < NLEN_XXX; i++) - d[i] = (dchunk)a[i] * b[i]; - - s = d[0]; - t = s; - c[0] = (chunk)t & BMASK_XXX; - t = t >> BASEBITS_XXX; - - for (k = 1; k < NLEN_XXX; k++) - { - s += d[k]; - t += s; - /*for (i = k; i >= 1 + k / 2; i--) This causes a huge slow down! gcc/g++ optimizer problem (I think) */ - for (i=1+k/2;i<=k;i++) t += (dchunk)(a[i] - a[k - i]) * (b[k - i] - b[i]); - c[k] = (chunk)t & BMASK_XXX; - t = t >> BASEBITS_XXX; - } - for (k = NLEN_XXX; k < 2 * NLEN_XXX - 1; k++) - { - s -= d[k - NLEN_XXX]; - t += s; - for (i=1+k/2;i> BASEBITS_XXX; - } - c[2 * NLEN_XXX - 1] = (chunk)t; -#endif -#endif - -#else - int j; - chunk carry; - BIG_dzero(c); - for (i = 0; i < NLEN_XXX; i++) - { - carry = 0; - for (j = 0; j < NLEN_XXX; j++) - carry = muladd(a[i], b[j], carry, &c[i + j]); - - c[NLEN_XXX + i] = carry; - } - -#endif - -#ifdef DEBUG_NORM - c[DMPV_XXX] = 1; - c[DMNV_XXX] = 0; -#endif -} - -/* Set c=a*a */ -/* SU= 80 */ -void XXX::BIG_sqr(DBIG c, BIG a) -{ - int i, j; -#ifdef dchunk - dchunk t, co; -#endif -//XXX::BIGSQRS++; -#ifdef DEBUG_NORM - if ((a[MPV_XXX] != 1 && a[MPV_XXX] != 0) || a[MNV_XXX] != 0) printf("Input to sqr not normed\n"); -#endif - /* Note 2*a[i] in loop below and extra addition */ - -#ifdef COMBA - -#ifdef UNWOUND - - INLINE_SQR - -#else - - - t = (dchunk)a[0] * a[0]; - c[0] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - - for (j = 1; j < NLEN_XXX - 1; ) - { - t = (dchunk)a[j] * a[0]; - for (i = 1; i < (j + 1) / 2; i++) {t += (dchunk)a[j - i] * a[i]; } - t += t; t += co; - c[j] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - j++; - t = (dchunk)a[j] * a[0]; - for (i = 1; i < (j + 1) / 2; i++) {t += (dchunk)a[j - i] * a[i]; } - t += t; t += co; - t += (dchunk)a[j / 2] * a[j / 2]; - c[j] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - j++; - } - - for (j = NLEN_XXX - 1 + NLEN_XXX % 2; j < DNLEN_XXX - 3; ) - { - t = (dchunk)a[NLEN_XXX - 1] * a[j - NLEN_XXX + 1]; - for (i = j - NLEN_XXX + 2; i < (j + 1) / 2; i++) {t += (dchunk)a[j - i] * a[i]; } - t += t; t += co; - c[j] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - j++; - t = (dchunk)a[NLEN_XXX - 1] * a[j - NLEN_XXX + 1]; - for (i = j - NLEN_XXX + 2; i < (j + 1) / 2; i++) {t += (dchunk)a[j - i] * a[i]; } - t += t; t += co; - t += (dchunk)a[j / 2] * a[j / 2]; - c[j] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - j++; - } - - t = (dchunk)a[NLEN_XXX - 2] * a[NLEN_XXX - 1]; - t += t; t += co; - c[DNLEN_XXX - 3] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - - t = (dchunk)a[NLEN_XXX - 1] * a[NLEN_XXX - 1] + co; - c[DNLEN_XXX - 2] = (chunk)t & BMASK_XXX; - co = t >> BASEBITS_XXX; - c[DNLEN_XXX - 1] = (chunk)co; - - -#endif - -#else - chunk carry; - BIG_dzero(c); - for (i = 0; i < NLEN_XXX; i++) - { - carry = 0; - for (j = i + 1; j < NLEN_XXX; j++) - carry = muladd(a[i], a[j], carry, &c[i + j]); - c[NLEN_XXX + i] = carry; - } - - for (i = 0; i < DNLEN_XXX; i++) c[i] *= 2; - - for (i = 0; i < NLEN_XXX; i++) - c[2 * i + 1] += muladd(a[i], a[i], 0, &c[2 * i]); - - BIG_dnorm(c); -#endif - - -#ifdef DEBUG_NORM - c[DMPV_XXX] = 1; - c[DMNV_XXX] = 0; -#endif - -} - -/* Montgomery reduction */ -void XXX::BIG_monty(BIG a, BIG md, chunk MC, DBIG d) -{ - int i, k; - -#ifdef dchunk - dchunk c,t,s; - dchunk dd[NLEN_XXX]; - chunk v[NLEN_XXX]; -#endif - - -#ifdef DEBUG_NORM - if ((d[DMPV_XXX] != 1 && d[DMPV_XXX] != 0) || d[DMNV_XXX] != 0) printf("Input to redc not normed\n"); -#endif - -#ifdef COMBA - -#ifdef UNWOUND - -#ifdef USE_KARATSUBA - - INLINE_REDC2 - -#else - - INLINE_REDC1 - -#endif - -#else - -#ifndef USE_KARATSUBA - t = d[0]; - v[0] = ((chunk)t * MC)&BMASK_XXX; - t += (dchunk)v[0] * md[0]; - t = (t >> BASEBITS_XXX) + d[1]; - - for (i = 1; i < NLEN_XXX; i++) - { - k=1; - t += (dchunk)v[0] * md[i]; - while (k> BASEBITS_XXX) + d[i + 1]; - } - for (i = NLEN_XXX; i < 2 * NLEN_XXX - 1; i++) - { - k=i-(NLEN_XXX-1); - while (k<=NLEN_XXX-1) {t += (dchunk)v[k]*md[i-k]; k++;} - a[i - NLEN_XXX] = (chunk)t & BMASK_XXX; - t = (t >> BASEBITS_XXX) + d[i + 1]; - } - a[NLEN_XXX - 1] = (chunk)t & BMASK_XXX; -#else - - t = d[0]; - v[0] = ((chunk)t * MC)&BMASK_XXX; - t += (dchunk)v[0] * md[0]; - t = (t >> BASEBITS_XXX) + d[1]; - s = 0; - - for (k = 1; k < NLEN_XXX; k++) - { - t = t + s + (dchunk)v[0] * md[k]; - - for (i=1+k/2;i> BASEBITS_XXX) + d[k + 1]; - dd[k] = (dchunk)v[k] * md[k]; - s += dd[k]; - } - for (k = NLEN_XXX; k < 2 * NLEN_XXX - 1; k++) - { - t = t + s; - for (i=1+k/2;i> BASEBITS_XXX) + d[k + 1]; - s -= dd[k - NLEN_XXX + 1]; - } - a[NLEN_XXX - 1] = (chunk)t & BMASK_XXX; -#endif - -#endif - - - -#else - int j; - chunk m, carry; - for (i = 0; i < NLEN_XXX; i++) - { - if (MC == -1) m = (-d[i])&BMASK_XXX; - else - { - if (MC == 1) m = d[i]; - else m = (MC * d[i])&BMASK_XXX; - } - carry = 0; - for (j = 0; j < NLEN_XXX; j++) - carry = muladd(m, md[j], carry, &d[i + j]); - d[NLEN_XXX + i] += carry; - } - BIG_sducopy(a, d); - BIG_norm(a); - -#endif - -#ifdef DEBUG_NORM - a[MPV_XXX] = 1; a[MNV_XXX] = 0; -#endif -} - -/* General shift left of a by n bits */ -/* a MUST be normalised */ -/* SU= 32 */ -void XXX::BIG_shl(BIG a, int k) -{ - int i; - int n = k % BASEBITS_XXX; - int m = k / BASEBITS_XXX; - - a[NLEN_XXX - 1] = ((a[NLEN_XXX - 1 - m] << n)); - if (NLEN_XXX >= m + 2) a[NLEN_XXX - 1] |= (a[NLEN_XXX - m - 2] >> (BASEBITS_XXX - n)); - - for (i = NLEN_XXX - 2; i > m; i--) - a[i] = ((a[i - m] << n)&BMASK_XXX) | (a[i - m - 1] >> (BASEBITS_XXX - n)); - a[m] = (a[0] << n)&BMASK_XXX; - for (i = 0; i < m; i++) a[i] = 0; - -} - -/* Fast shift left of a by n bits, where n less than a word, Return excess (but store it as well) */ -/* a MUST be normalised */ -/* SU= 16 */ -int XXX::BIG_fshl(BIG a, int n) -{ - int i; - - a[NLEN_XXX - 1] = ((a[NLEN_XXX - 1] << n)) | (a[NLEN_XXX - 2] >> (BASEBITS_XXX - n)); /* top word not masked */ - for (i = NLEN_XXX - 2; i > 0; i--) - a[i] = ((a[i] << n)&BMASK_XXX) | (a[i - 1] >> (BASEBITS_XXX - n)); - a[0] = (a[0] << n)&BMASK_XXX; - - return (int)(a[NLEN_XXX - 1] >> ((8 * MODBYTES_XXX) % BASEBITS_XXX)); /* return excess - only used in ff.c */ -} - -/* double length left shift of a by k bits - k can be > BASEBITS_XXX , a MUST be normalised */ -/* SU= 32 */ -void XXX::BIG_dshl(DBIG a, int k) -{ - int i; - int n = k % BASEBITS_XXX; - int m = k / BASEBITS_XXX; - - a[DNLEN_XXX - 1] = ((a[DNLEN_XXX - 1 - m] << n)) | (a[DNLEN_XXX - m - 2] >> (BASEBITS_XXX - n)); - - for (i = DNLEN_XXX - 2; i > m; i--) - a[i] = ((a[i - m] << n)&BMASK_XXX) | (a[i - m - 1] >> (BASEBITS_XXX - n)); - a[m] = (a[0] << n)&BMASK_XXX; - for (i = 0; i < m; i++) a[i] = 0; - -} - -/* General shift right of a by k bits */ -/* a MUST be normalised */ -/* SU= 32 */ -void XXX::BIG_shr(BIG a, int k) -{ - int i; - int n = k % BASEBITS_XXX; - int m = k / BASEBITS_XXX; - for (i = 0; i < NLEN_XXX - m - 1; i++) - a[i] = (a[m + i] >> n) | ((a[m + i + 1] << (BASEBITS_XXX - n))&BMASK_XXX); - if (NLEN_XXX > m) a[NLEN_XXX - m - 1] = a[NLEN_XXX - 1] >> n; - for (i = NLEN_XXX - m; i < NLEN_XXX; i++) a[i] = 0; - -} - -/* Fast combined shift, subtract and norm. Return sign of result */ -int XXX::BIG_ssn(BIG r, BIG a, BIG m) -{ - int i, n = NLEN_XXX - 1; - chunk carry; - m[0] = (m[0] >> 1) | ((m[1] << (BASEBITS_XXX - 1))&BMASK_XXX); - r[0] = a[0] - m[0]; - carry = r[0] >> BASEBITS_XXX; - r[0] &= BMASK_XXX; - - for (i = 1; i < n; i++) - { - m[i] = (m[i] >> 1) | ((m[i + 1] << (BASEBITS_XXX - 1))&BMASK_XXX); - r[i] = a[i] - m[i] + carry; - carry = r[i] >> BASEBITS_XXX; - r[i] &= BMASK_XXX; - } - - m[n] >>= 1; - r[n] = a[n] - m[n] + carry; -#ifdef DEBUG_NORM - r[MPV_XXX] = 1; r[MNV_XXX] = 0; -#endif - return ((r[n] >> (CHUNK - 1)) & 1); -} - -/* Faster shift right of a by k bits. Return shifted out part */ -/* a MUST be normalised */ -/* SU= 16 */ -int XXX::BIG_fshr(BIG a, int k) -{ - int i; - chunk r = a[0] & (((chunk)1 << k) - 1); /* shifted out part */ - for (i = 0; i < NLEN_XXX - 1; i++) - a[i] = (a[i] >> k) | ((a[i + 1] << (BASEBITS_XXX - k))&BMASK_XXX); - a[NLEN_XXX - 1] = a[NLEN_XXX - 1] >> k; - return (int)r; -} - -/* double length right shift of a by k bits - can be > BASEBITS_XXX */ -/* SU= 32 */ -void XXX::BIG_dshr(DBIG a, int k) -{ - int i; - int n = k % BASEBITS_XXX; - int m = k / BASEBITS_XXX; - for (i = 0; i < DNLEN_XXX - m - 1; i++) - a[i] = (a[m + i] >> n) | ((a[m + i + 1] << (BASEBITS_XXX - n))&BMASK_XXX); - a[DNLEN_XXX - m - 1] = a[DNLEN_XXX - 1] >> n; - for (i = DNLEN_XXX - m; i < DNLEN_XXX; i++ ) a[i] = 0; -} - -/* Split DBIG d into two BIGs t|b. Split happens at n bits, where n falls into NLEN_XXX word */ -/* d MUST be normalised */ -/* SU= 24 */ -chunk XXX::BIG_split(BIG t, BIG b, DBIG d, int n) -{ - int i; - chunk nw, carry = 0; - int m = n % BASEBITS_XXX; - - if (m == 0) - { - for (i = 0; i < NLEN_XXX; i++) b[i] = d[i]; - if (t != b) - { - for (i = NLEN_XXX; i < 2 * NLEN_XXX; i++) t[i - NLEN_XXX] = d[i]; - carry = t[NLEN_XXX - 1] >> BASEBITS_XXX; - t[NLEN_XXX - 1] = t[NLEN_XXX - 1] & BMASK_XXX; /* top word normalized */ - } - return carry; - } - - for (i = 0; i < NLEN_XXX - 1; i++) b[i] = d[i]; - - b[NLEN_XXX - 1] = d[NLEN_XXX - 1] & (((chunk)1 << m) - 1); - - if (t != b) - { - carry = (d[DNLEN_XXX - 1] << (BASEBITS_XXX - m)); - for (i = DNLEN_XXX - 2; i >= NLEN_XXX - 1; i--) - { - nw = (d[i] >> m) | carry; - carry = (d[i] << (BASEBITS_XXX - m))&BMASK_XXX; - t[i - NLEN_XXX + 1] = nw; - } - } -#ifdef DEBUG_NORM - t[MPV_XXX] = 1; t[MNV_XXX] = 0; - b[MPV_XXX] = 1; b[MNV_XXX] = 0; -#endif - return carry; -} - -/* you gotta keep the sign of carry! Look - no branching! */ -/* Note that sign bit is needed to disambiguate between +ve and -ve values */ -/* normalise BIG - force all digits < 2^BASEBITS_XXX */ -chunk XXX::BIG_norm(BIG a) -{ - int i; - chunk d, carry; - - carry=a[0]>>BASEBITS_XXX; - a[0]&=BMASK_XXX; - - for (i = 1; i < NLEN_XXX - 1; i++) - { - d = a[i] + carry; - a[i] = d & BMASK_XXX; - carry = d >> BASEBITS_XXX; - } - a[NLEN_XXX - 1] = (a[NLEN_XXX - 1] + carry); - -#ifdef DEBUG_NORM - a[MPV_XXX] = 1; a[MNV_XXX] = 0; -#endif - return (a[NLEN_XXX - 1] >> ((8 * MODBYTES_XXX) % BASEBITS_XXX)); /* only used in ff.c */ -} - -void XXX::BIG_dnorm(DBIG a) -{ - int i; - chunk d, carry; - - carry=a[0]>>BASEBITS_XXX; - a[0]&=BMASK_XXX; - - for (i = 1; i < DNLEN_XXX - 1; i++) - { - d = a[i] + carry; - a[i] = d & BMASK_XXX; - carry = d >> BASEBITS_XXX; - } - a[DNLEN_XXX - 1] = (a[DNLEN_XXX - 1] + carry); -#ifdef DEBUG_NORM - a[DMPV_XXX] = 1; a[DMNV_XXX] = 0; -#endif -} - -/* Compare a and b. Return 1 for a>b, -1 for a=0; i--) - { - gt |= ((b[i]-a[i]) >> BASEBITS_XXX) & eq; - eq &= ((b[i]^a[i])-1) >> BASEBITS_XXX; - } - return (int)(gt+gt+eq-1); -} - -int XXX::BIG_dcomp(DBIG a, DBIG b) -{ - int i; - chunk gt=0; chunk eq=1; - for (i = DNLEN_XXX-1; i>=0; i--) - { - gt |= ((b[i]-a[i]) >> BASEBITS_XXX) & eq; - eq &= ((b[i]^a[i])-1) >> BASEBITS_XXX; - } - return (int)(gt+gt+eq-1); -} - -/* return number of bits in a */ -/* SU= 8 */ -int XXX::BIG_nbits(BIG a) -{ - int bts, k = NLEN_XXX - 1; - BIG t; - chunk c; - BIG_copy(t, a); - BIG_norm(t); - while (k >= 0 && t[k] == 0) k--; - if (k < 0) return 0; - bts = BASEBITS_XXX * k; - c = t[k]; - while (c != 0) - { - c /= 2; - bts++; - } - return bts; -} - -/* SU= 8, Calculate number of bits in a DBIG - output normalised */ -int XXX::BIG_dnbits(DBIG a) -{ - int bts, k = DNLEN_XXX - 1; - DBIG t; - chunk c; - BIG_dcopy(t, a); - BIG_dnorm(t); - while (k >= 0 && t[k] == 0) k--; - if (k < 0) return 0; - bts = BASEBITS_XXX * k; - c = t[k]; - while (c != 0) - { - c /= 2; - bts++; - } - return bts; -} - -// Set b=b mod m in constant time (if bd is known at compile time) -// bd is Max number of bits in b - Actual number of bits in m -void XXX::BIG_ctmod(BIG b, BIG m, int bd) -{ - int k=bd; - BIG r,c; - BIG_copy(c,m); - BIG_norm(b); - - BIG_shl(c,k); - while (k>=0) - { - BIG_sub(r, b, c); - BIG_norm(r); - BIG_cmove(b, r, 1 - ((r[NLEN_XXX - 1] >> (CHUNK - 1)) & 1)); - BIG_fshr(c, 1); - k--; - } -} - -/* Set b=b mod m */ -/* SU= 16 */ -void XXX::BIG_mod(BIG b, BIG m) -{ - int k=BIG_nbits(b)-BIG_nbits(m); - if (k<0) k=0; - BIG_ctmod(b,m,k); -/* - int k = 0; - BIG r; - BIG c; - BIG_copy(c, m); - - BIG_norm(b); - if (BIG_comp(b, c) < 0) - return; - do - { - BIG_fshl(c, 1); - k++; - } - while (BIG_comp(b, c) >= 0); - - while (k > 0) - { - BIG_fshr(c, 1); - -// constant time... - BIG_sub(r, b, c); - BIG_norm(r); - BIG_cmove(b, r, 1 - ((r[NLEN_XXX - 1] >> (CHUNK - 1)) & 1)); - k--; - } */ -} - - -// Set a=b mod m in constant time (if bd is known at compile time) -// bd is Max number of bits in b - Actual number of bits in m -void XXX::BIG_ctdmod(BIG a, DBIG b, BIG m, int bd) -{ - int k=bd; - DBIG c,r; - BIG_dscopy(c,m); - BIG_dnorm(b); - - BIG_dshl(c,k); - while (k>=0) - { - BIG_dsub(r, b, c); - BIG_dnorm(r); - BIG_dcmove(b, r, 1 - ((r[DNLEN_XXX - 1] >> (CHUNK - 1)) & 1)); - BIG_dshr(c, 1); - k--; - } - BIG_sdcopy(a,b); -} - -/* Set a=b mod c, b is destroyed. Slow but rarely used. */ -/* SU= 96 */ -void XXX::BIG_dmod(BIG a, DBIG b, BIG m) -{ - int k=BIG_dnbits(b)-BIG_nbits(m); - if (k<0) k=0; - BIG_ctdmod(a,b,m,k); - -/* - int k = 0; - DBIG c, r; - BIG_dnorm(b); - BIG_dscopy(c,m); - - if (BIG_dcomp(b, c) < 0) - { - BIG_sdcopy(a, b); - return; - } - - do - { - BIG_dshl(c, 1); - k++; - } - while (BIG_dcomp(b, c) >= 0); - - while (k > 0) - { - BIG_dshr(c, 1); -// constant time... - BIG_dsub(r, b, c); - BIG_dnorm(r); - BIG_dcmove(b, r, 1 - ((r[DNLEN_XXX - 1] >> (CHUNK - 1)) & 1)); - - k--; - } - BIG_sdcopy(a, b); */ -} - -// a=b/m in constant time (if bd is known at compile time) -// bd is Max number of bits in b - Actual number of bits in m -void XXX::BIG_ctddiv(BIG a,DBIG b,BIG m,int bd) -{ - int d,k=bd; - DBIG c,dr; - BIG e,r; - BIG_dscopy(c,m); - BIG_dnorm(b); - - BIG_zero(a); - BIG_zero(e); - BIG_inc(e, 1); - - BIG_shl(e,k); - BIG_dshl(c,k); - - while (k >= 0) - { - BIG_dsub(dr, b, c); - BIG_dnorm(dr); - d = 1 - ((dr[DNLEN_XXX - 1] >> (CHUNK - 1)) & 1); - BIG_dcmove(b, dr, d); - - BIG_add(r, a, e); - BIG_norm(r); - BIG_cmove(a, r, d); - - BIG_dshr(c, 1); - BIG_fshr(e, 1); - k--; - } -} - -/* Set a=b/c, b is destroyed. Slow but rarely used. */ -/* SU= 136 */ -void XXX::BIG_ddiv(BIG a, DBIG b, BIG m) -{ - int k=BIG_dnbits(b)-BIG_nbits(m); - if (k<0) k=0; - BIG_ctddiv(a,b,m,k); -/* - int d, k = 0; - DBIG c, dr; - BIG e, r; - BIG_dnorm(b); - BIG_dscopy(c,m); - - BIG_zero(a); - BIG_zero(e); - BIG_inc(e, 1); - - while (BIG_dcomp(b, c) >= 0) - { - BIG_fshl(e, 1); - BIG_dshl(c, 1); - k++; - } - - while (k > 0) - { - BIG_dshr(c, 1); - BIG_fshr(e, 1); - - BIG_dsub(dr, b, c); - BIG_dnorm(dr); - d = 1 - ((dr[DNLEN_XXX - 1] >> (CHUNK - 1)) & 1); - BIG_dcmove(b, dr, d); - - BIG_add(r, a, e); - BIG_norm(r); - BIG_cmove(a, r, d); - - k--; - } */ -} - -// a=a/m in constant time (if bd is known at compile time) -// bd is Max number of bits in b - Actual number of bits in m -void XXX::BIG_ctsdiv(BIG b,BIG m,int bd) -{ - int d, k=bd; - BIG e,a,r,c; - BIG_norm(b); - BIG_copy(a,b); - BIG_copy(c,m); - BIG_zero(b); - BIG_zero(e); - BIG_inc(e, 1); - - BIG_shl(c,k); - BIG_shl(e,k); - - while (k >= 0) - { - BIG_sub(r, a, c); - BIG_norm(r); - d = 1 - ((r[NLEN_XXX - 1] >> (CHUNK - 1)) & 1); - BIG_cmove(a, r, d); - - BIG_add(r, b, e); - BIG_norm(r); - BIG_cmove(b, r, d); - - BIG_fshr(c, 1); - BIG_fshr(e, 1); - - k--; - } -} - -void XXX::BIG_sdiv(BIG b, BIG m) -{ - int k=BIG_nbits(b)-BIG_nbits(m); - if (k<0) k=0; - BIG_ctsdiv(b,m,k); -/* - int d, k = 0; - BIG c, e, a, r; - BIG_norm(b); - BIG_copy(a,b); - BIG_copy(c, m); - - BIG_zero(b); - BIG_zero(e); - BIG_inc(e, 1); - - while (BIG_comp(a, c) >= 0) - { - BIG_fshl(e, 1); - BIG_fshl(c, 1); - k++; - } - - while (k > 0) - { - BIG_fshr(c, 1); - BIG_fshr(e, 1); - - BIG_sub(r, a, c); - BIG_norm(r); - d = 1 - ((r[NLEN_XXX - 1] >> (CHUNK - 1)) & 1); - BIG_cmove(a, r, d); - - BIG_add(r, b, e); - BIG_norm(r); - BIG_cmove(b, r, d); - k--; - } */ -} - -/* return LSB of a */ -int XXX::BIG_parity(BIG a) -{ - return a[0] % 2; -} - -/* return n-th bit of a */ -/* SU= 16 */ -int XXX::BIG_bit(BIG a, int n) -{ - return (int)((a[n / BASEBITS_XXX] & ((chunk)1 << (n % BASEBITS_XXX))) >> (n%BASEBITS_XXX)); -} - -/* return last n bits of a, where n is small < BASEBITS_XXX */ -/* SU= 16 */ -int XXX::BIG_lastbits(BIG a, int n) -{ - int msk = (1 << n) - 1; - BIG_norm(a); - return ((int)a[0])&msk; -} - -/* get 8*MODBYTES_XXX size random number */ -void XXX::BIG_random(BIG m, csprng *rng) -{ - int i, b, j = 0, r = 0; - int len = 8 * MODBYTES_XXX; - - BIG_zero(m); - /* generate random BIG */ - for (i = 0; i < len; i++) - { - if (j == 0) r = RAND_byte(rng); - else r >>= 1; - b = r & 1; - BIG_shl(m, 1); - m[0] += b; - j++; - j &= 7; - } - -#ifdef DEBUG_NORM - m[MPV_XXX] = 1; m[MNV_XXX] = 0; -#endif -} - -/* get random BIG from rng, modulo q. Done one bit at a time, so its portable */ - -extern int NFILLPOOL; - -void XXX::BIG_randomnum(BIG m, BIG q, csprng *rng) -{ - int i, b, j = 0, r = 0; - int n=2 * BIG_nbits(q); - DBIG d; - BIG_dzero(d); - - /* generate random DBIG */ - for (i = 0; i < n; i++) - { - if (j == 0) r = RAND_byte(rng); - else r >>= 1; - b = r & 1; - BIG_dshl(d, 1); - d[0] += b; - j++; - j &= 7; - } - /* reduce modulo a BIG. Removes bias */ - BIG_dmod(m, d, q); -#ifdef DEBUG_NORM - m[MPV_XXX] = 1; m[MNV_XXX] = 0; -#endif -} - -/* create randum BIG less than r and less than trunc bits */ -void XXX::BIG_randtrunc(BIG s, BIG r, int trunc, csprng *rng) -{ - BIG_randomnum(s, r, rng); - if (BIG_nbits(r) > trunc) - BIG_mod2m(s, trunc); -} - -/* Set r=a*b mod m */ -/* SU= 96 */ -void XXX::BIG_modmul(BIG r, BIG a1, BIG b1, BIG m) -{ - DBIG d; - BIG a, b; - BIG_copy(a, a1); - BIG_copy(b, b1); - BIG_mod(a, m); - BIG_mod(b, m); - - BIG_mul(d, a, b); - BIG_ctdmod(r, d, m,BIG_nbits(m)); -} - -/* Set a=a*a mod m */ -/* SU= 88 */ -void XXX::BIG_modsqr(BIG r, BIG a1, BIG m) -{ - DBIG d; - BIG a; - BIG_copy(a, a1); - BIG_mod(a, m); - BIG_sqr(d, a); - BIG_ctdmod(r, d, m, BIG_nbits(m)); -} - -/* Set r=-a mod m */ -/* SU= 16 */ -void XXX::BIG_modneg(BIG r, BIG a1, BIG m) -{ - BIG a; - BIG_copy(a, a1); - BIG_mod(a, m); - BIG_sub(r, m, a); BIG_norm(r); -} - -/* Set r=a+b mod m */ -void XXX::BIG_modadd(BIG r, BIG a1, BIG b1, BIG m) -{ - BIG a, b; - BIG_copy(a, a1); - BIG_copy(b, b1); - BIG_mod(a, m); - BIG_mod(b, m); - BIG_add(r,a,b); BIG_norm(r); - BIG_ctmod(r,m,1); -} - -/* Set a=a/b mod m */ -/* SU= 136 */ -void XXX::BIG_moddiv(BIG r, BIG a1, BIG b1, BIG m) -{ - DBIG d; - BIG z; - BIG a, b; - BIG_copy(a, a1); - BIG_copy(b, b1); - BIG_mod(a, m); - BIG_invmodp(z, b, m); - - BIG_mul(d, a, z); - BIG_ctdmod(r, d, m, BIG_nbits(m)); -} - -/* Get jacobi Symbol (a/p). Returns 0, 1 or -1 */ -/* SU= 216 */ -int XXX::BIG_jacobi(BIG a, BIG p) -{ - int n8, k, m = 0; - BIG t, x, n, zilch, one; - BIG_one(one); - BIG_zero(zilch); - if (BIG_parity(p) == 0 || BIG_comp(a, zilch) == 0 || BIG_comp(p, one) <= 0) return 0; - BIG_norm(a); - BIG_copy(x, a); - BIG_copy(n, p); - BIG_mod(x, p); - - while (BIG_comp(n, one) > 0) - { - if (BIG_comp(x, zilch) == 0) return 0; - n8 = BIG_lastbits(n, 3); - k = 0; - while (BIG_parity(x) == 0) - { - k++; - BIG_shr(x, 1); - } - if (k % 2 == 1) m += (n8 * n8 - 1) / 8; - m += (n8 - 1) * (BIG_lastbits(x, 2) - 1) / 4; - BIG_copy(t, n); - - BIG_mod(t, x); - BIG_copy(n, x); - BIG_copy(x, t); - m %= 2; - - } - if (m == 0) return 1; - else return -1; -} - -/* - -int XXX::step1(BIG u,BIG x,BIG p) -{ - int k=0; - BIG t; - while (BIG_bit(u,k)==0) - { - BIG_add(t,x,p); - BIG_cmove(x,t,BIG_parity(x)); - BIG_norm(x); - BIG_fshr(x,1); - k++; - } - return k; -} - -void XXX::step2(BIG xf,BIG xs,BIG p) -{ - BIG t; - BIG_add(t,xf,p); - BIG_cmove(xf,t,(BIG_comp(xf,xs)>>1)&1); // move if x1> 1) & 1; - t1 += c; - t1 &= 1; - t1 = 2 - t1; - t1 <<= 1; - U = t1 + 1; - -// i=2 - b = a & 3; - t1 = U * b; - t1 >>= 2; - c = (a >> 2) & 3; - t2 = (U * c) & 3; - t1 += t2; - t1 *= U; - t1 &= 3; - t1 = 4 - t1; - t1 <<= 2; - U += t1; - -// i=4 - b = a & 15; - t1 = U * b; - t1 >>= 4; - c = (a >> 4) & 15; - t2 = (U * c) & 15; - t1 += t2; - t1 *= U; - t1 &= 15; - t1 = 16 - t1; - t1 <<= 4; - U += t1; - - return U; -} - -/* a=1/a mod 2^BIGBITS_XXX. This is very fast! */ -void XXX::BIG_invmod2m(BIG a) -{ - int i; - BIG U, t1, b, c; - BIG_zero(U); - BIG_inc(U, invmod256(BIG_lastbits(a, 8))); - for (i = 8; i < BIGBITS_XXX; i <<= 1) - { - BIG_norm(U); - BIG_copy(b, a); - BIG_mod2m(b, i); // bottom i bits of a - - BIG_smul(t1, U, b); - BIG_shr(t1, i); // top i bits of U*b - - BIG_copy(c, a); - BIG_shr(c, i); - BIG_mod2m(c, i); // top i bits of a - - BIG_smul(b, U, c); - BIG_mod2m(b, i); // bottom i bits of U*c - - BIG_add(t1, t1, b); - BIG_norm(t1); - BIG_smul(b, t1, U); - BIG_copy(t1, b); // (t1+b)*U - BIG_mod2m(t1, i); // bottom i bits of (t1+b)*U - - BIG_one(b); - BIG_shl(b, i); - BIG_sub(t1, b, t1); - BIG_norm(t1); - - BIG_shl(t1, i); - - BIG_add(U, U, t1); - } - BIG_copy(a, U); - BIG_norm(a); - BIG_mod2m(a, BIGBITS_XXX); -} - -// Set r=1/a mod p. Binary method -// NOTE: This function is NOT side-channel safe -// If a is a secret then ALWAYS calculate 1/a = m*(1/am) mod p -// where m is a random masking value -void XXX::BIG_invmodp(BIG r, BIG a, BIG p) -{ - BIG u, v, x1, x2, t, one; - int par,s; - - BIG_mod(a, p); - if (BIG_iszilch(a)) - { - BIG_zero(r); - return; - } - - BIG_copy(u, a); - BIG_copy(v, p); - BIG_one(one); - BIG_copy(x1, one); - BIG_zero(x2); - - while (BIG_comp(u, one) != 0 && BIG_comp(v, one) != 0) - { - while (BIG_parity(u) == 0) - { - BIG_fshr(u, 1); - BIG_add(t,x1,p); - BIG_cmove(x1,t,BIG_parity(x1)); - BIG_norm(x1); - BIG_fshr(x1,1); - } - while (BIG_parity(v) == 0) - { - BIG_fshr(v, 1); - BIG_add(t,x2,p); - BIG_cmove(x2,t,BIG_parity(x2)); - BIG_norm(x2); - BIG_fshr(x2,1); - } - if (BIG_comp(u, v) >= 0) - { - BIG_sub(u, u, v); - BIG_norm(u); - BIG_add(t,x1,p); - BIG_cmove(x1,t,(BIG_comp(x1,x2)>>1)&1); // move if x1>1)&1); // move if x2 -#include -#include -#include "bls_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#ifndef CORE_ARDUINO -static FP4 G2_TAB[G2_TABLE_ZZZ]; // space for precomputation on fixed G2 parameter -#endif - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* output u[i] \in F_p */ -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ -static void hash_to_field(int hash,int hlen,FP *u,octet *DST,octet *M, int ctr) -{ - int i,j,L,nbq; - BIG q,w; - DBIG dx; - char okm[256],fd[128]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - nbq=BIG_nbits(q); - L=CEIL(nbq+CURVE_SECURITY_ZZZ,8); - - XMD_Expand(hash,hlen,&OKM,L*ctr,DST,M); - for (i=0;ival, s); - S->len = MODBYTES_XXX; - -// SkToPk - - PAIR_G2mul(&G, s); - ECP2_toOctet(W, &G, true); - return BLS_OK; -} - - -/* Sign message M using private key S to produce signature SIG */ - -int ZZZ::BLS_CORE_SIGN(octet *SIG, octet *M, octet *S) -{ - BIG s; - ECP D; - BLS_HASH_TO_POINT(&D, M); - BIG_fromBytes(s, S->val); - PAIR_G1mul(&D, s); - ECP_toOctet(SIG, &D, true); /* compress output */ - return BLS_OK; -} - -/* Verify signature given message M, the signature SIG, and the public key W */ -int ZZZ::BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W) -{ - FP12 v; - ECP2 G, PK; - ECP D, HM; - BLS_HASH_TO_POINT(&HM, M); - - ECP_fromOctet(&D, SIG); - if (!PAIR_G1member(&D)) return BLS_FAIL; - ECP_neg(&D); - - ECP2_fromOctet(&PK, W); - if (!PAIR_G2member(&PK)) return BLS_FAIL; - -// Use multi-pairing mechanism and precomputation on G2 -#ifndef CORE_ARDUINO - FP12 r[ATE_BITS_ZZZ]; // space for accumulated line functions - - PAIR_initmp(r); - PAIR_another_pc(r, G2_TAB, &D); - PAIR_another(r, &PK, &HM); - PAIR_miller(&v, r); -#else -//.. or alternatively just - if (!ECP2_generator(&G)) return BLS_FAIL; - PAIR_double_ate(&v, &G, &D, &PK, &HM); -#endif - PAIR_fexp(&v); - - if (FP12_isunity(&v)) return BLS_OK; - return BLS_FAIL; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192.cpp deleted file mode 100644 index e9c48ed..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Boneh-Lynn-Shacham signature 192-bit API */ - -/* Loosely (for now) following https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-02 */ - -// Minimal-signature-size variant - - -#include -#include -#include -#include "bls192_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#ifndef CORE_ARDUINO -static FP8 G2_TAB[G2_TABLE_ZZZ]; // space for precomputation on fixed G2 parameter -#endif - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* output u[i] \in F_p */ -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ -static void hash_to_field(int hash,int hlen,FP *u,octet *DST,octet *M, int ctr) -{ - int i,j,L,nbq; - BIG q,w; - DBIG dx; - char okm[256],fd[128]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - nbq=BIG_nbits(q); - L=CEIL(nbq+CURVE_SECURITY_ZZZ,8); - - XMD_Expand(hash,hlen,&OKM,L*ctr,DST,M); - for (i=0;ival, s); - S->len = MODBYTES_XXX; - -// SkToPk - - PAIR_G2mul(&G, s); - ECP4_toOctet(W, &G, true); - return BLS_OK; -} - - -/* Sign message m using private key S to produce signature SIG */ - -int ZZZ::BLS_CORE_SIGN(octet *SIG, octet *M, octet *S) -{ - BIG s; - ECP D; - BLS_HASH_TO_POINT(&D, M); - BIG_fromBytes(s, S->val); - PAIR_G1mul(&D, s); - ECP_toOctet(SIG, &D, true); /* compress output */ - return BLS_OK; -} - -/* Verify signature given message M, the signature SIG, and the public key W */ -int ZZZ::BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W) -{ - FP24 v; - ECP4 G, PK; - ECP D, HM; - BLS_HASH_TO_POINT(&HM, M); - - ECP_fromOctet(&D, SIG); - if (!PAIR_G1member(&D)) return BLS_FAIL; - ECP_neg(&D); - - ECP4_fromOctet(&PK, W); - if (!PAIR_G2member(&PK)) return BLS_FAIL; - -// Use new multi-pairing mechanism -#ifndef CORE_ARDUINO - FP24 r[ATE_BITS_ZZZ]; - - PAIR_initmp(r); - PAIR_another_pc(r, G2_TAB, &D); - PAIR_another(r, &PK, &HM); - PAIR_miller(&v, r); -#else -//.. or alternatively - if (!ECP4_generator(&G)) return BLS_FAIL; - PAIR_double_ate(&v, &G, &D, &PK, &HM); -#endif - PAIR_fexp(&v); - - if (FP24_isunity(&v)) return BLS_OK; - return BLS_FAIL; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256.cpp deleted file mode 100644 index ba36355..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Boneh-Lynn-Shacham signature 256-bit API */ - -/* Loosely (for now) following https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-02 */ - -// Minimal-signature-size variant - -#include -#include -#include -#include "bls256_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#ifndef CORE_ARDUINO -static FP16 G2_TAB[G2_TABLE_ZZZ]; // space for precomputation on fixed G2 parameter -#endif - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* output u[i] \in F_p */ -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ -static void hash_to_field(int hash,int hlen,FP *u,octet *DST,octet *M, int ctr) -{ - int i,j,L,nbq; - BIG q,w; - DBIG dx; - char okm[256],fd[128]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - nbq=BIG_nbits(q); - L=CEIL(nbq+CURVE_SECURITY_ZZZ,8); - - XMD_Expand(hash,hlen,&OKM,L*ctr,DST,M); - for (i=0;ival, s); - S->len = MODBYTES_XXX; - -// SkToPk - - PAIR_G2mul(&G, s); - ECP8_toOctet(W, &G, true); - return BLS_OK; -} -/* Sign message m using private key S to produce signature SIG */ - -int ZZZ::BLS_CORE_SIGN(octet *SIG, octet *M, octet *S) -{ - BIG s; - ECP D; - BLS_HASH_TO_POINT(&D, M); - BIG_fromBytes(s, S->val); - PAIR_G1mul(&D, s); - ECP_toOctet(SIG, &D, true); /* compress output */ - return BLS_OK; -} - -/* Verify signature of message M, the signature SIG, and the public key W */ -int ZZZ::BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W) -{ - FP48 v; - ECP8 G, PK; - ECP D, HM; - BLS_HASH_TO_POINT(&HM, M); - - ECP_fromOctet(&D, SIG); - if (!PAIR_G1member(&D)) return BLS_FAIL; - ECP_neg(&D); - - ECP8_fromOctet(&PK, W); - if (!PAIR_G2member(&PK)) return BLS_FAIL; - -// Use new multi-pairing mechanism -#ifndef CORE_ARDUINO - FP48 r[ATE_BITS_ZZZ]; - PAIR_initmp(r); - PAIR_another_pc(r, G2_TAB, &D); - PAIR_another(r, &PK, &HM); - PAIR_miller(&v, r); -#else -//.. or alternatively - if (!ECP8_generator(&G)) return BLS_FAIL; - PAIR_double_ate(&v, &G, &D, &PK, &HM); -#endif - - PAIR_fexp(&v); - if (FP48_isunity(&v)) return BLS_OK; - return BLS_FAIL; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev.cpp deleted file mode 100644 index 0f449f5..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Boneh-Lynn-Shacham signature 128-bit API */ - -/* Loosely (for now) following https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-00 */ - -// Minimal-pubkey-size variant - -#include -#include -#include -#include "bls_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* output u[i] \in F_p */ -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ -static void hash_to_field(int hash,int hlen,FP2 *u,octet *DST,octet *M, int ctr) -{ - int i,j,k,L,nbq; - BIG q,a[2]; - DBIG dx; - char okm[512],fd[128]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - nbq=BIG_nbits(q); - L=CEIL(nbq+CURVE_SECURITY_ZZZ,8); - - XMD_Expand(hash,hlen,&OKM,L*ctr*2,DST,M); - for (i=0;ival, s); - S->len = MODBYTES_XXX; - -// SkToPk - - PAIR_G1mul(&G, s); - ECP_toOctet(W, &G, true); - return BLS_OK; -} - -/* Sign message M using private key S to produce signature SIG */ - -int ZZZ::BLS_CORE_SIGN(octet *SIG, octet *M, octet *S) -{ - BIG s; - ECP2 D; - BLS_HASH_TO_POINT(&D, M); - BIG_fromBytes(s, S->val); - PAIR_G2mul(&D, s); - - ECP2_toOctet(SIG, &D, true); /* compress output */ - return BLS_OK; -} - -/* Verify signature given message m, the signature SIG, and the public key W */ -int ZZZ::BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W) -{ - FP12 v; - ECP G, PK; - ECP2 D, HM; - BLS_HASH_TO_POINT(&HM, M); - - ECP2_fromOctet(&D, SIG); - if (!PAIR_G2member(&D)) return BLS_FAIL; - ECP2_neg(&D); - - ECP_fromOctet(&PK, W); - - if (!ECP_generator(&G)) return BLS_FAIL; - PAIR_double_ate(&v, &D, &G, &HM, &PK); - - PAIR_fexp(&v); - - if (FP12_isunity(&v)) return BLS_OK; - return BLS_FAIL; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev192.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev192.cpp deleted file mode 100644 index 1a4cd90..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev192.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Boneh-Lynn-Shacham signature 192-bit API */ - -/* Loosely (for now) following https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-00 */ - -// Minimal-pubkey-size variant - -#include -#include -#include -#include "bls192_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* output u[i] \in F_p */ -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ -static void hash_to_field(int hash,int hlen,FP4 *u,octet *DST,octet *M, int ctr) -{ - int i,j,k,L,nbq; - BIG q,a[4]; - FP2 c,d; - DBIG dx; - char okm[1024],fd[128]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - nbq=BIG_nbits(q); - L=CEIL(nbq+CURVE_SECURITY_ZZZ,8); - - XMD_Expand(hash,hlen,&OKM,L*ctr*4,DST,M); - for (i=0;ival, s); - S->len = MODBYTES_XXX; - -// SkToPk - - PAIR_G1mul(&G, s); - ECP_toOctet(W, &G, true); - return BLS_OK; -} - -/* Sign message M using private key S to produce signature SIG */ - -int ZZZ::BLS_CORE_SIGN(octet *SIG, octet *M, octet *S) -{ - BIG s; - ECP4 D; - BLS_HASH_TO_POINT(&D, M); - BIG_fromBytes(s, S->val); - PAIR_G2mul(&D, s); - - ECP4_toOctet(SIG, &D, true); /* compress output */ - return BLS_OK; -} - -/* Verify signature given message m, the signature SIG, and the public key W */ -int ZZZ::BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W) -{ - FP24 v; - ECP G, PK; - ECP4 D, HM; - - BLS_HASH_TO_POINT(&HM, M); - - ECP4_fromOctet(&D, SIG); - if (!PAIR_G2member(&D)) return BLS_FAIL; - ECP4_neg(&D); - - ECP_fromOctet(&PK, W); - if (!ECP_generator(&G)) return BLS_FAIL; - PAIR_double_ate(&v, &D, &G, &HM, &PK); - - PAIR_fexp(&v); - if (FP24_isunity(&v)) return BLS_OK; - return BLS_FAIL; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev256.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev256.cpp deleted file mode 100644 index a6a2f59..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/blsrev256.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Boneh-Lynn-Shacham signature 256-bit API */ - -/* Loosely (for now) following https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-00 */ - -// Minimal-pubkey-size variant - -#include -#include -#include -#include "bls256_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* output u[i] \in F_p */ -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ -static void hash_to_field(int hash,int hlen,FP8 *u,octet *DST,octet *M, int ctr) -{ - int i,j,k,L,nbq; - BIG q,a[8]; - FP2 c,d; - FP4 e,f; - DBIG dx; - char okm[2048],fd[128]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - nbq=BIG_nbits(q); - L=CEIL(nbq+CURVE_SECURITY_ZZZ,8); - - XMD_Expand(hash,hlen,&OKM,L*ctr*8,DST,M); - for (i=0;ival, s); - S->len = MODBYTES_XXX; - -// SkToPk - - PAIR_G1mul(&G, s); - ECP_toOctet(W, &G, true); - return BLS_OK; -} - -/* Sign message M using private key S to produce signature SIG */ - -int ZZZ::BLS_CORE_SIGN(octet *SIG, octet *M, octet *S) -{ - BIG s; - ECP8 D; - BLS_HASH_TO_POINT(&D, M); - BIG_fromBytes(s, S->val); - PAIR_G2mul(&D, s); - ECP8_toOctet(SIG, &D, true); /* compress output */ - return BLS_OK; -} - -/* Verify signature of message m, the signature SIG, and the public key W */ -int ZZZ::BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W) -{ - FP48 v; - ECP G, PK; - ECP8 D, HM; - BLS_HASH_TO_POINT(&HM, M); - - ECP8_fromOctet(&D, SIG); - if (!PAIR_G2member(&D)) return BLS_FAIL; - ECP8_neg(&D); - - ECP_fromOctet(&PK, W); - - if (!ECP_generator(&G)) return BLS_FAIL; - PAIR_double_ate(&v, &D, &G, &HM, &PK); - - PAIR_fexp(&v); - if (FP48_isunity(&v)) return BLS_OK; - return BLS_FAIL; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config16.py b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config16.py deleted file mode 100644 index 94f2564..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config16.py +++ /dev/null @@ -1,744 +0,0 @@ -#!/usr/bin/env python3 - -# -# Copyright (c) 2012-2020 MIRACL UK Ltd. -# -# This file is part of MIRACL Core -# (see https://github.com/miracl/core). -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import os -import sys -import shutil -import fnmatch - -testing=False -keep_querying=True - -if len(sys.argv)==2 : - if sys.argv[1]=="test": - testing=True - -my_compiler = "g++" -generated_files = [] - -def copy_keep_file(file, target): - shutil.copyfile(file, target) - -def copy_temp_file(file, target): - shutil.copyfile(file, target) - generated_files.append(target) - -def delete_file(expression): - for root, dirs, files in os.walk(os.path.abspath(os.path.dirname(__file__))): - for name in files: - if fnmatch.fnmatch(name, expression): - os.remove(os.path.join(root, name)) - -class miracl_compile: - def compile_file(optim, file): - print("Processing " + file + "..", end = "", flush=True) - if optim != 0: - flags = " -O%d -c %s" % (optim, file) - else: - flags = " -c %s" % (file) - os.system(my_compiler + flags) - print(". [DONE]") - - def compile_binary(optim, file, lib, bin): - print("Processing " + file + "..", end = "", flush=True) - if sys.platform.startswith("win"): - bin += ".exe" - if optim != 0: - flags = " -O%d %s %s -o %s" % (optim, file, lib, bin) - else: - flags = " %s %s -o %s" % (file, lib, bin) - os.system(my_compiler + flags) - print(". [DONE]") - -def inline_mul1(N,base) : - str="" - str+="\tt=(dchunk)a[0]*b[0]; c[0]=(chunk)t & BMASK_XXX; t=t>>BASEBITS_XXX;\n" - - for i in range(1,N) : - k=0; - str+="\tt=t" - while (k<=i) : - str+="+(dchunk)a[{}]*b[{}]".format(k,i-k) - k+=1 - str+="; c[{}]=(chunk)t & BMASK_XXX; ".format(i) - str+="t=t>>BASEBITS_XXX;\n" - - for i in range(N,2*N-1) : - k=i-(N-1) - str+="\tt=t" - while (k<=N-1) : - str+="+(dchunk)a[{}]*b[{}]".format(k,i-k) - k+=1 - str+="; c[{}]=(chunk)t & BMASK_XXX; ".format(i) - str+="t=t>>BASEBITS_XXX;\n" - - str+="\tc[{}]=(chunk)t;\n".format(2*N-1) - - return str.replace("XXX",base) - -def inline_mul2(N,base) : - str="" - for i in range(0,N) : - str+="\td[{}]=(dchunk)a[{}]*b[{}];\n".format(i, i, i) - str+="\n\ts=d[0];\n\tt = s; c[0]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX;\n" - for k in range(1,N) : - str+="\ts+=d[{}]; t=co+s ".format(k) - for i in range(k,int(k/2),-1) : - str+="+(dchunk)(a[{}]-a[{}])*(b[{}]-b[{}])".format(i,k - i, k - i, i) - str+="; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - str+="\n" - for k in range(N,2 * N - 1) : - str+="\ts-=d[{}]; t=co+s ".format(k - N) - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)(a[{}]-a[{}])*(b[{}]-b[{}])".format(i, k - i, k - i, i) - str+="; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - - str+="\tc[{}]=(chunk)co;\n".format(2 * N - 1) - return str.replace("XXX",base) - -def inline_sqr(N,base) : - str="" - str+="\n\tt=(dchunk)a[0]*a[0]; c[0]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX;\n" - - for k in range(1,N) : - str+="\tt= " - for i in range(k,int(k/2),-1) : - str+="+(dchunk)a[{}]*a[{}]".format(i, k - i) - str+="; t+=t; t+=co;" - if k % 2 == 0 : - str+=" t+=(dchunk)a[{}]*a[{}];".format(int(k/2), int(k/2)) - str+=" c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - str+="\n" - - for k in range(N,2*N-2) : - str+="\tt= " - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)a[{}]*a[{}]".format(i, k - i) - str+="; t+=t; t+=co;" - if k % 2 == 0 : - str+=" t+=(dchunk)a[{}]*a[{}];".format(int(k/2),int(k/2)) - str+=" c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - - str+="\tt=co; t+=(dchunk)a[{}]*a[{}]; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n ".format(N-1,N-1,2*N-2) - - str+="\tc[{}]=(chunk)co;\n".format(2 * N - 1) - return str.replace("XXX",base) - -def inline_redc2(N,base) : - str="" - str+="\tt=d[0]; v[0]=((chunk)t*MC)&BMASK_XXX; t+=(dchunk)v[0]*md[0]; s=0; c=(t>>BASEBITS_XXX);\n\n" - - for k in range(1,N) : - str+="\tt=d[{}]+c+s+(dchunk)v[0]*md[{}]".format(k, k) - for i in range(k-1,int(k/2),-1) : - str+="+(dchunk)(v[{}]-v[{}])*(md[{}]-md[{}])".format(k - i, i, i, k - i) - str+="; v[{}]=((chunk)t*MC)&BMASK_XXX; t+=(dchunk)v[{}]*md[0]; ".format(k, k) - str+=" dd[{}]=(dchunk)v[{}]*md[{}]; s+=dd[{}]; c=(t>>BASEBITS_XXX); \n".format(k, k, k, k) - - str+="\n" - for k in range(N,2*N-1) : - str+="\tt=d[{}]+c+s".format(k) - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)(v[{}]-v[{}])*(md[{}]-md[{}])".format(k - i, i, i, k - i) - str+="; a[{}]=(chunk)t&BMASK_XXX; s-=dd[{}]; c=(t>>BASEBITS_XXX); \n".format(k - N, k - N + 1) - - str+="\ta[{}]=d[{}]+((chunk)c&BMASK_XXX);\n".format(N-1,2*N-1) - return str.replace("XXX",base) - -def inline_redc1(N,base) : - str="" - - str+="\tt = d[0];\n" - str+="\tv[0] = ((chunk)t * MC)&BMASK_XXX;\n" - str+="\tt += (dchunk)v[0] * md[0];\n" - str+="\tt = (t >> BASEBITS_XXX) + d[1];\n" - - for i in range(1,N) : - k=1 - str+="\tt += (dchunk)v[0] * md[{}] ".format(i) - while k 0 : - replace(fnameh,"@TW@","POSITOWER") - else : - replace(fnameh,"@TW@","NEGATOWER") - - ib=int(base) - inb=int(nb) - inbt=int(nbt) - nlen=(1+((8*inb-1)//ib)) - sh=ib*nlen-inbt - - if sh > 6 : - sh=6 - replace(fnameh,"@SH@",str(sh)) - - fnameh="config_curve_"+tc+".h" - copy_keep_file("config_curve.h", fnameh) - - replace(fnameh,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"@CT@",ct) - replace(fnameh,"@CA@",ca) - replace(fnameh,"@PF@",pf) - - replace(fnameh,"@ST@",stw) - replace(fnameh,"@SX@",sx) - replace(fnameh,"@CS@",cs) - replace(fnameh,"@AB@",ab) - replace(fnameh,"@G2@",g2) - - replace(fnameh,"@HC@",hc) - replace(fnameh,"@HC2@",hc2) - - fnamec="big_"+bd+".cpp" - fnameh="big_"+bd+".h" - - copy_temp_file("big.cpp", fnamec) - copy_keep_file("big.h", fnameh) - - replace(fnamec,"XXX",bd) - replace(fnameh,"XXX",bd) - - replace(fnamec,"INLINE_MUL1",inline_mul1(nlen,bd)) - replace(fnamec,"INLINE_MUL2",inline_mul2(nlen,bd)) - replace(fnamec,"INLINE_SQR",inline_sqr(nlen,bd)) - replace(fnamec,"INLINE_REDC1",inline_redc1(nlen,bd)) - replace(fnamec,"INLINE_REDC2",inline_redc2(nlen,bd)) - - miracl_compile.compile_file(3, fnamec) - - fnamec="fp_"+tf+".cpp" - fnameh="fp_"+tf+".h" - - copy_temp_file("fp.cpp", fnamec) - copy_keep_file("fp.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - miracl_compile.compile_file(3, "rom_field_"+tf+".cpp"); - - fnamec="ecp_"+tc+".cpp" - fnameh="ecp_"+tc+".h" - - copy_temp_file("ecp.cpp", fnamec) - copy_keep_file("ecp.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecdh_"+tc+".cpp" - fnameh="ecdh_"+tc+".h" - - copy_temp_file("ecdh.cpp", fnamec) - copy_keep_file("ecdh.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - miracl_compile.compile_file(3, "rom_curve_"+tc+".cpp"); - - if pf != "NOT_PF" : - fnamec="fp2_"+tf+".cpp" - fnameh="fp2_"+tf+".h" - - copy_temp_file("fp2.cpp", fnamec) - copy_keep_file("fp2.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="fp4_"+tf+".cpp" - fnameh="fp4_"+tf+".h" - - copy_temp_file("fp4.cpp", fnamec) - copy_keep_file("fp4.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - fnamec="fp12_"+tf+".cpp" - fnameh="fp12_"+tf+".h" - - copy_temp_file("fp12.cpp", fnamec) - copy_keep_file("fp12.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecp2_"+tc+".cpp" - fnameh="ecp2_"+tc+".h" - - copy_temp_file("ecp2.cpp", fnamec) - copy_keep_file("ecp2.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="pair_"+tc+".cpp" - fnameh="pair_"+tc+".h" - - copy_temp_file("pair.cpp", fnamec) - copy_keep_file("pair.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin_"+tc+".cpp" - fnameh="mpin_"+tc+".h" - - copy_temp_file("mpin.cpp", fnamec) - copy_keep_file("mpin.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls_"+tc+".cpp" - fnameh="bls_"+tc+".h" - - copy_temp_file("bls.cpp", fnamec) - copy_keep_file("bls.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - -replace("arch.h","@WL@","16") - -class miracl_crypto: - np_curves = ( - ( "255", "F25519", "Ed25519", "13", "2", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "-1", "NOT_PF", "", "", "", "", "128"), - ( "256", "F256PME", "NUMS256E", "13", "1", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128"), - ( "160", "SECP160R1", "SECP160R1", "13", "1", "3", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128") - ) - - pf_curves = ( - ( "254", "BN254", "BN254", "13", "1",["-1", "-1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "NEGATIVEX", "71", "66", "128"), - ( "254", "BN254CX", "BN254CX", "13", "1",["-1", "-1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "NEGATIVEX", "76", "66", "128") - ) - - # There are choices here, different ways of getting the same result, but some faster than others - rsa_params = ( - # 256 is slower but may allow reuse of 256-bit BIGs used for elliptic curve - # 512 is faster.. but best is 1024 - ( "256", "RSA2048", "13", "8") - ) - - total_entries = len(np_curves)+len(pf_curves)+len(rsa_params) - - def valid_query(number): - return number >= 0 and number <= miracl_crypto.total_entries - -def interactive_prompt_print(): - index = 1 - print("Elliptic Curves") - for tuple in miracl_crypto.np_curves: - print(str(index) + ".", tuple[2]) - index += 1 - - print("\nPairing-Friendly Elliptic Curves") - for tuple in miracl_crypto.pf_curves: - print(str(index) + ".", tuple[2]) - index += 1 - - print("\nRSA") - # Python interprets the singular RSA entry in a way - # that doesn't allow for nested tuples if there aren't - # more than one entry, the original code has been commented - # out and replaced with a subpar fix - # - # If you are adding more RSA curves, it will error out - # Uncomment the original code if you intend to do so and - # comment out the patch - # - # for tuple in miracl_crypto.rsa_params: - # print(str(index) + ".", "RSA" + str(tuple[1])) - # index += 1 - # ----BEGIN PATCH------------- - print(str(index) + ".", miracl_crypto.rsa_params[1]) - index += 1 - # ----END PATCH-------------- - -def interactive_prompt_exect(index): - index -= 1 # Python internally is zero-indexed - if index < len(miracl_crypto.np_curves): - tuple = miracl_crypto.np_curves[index] - curveset( - tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], - tuple[5], tuple[6], tuple[7], tuple[8], tuple[9], - tuple[10], tuple[11], tuple[12], - tuple[13], tuple[14], tuple[15] - ) - elif index < len(miracl_crypto.np_curves) + len(miracl_crypto.pf_curves): - tuple = miracl_crypto.pf_curves[index-len(miracl_crypto.np_curves)] - curveset( - tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], - tuple[5], tuple[6], tuple[7], tuple[8], tuple[9], - tuple[10], tuple[11], tuple[12], - tuple[13], tuple[14], tuple[15] - ) - else: - # Python interprets the singular RSA entry in a way - # that doesn't allow for nested tuples if there aren't - # more than one entry, the original code has been commented - # out and replaced with a subpar fix - # - # If you are adding more RSA curves, it will error out - # Uncomment the original code if you intend to do so and - # comment out the patch - # - # tuple = miracl_crypto.rsa_params[index-(len(miracl_crypto.np_curves)+len(miracl_crypto.pf_curves))] - # rsaset( - # tuple[0], tuple[1], tuple[2], tuple[3] - # ) - # ----BEGIN PATCH------------- - rsaset( - miracl_crypto.rsa_params[0], miracl_crypto.rsa_params[1], miracl_crypto.rsa_params[2], miracl_crypto.rsa_params[3] - ) - # ----END PATCH-------------- - -def interactive_prompt_input(): - while True: - userInput = input("\nChoose schemes to support (select 0 to finish): ") - try: - return int(userInput) - except: - if (userInput == ''): - return 0 - print("Non-integer input, select values between 1 and " + str(miracl_crypto.total_entries)) - interactive_prompt_input() - -interactive_prompt_print() -while keep_querying and not testing: - query_val = -1 - while not miracl_crypto.valid_query(query_val): - query_val = interactive_prompt_input() - if not miracl_crypto.valid_query(query_val): - print("Number out of range, select values between 1 and " + str(miracl_crypto.total_entries)) - elif query_val == 0: - keep_querying = False - else: - interactive_prompt_exect(query_val) - -if testing: - for i in range(0, miracl_crypto.total_entries): - interactive_prompt_exect(i+1) - -# create library -miracl_compile.compile_file(3, "randapi.cpp") -miracl_compile.compile_file(3, "hash.cpp") -miracl_compile.compile_file(3, "hmac.cpp") -miracl_compile.compile_file(3, "rand.cpp") -miracl_compile.compile_file(3, "oct.cpp") -miracl_compile.compile_file(3, "share.cpp") -miracl_compile.compile_file(3, "aes.cpp") -miracl_compile.compile_file(3, "gcm.cpp") -miracl_compile.compile_file(3, "newhope.cpp") -miracl_compile.compile_file(3, "dilithium.cpp") -miracl_compile.compile_file(3, "kyber.cpp") -miracl_compile.compile_file(3, "x509.cpp") - -if sys.platform.startswith("win") : - os.system("for %i in (*.o) do @echo %~nxi >> f.list") - os.system("ar rc core.a @f.list") - delete_file("f.list") -else : - os.system("ar rc core.a *.o") - -if testing : - miracl_compile.compile_binary(2, "testecc.cpp", "core.a", "testecc") - miracl_compile.compile_binary(2, "testmpin.cpp", "core.a", "testmpin") - miracl_compile.compile_binary(2, "testbls.cpp", "core.a", "testbls") - miracl_compile.compile_binary(2, "benchtest_all.cpp", "core.a", "benchtest_all") - -#clean up -for file in generated_files: - delete_file(file) - -delete_file("*.o") -delete_file("big.*") -delete_file("fp.*") -delete_file("ecp.*") -delete_file("ecdh.*") -delete_file("hpke.*") -delete_file("ff.*") -delete_file("rsa.*") -delete_file("config_big.h") -delete_file("config_field.h") -delete_file("config_curve.h") -delete_file("config_ff.h") -delete_file("fp2.*") -delete_file("fp4.*") -delete_file("fp8.*") -delete_file("fp16.*") -delete_file("share.cpp") -delete_file("x509.cpp") -delete_file("gcm.cpp") -delete_file("hash.cpp") -delete_file("hmac.cpp") -delete_file("aes.cpp") -delete_file("oct.cpp"); -delete_file("newhope.cpp") -delete_file("dilithium.cpp") -delete_file("kyber.cpp") -delete_file("Doxyfile") -delete_file("refman.pdf") -delete_file("readme.md") -delete_file("rand.cpp") -delete_file("randapi.cpp") -delete_file("config*.py") - -delete_file("fp12.*") -delete_file("fp24.*") -delete_file("fp48.*") - -delete_file("ecp2.*") -delete_file("ecp4.*") -delete_file("ecp8.*") - -delete_file("pair.*") -delete_file("mpin.*") -delete_file("bls.*") - -delete_file("pair4.*") -delete_file("mpin192.*") -delete_file("bls192.*") - -delete_file("pair8.*") -delete_file("mpin256.*") -delete_file("bls256.*") - -delete_file("rom_field*.cpp") -delete_file("rom_curve*.cpp") - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config32.py b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config32.py deleted file mode 100644 index 38e83a1..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config32.py +++ /dev/null @@ -1,983 +0,0 @@ -#!/usr/bin/env python3 - -# -# Copyright (c) 2012-2020 MIRACL UK Ltd. -# -# This file is part of MIRACL Core -# (see https://github.com/miracl/core). -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import os -import sys -import shutil -import fnmatch - -testing=False -keep_querying=True - -if len(sys.argv)==2 : - if sys.argv[1]=="test": - testing=True - -my_compiler = "g++" -generated_files = [] - -def copy_keep_file(file, target): - shutil.copyfile(file, target) - -def copy_temp_file(file, target): - shutil.copyfile(file, target) - generated_files.append(target) - -def delete_file(expression): - for root, dirs, files in os.walk(os.path.abspath(os.path.dirname(__file__))): - for name in files: - if fnmatch.fnmatch(name, expression): - os.remove(os.path.join(root, name)) - -class miracl_compile: - def compile_file(optim, file): - print("Processing " + file + "..", end = "", flush=True) - if optim != 0: - flags = " -O%d -c %s" % (optim, file) - else: - flags = " -c %s" % (file) - os.system(my_compiler + flags) - print(". [DONE]") - - def compile_binary(optim, file, lib, bin): - print("Processing " + file + "..", end = "", flush=True) - if sys.platform.startswith("win"): - bin += ".exe" - if optim != 0: - flags = " -O%d %s %s -o %s" % (optim, file, lib, bin) - else: - flags = " %s %s -o %s" % (file, lib, bin) - os.system(my_compiler + flags) - print(". [DONE]") - -def inline_mul1(N,base) : - str="" - str+="\tt=(dchunk)a[0]*b[0]; c[0]=(chunk)t & BMASK_XXX; t=t>>BASEBITS_XXX;\n" - - for i in range(1,N) : - k=0; - str+="\tt=t" - while (k<=i) : - str+="+(dchunk)a[{}]*b[{}]".format(k,i-k) - k+=1 - str+="; c[{}]=(chunk)t & BMASK_XXX; ".format(i) - str+="t=t>>BASEBITS_XXX;\n" - - for i in range(N,2*N-1) : - k=i-(N-1) - str+="\tt=t" - while (k<=N-1) : - str+="+(dchunk)a[{}]*b[{}]".format(k,i-k) - k+=1 - str+="; c[{}]=(chunk)t & BMASK_XXX; ".format(i) - str+="t=t>>BASEBITS_XXX;\n" - - str+="\tc[{}]=(chunk)t;\n".format(2*N-1) - - return str.replace("XXX",base) - -def inline_mul2(N,base) : - str="" - for i in range(0,N) : - str+="\td[{}]=(dchunk)a[{}]*b[{}];\n".format(i, i, i) - str+="\n\ts=d[0];\n\tt = s; c[0]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX;\n" - for k in range(1,N) : - str+="\ts+=d[{}]; t=co+s ".format(k) - for i in range(k,int(k/2),-1) : - str+="+(dchunk)(a[{}]-a[{}])*(b[{}]-b[{}])".format(i,k - i, k - i, i) - str+="; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - str+="\n" - for k in range(N,2 * N - 1) : - str+="\ts-=d[{}]; t=co+s ".format(k - N) - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)(a[{}]-a[{}])*(b[{}]-b[{}])".format(i, k - i, k - i, i) - str+="; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - - str+="\tc[{}]=(chunk)co;\n".format(2 * N - 1) - return str.replace("XXX",base) - -def inline_sqr(N,base) : - str="" - str+="\n\tt=(dchunk)a[0]*a[0]; c[0]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX;\n" - - for k in range(1,N) : - str+="\tt= " - for i in range(k,int(k/2),-1) : - str+="+(dchunk)a[{}]*a[{}]".format(i, k - i) - str+="; t+=t; t+=co;" - if k % 2 == 0 : - str+=" t+=(dchunk)a[{}]*a[{}];".format(int(k/2), int(k/2)) - str+=" c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - str+="\n" - - for k in range(N,2*N-2) : - str+="\tt= " - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)a[{}]*a[{}]".format(i, k - i) - str+="; t+=t; t+=co;" - if k % 2 == 0 : - str+=" t+=(dchunk)a[{}]*a[{}];".format(int(k/2),int(k/2)) - str+=" c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - - str+="\tt=co; t+=(dchunk)a[{}]*a[{}]; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n ".format(N-1,N-1,2*N-2) - - str+="\tc[{}]=(chunk)co;\n".format(2 * N - 1) - return str.replace("XXX",base) - -def inline_redc2(N,base) : - str="" - str+="\tt=d[0]; v[0]=((chunk)t*MC)&BMASK_XXX; t+=(dchunk)v[0]*md[0]; s=0; c=(t>>BASEBITS_XXX);\n\n" - - for k in range(1,N) : - str+="\tt=d[{}]+c+s+(dchunk)v[0]*md[{}]".format(k, k) - for i in range(k-1,int(k/2),-1) : - str+="+(dchunk)(v[{}]-v[{}])*(md[{}]-md[{}])".format(k - i, i, i, k - i) - str+="; v[{}]=((chunk)t*MC)&BMASK_XXX; t+=(dchunk)v[{}]*md[0]; ".format(k, k) - str+=" dd[{}]=(dchunk)v[{}]*md[{}]; s+=dd[{}]; c=(t>>BASEBITS_XXX); \n".format(k, k, k, k) - - str+="\n" - for k in range(N,2*N-1) : - str+="\tt=d[{}]+c+s".format(k) - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)(v[{}]-v[{}])*(md[{}]-md[{}])".format(k - i, i, i, k - i) - str+="; a[{}]=(chunk)t&BMASK_XXX; s-=dd[{}]; c=(t>>BASEBITS_XXX); \n".format(k - N, k - N + 1) - - str+="\ta[{}]=d[{}]+((chunk)c&BMASK_XXX);\n".format(N-1,2*N-1) - return str.replace("XXX",base) - -def inline_redc1(N,base) : - str="" - - str+="\tt = d[0];\n" - str+="\tv[0] = ((chunk)t * MC)&BMASK_XXX;\n" - str+="\tt += (dchunk)v[0] * md[0];\n" - str+="\tt = (t >> BASEBITS_XXX) + d[1];\n" - - for i in range(1,N) : - k=1 - str+="\tt += (dchunk)v[0] * md[{}] ".format(i) - while k 0 : - replace(fnameh,"@TW@","POSITOWER") - else : - replace(fnameh,"@TW@","NEGATOWER") - - ib=int(base) - inb=int(nb) - inbt=int(nbt) - nlen=(1+((8*inb-1)//ib)) - sh=ib*nlen-inbt - - if sh > 14 : - sh=14 - replace(fnameh,"@SH@",str(sh)) - - fnameh="config_curve_"+tc+".h" - copy_keep_file("config_curve.h", fnameh) - - replace(fnameh,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"@CT@",ct) - replace(fnameh,"@CA@",ca) - replace(fnameh,"@PF@",pf) - - replace(fnameh,"@ST@",stw) - replace(fnameh,"@SX@",sx) - replace(fnameh,"@CS@",cs) - replace(fnameh,"@AB@",ab) - replace(fnameh,"@G2@",g2) - - replace(fnameh,"@HC@",hc) - replace(fnameh,"@HC2@",hc2) - - fnamec="big_"+bd+".cpp" - fnameh="big_"+bd+".h" - - copy_temp_file("big.cpp", fnamec) - copy_keep_file("big.h", fnameh) - - replace(fnamec,"XXX",bd) - replace(fnameh,"XXX",bd) - - replace(fnamec,"INLINE_MUL1",inline_mul1(nlen,bd)) - replace(fnamec,"INLINE_MUL2",inline_mul2(nlen,bd)) - replace(fnamec,"INLINE_SQR",inline_sqr(nlen,bd)) - replace(fnamec,"INLINE_REDC1",inline_redc1(nlen,bd)) - replace(fnamec,"INLINE_REDC2",inline_redc2(nlen,bd)) - - miracl_compile.compile_file(3, fnamec) - - fnamec="fp_"+tf+".cpp" - fnameh="fp_"+tf+".h" - - copy_temp_file("fp.cpp", fnamec) - copy_keep_file("fp.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - miracl_compile.compile_file(3, "rom_field_"+tf+".cpp"); - - fnamec="ecp_"+tc+".cpp" - fnameh="ecp_"+tc+".h" - - copy_temp_file("ecp.cpp", fnamec) - copy_keep_file("ecp.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecdh_"+tc+".cpp" - fnameh="ecdh_"+tc+".h" - - copy_temp_file("ecdh.cpp", fnamec) - copy_keep_file("ecdh.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - - fnamec="eddsa_"+tc+".cpp" - fnameh="eddsa_"+tc+".h" - - copy_temp_file("eddsa.cpp", fnamec) - copy_keep_file("eddsa.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - - fnamec="hpke_"+tc+".cpp" - fnameh="hpke_"+tc+".h" - - copy_temp_file("hpke.cpp", fnamec) - copy_keep_file("hpke.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - miracl_compile.compile_file(3, "rom_curve_"+tc+".cpp"); - - if pf != "NOT_PF" : - fnamec="fp2_"+tf+".cpp" - fnameh="fp2_"+tf+".h" - - copy_temp_file("fp2.cpp", fnamec) - copy_keep_file("fp2.h", fnameh) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="fp4_"+tf+".cpp" - fnameh="fp4_"+tf+".h" - - copy_temp_file("fp4.cpp", fnamec) - copy_keep_file("fp4.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - if pf == "BN_CURVE" or pf == "BLS12_CURVE" : - fnamec="fp12_"+tf+".cpp" - fnameh="fp12_"+tf+".h" - - copy_temp_file("fp12.cpp", fnamec) - copy_keep_file("fp12.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecp2_"+tc+".cpp" - fnameh="ecp2_"+tc+".h" - - copy_temp_file("ecp2.cpp", fnamec) - copy_keep_file("ecp2.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="pair_"+tc+".cpp" - fnameh="pair_"+tc+".h" - - copy_temp_file("pair.cpp", fnamec) - copy_keep_file("pair.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin_"+tc+".cpp" - fnameh="mpin_"+tc+".h" - - copy_temp_file("mpin.cpp", fnamec) - copy_keep_file("mpin.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls_"+tc+".cpp" - fnameh="bls_"+tc+".h" - - copy_temp_file("bls.cpp", fnamec) - copy_keep_file("bls.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - if pf == "BLS24_CURVE" : - fnamec="fp8_"+tf+".cpp" - fnameh="fp8_"+tf+".h" - - copy_temp_file("fp8.cpp", fnamec) - copy_keep_file("fp8.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="fp24_"+tf+".cpp" - fnameh="fp24_"+tf+".h" - - copy_temp_file("fp24.cpp", fnamec) - copy_keep_file("fp24.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecp4_"+tc+".cpp" - fnameh="ecp4_"+tc+".h" - - copy_temp_file("ecp4.cpp", fnamec) - copy_keep_file("ecp4.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="pair4_"+tc+".cpp" - fnameh="pair4_"+tc+".h" - - copy_temp_file("pair4.cpp", fnamec) - copy_keep_file("pair4.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin192_"+tc+".cpp" - fnameh="mpin192_"+tc+".h" - - copy_temp_file("mpin192.cpp", fnamec) - copy_keep_file("mpin192.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls192_"+tc+".cpp" - fnameh="bls192_"+tc+".h" - - copy_temp_file("bls192.cpp", fnamec) - copy_keep_file("bls192.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - if pf == "BLS48_CURVE" : - - fnamec="fp8_"+tf+".cpp" - fnameh="fp8_"+tf+".h" - - copy_temp_file("fp8.cpp", fnamec) - copy_keep_file("fp8.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="ecp8_"+tc+".cpp" - fnameh="ecp8_"+tc+".h" - - copy_temp_file("ecp8.cpp", fnamec) - copy_keep_file("ecp8.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - - fnamec="fp16_"+tf+".cpp" - fnameh="fp16_"+tf+".h" - - copy_temp_file("fp16.cpp", fnamec) - copy_keep_file("fp16.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="fp48_"+tf+".cpp" - fnameh="fp48_"+tf+".h" - - copy_temp_file("fp48.cpp", fnamec) - copy_keep_file("fp48.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="pair8_"+tc+".cpp" - fnameh="pair8_"+tc+".h" - - copy_temp_file("pair8.cpp", fnamec) - copy_keep_file("pair8.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin256_"+tc+".cpp" - fnameh="mpin256_"+tc+".h" - - copy_temp_file("mpin256.cpp", fnamec) - copy_keep_file("mpin256.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls256_"+tc+".cpp" - fnameh="bls256_"+tc+".h" - - copy_temp_file("bls256.cpp", fnamec) - copy_keep_file("bls256.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - -replace("arch.h","@WL@","32") - -class miracl_crypto: - np_curves = ( - ( "255", "F25519", "Ed25519", "29", "2", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "-1", "NOT_PF", "", "", "", "", "128"), - ( "255", "F25519", "C25519", "29", "2", "1", "PSEUDO_MERSENNE", "0", "MONTGOMERY", "486662", "NOT_PF", "", "", "", "", "128"), - ( "256", "NIST256", "NIST256", "28", "1", "-10", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "256", "BRAINPOOL", "BRAINPOOL", "28", "1", "-3", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "256", "ANSSI", "ANSSI", "28", "1", "-5", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "336", "HIFIVE", "HIFIVE", "29", "2", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "192"), - ( "448", "F448", "Ed448", "29", "1", "0", "GENERALISED_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "256"), - ( "384", "NIST384", "NIST384", "29", "1", "-12", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "192"), - ( "414", "C41417", "C41417", "29", "1", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "256"), - ( "521", "NIST521", "NIST521", "28", "1", "-4", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "256"), - ( "256", "F256PMW", "NUMS256W", "28", "1", "7", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "256", "F256PME", "NUMS256E", "29", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128"), - ( "384", "F384PM", "NUMS384W", "29", "1", "-4", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "192"), - ( "384", "F384PM", "NUMS384E", "29", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "192"), - ( "512", "F512PM", "NUMS512W", "29", "1", "-4", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "256"), - ( "512", "F512PM", "NUMS512E", "29", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "256"), - # ,"1", for SVDW - # set for SSWU plus isogenies - ( "256", "SECP256K1", "SECP256K1", "28", "1",["-11", "3"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "NOT_PF", "", "", "", "", "128"), - ( "256", "SM2", "SM2", "28", "1", "-9", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "255", "F25519", "C13318", "29", "2", "2", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "255", "JUBJUB", "JUBJUB", "29", "32", "1", "NOT_SPECIAL", "5", "EDWARDS", "-1", "NOT_PF", "", "", "", "", "128"), - ( "448", "F448", "X448", "29", "1", "0", "GENERALISED_MERSENNE", "0", "MONTGOMERY", "156326", "NOT_PF", "", "", "", "", "256"), - ( "160", "SECP160R1", "SECP160R1", "29", "1", "3", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128"), - ( "251", "C1174", "C1174", "29", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128"), - ( "166", "C1665", "C1665", "29", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128"), - ( "256", "MDC", "MDC", "28", "1", "0", "NOT_SPECIAL", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128"), - ( "255", "TWEEDLEDUM", "TWEEDLEDUM", "29", "33", "1", "NOT_SPECIAL", "5", "WEIERSTRASS", "0", "NOT_PF", "", "", "", "", "128"), - ( "255", "TWEEDLEDEE", "TWEEDLEDEE", "29", "34", "1", "NOT_SPECIAL", "5", "WEIERSTRASS", "0", "NOT_PF", "", "", "", "", "128") - ) - - pf_curves = ( - ( "254", "BN254", "BN254", "28", "1",["-1", "-1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "NEGATIVEX", "71", "66", "128"), - ( "254", "BN254CX", "BN254CX", "28", "1",["-1", "-1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "NEGATIVEX", "76", "66", "128"), - ( "383", "BLS12383", "BLS12383", "29", "1",["1", "1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "POSITIVEX", "68", "65", "128"), - # ["-3" ,"-1", "0"] for SVDW - # set for SSWU plus isogenies - ( "381", "BLS12381", "BLS12381", "29", "1",["11", "-2", "-1", "11", "3"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "NEGATIVEX", "69", "65", "128"), - ( "256", "FP256BN", "FP256BN", "28", "1",["1", "1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "M_TYPE", "NEGATIVEX", "83", "66", "128"), - ( "512", "FP512BN", "FP512BN", "29", "1",["1", "1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "M_TYPE", "POSITIVEX", "172", "130", "128"), - ( "443", "BLS12443", "BLS12443", "29", "1",["-7", "1", "1", "11", "3"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "POSITIVEX", "78", "75", "128"), - # https://eprint.iacr.org/2017/334.pdf - ( "461", "BLS12461", "BLS12461", "28", "1",["1", "4", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "NEGATIVEX", "79", "78", "128"), - ( "462", "BN462", "BN462", "28", "1",["1","1","0"],"NOT_SPECIAL", "1", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "POSITIVEX", "125", "118", "128"), - ( "479", "BLS24479", "BLS24479", "29", "1",["1", "4", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS24_CURVE", "M_TYPE", "POSITIVEX", "52", "49", "192"), - ( "556", "BLS48556", "BLS48556", "29", "1",["-1", "2", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS48_CURVE", "M_TYPE", "POSITIVEX", "35", "32", "256"), - ( "581", "BLS48581", "BLS48581", "29", "1",["2", "2", "0"],"NOT_SPECIAL", "10", "WEIERSTRASS", "0", "BLS48_CURVE", "D_TYPE", "NEGATIVEX", "36", "33", "256"), - ( "286", "BLS48286", "BLS48286", "29", "1",["1", "1", "0"],"NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS48_CURVE", "M_TYPE", "POSITIVEX", "20", "17", "128"), - ( "158", "BN158", "BN158", "28","1",["1", "1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0","BN_CURVE","M_TYPE","NEGATIVEX","49","42","128") - ) - - # There are choices here, different ways of getting the same result, but some faster than others - rsa_params = ( - # 256 is slower but may allow reuse of 256-bit BIGs used for elliptic curve - # 512 is faster.. but best is 1024 - #("1024", "RSA2048", "28", "2"), - ("512","RSA2048","29","4"), - #("256","RSA2048","29","8"), - ("384", "RSA3072", "28", "8"), - #("256","RSA4096","29","16"), - ("512", "RSA4096", "29", "8") - ) - - total_entries = len(np_curves)+len(pf_curves)+len(rsa_params) - - def valid_query(number): - return number >= 0 and number <= miracl_crypto.total_entries - -def interactive_prompt_print(): - index = 1 - print("Elliptic Curves") - for tuple in miracl_crypto.np_curves: - print(str(index) + ".", tuple[2]) - index += 1 - - print("\nPairing-Friendly Elliptic Curves") - for tuple in miracl_crypto.pf_curves: - print(str(index) + ".", tuple[2]) - index += 1 - - print("\nRSA") - for tuple in miracl_crypto.rsa_params: - print(str(index) + ".", tuple[1]) - index += 1 - -def interactive_prompt_exect(index): - index -= 1 # Python internally is zero-indexed - if index < len(miracl_crypto.np_curves): - tuple = miracl_crypto.np_curves[index] - curveset( - tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], - tuple[5], tuple[6], tuple[7], tuple[8], tuple[9], - tuple[10], tuple[11], tuple[12], - tuple[13], tuple[14], tuple[15] - ) - elif index < len(miracl_crypto.np_curves) + len(miracl_crypto.pf_curves): - tuple = miracl_crypto.pf_curves[index-len(miracl_crypto.np_curves)] - curveset( - tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], - tuple[5], tuple[6], tuple[7], tuple[8], tuple[9], - tuple[10], tuple[11], tuple[12], - tuple[13], tuple[14], tuple[15] - ) - else: - tuple = miracl_crypto.rsa_params[index-(len(miracl_crypto.np_curves)+len(miracl_crypto.pf_curves))] - rsaset( - tuple[0], tuple[1], tuple[2], tuple[3] - ) - -def interactive_prompt_input(): - while True: - userInput = input("\nChoose schemes to support (select 0 to finish): ") - try: - return int(userInput) - except: - if (userInput == ''): - return 0 - print("Non-integer input, select values between 1 and " + str(miracl_crypto.total_entries)) - interactive_prompt_input() - -interactive_prompt_print() -while keep_querying and not testing: - query_val = -1 - while not miracl_crypto.valid_query(query_val): - query_val = interactive_prompt_input() - if not miracl_crypto.valid_query(query_val): - print("Number out of range, select values between 1 and " + str(miracl_crypto.total_entries)) - elif query_val == 0: - keep_querying = False - else: - interactive_prompt_exect(query_val) - -if testing: - for i in range(0, miracl_crypto.total_entries): - interactive_prompt_exect(i+1) - -# create library -miracl_compile.compile_file(3, "randapi.cpp") -miracl_compile.compile_file(3, "hash.cpp") -miracl_compile.compile_file(3, "hmac.cpp") -miracl_compile.compile_file(3, "rand.cpp") -miracl_compile.compile_file(3, "oct.cpp") -miracl_compile.compile_file(3, "share.cpp") -miracl_compile.compile_file(3, "aes.cpp") -miracl_compile.compile_file(3, "gcm.cpp") -miracl_compile.compile_file(3, "newhope.cpp") -miracl_compile.compile_file(3, "dilithium.cpp") -miracl_compile.compile_file(3, "kyber.cpp") -miracl_compile.compile_file(3, "x509.cpp") - -if sys.platform.startswith("win") : - os.system("for %i in (*.o) do @echo %~nxi >> f.list") - os.system("ar rc core.a @f.list") - delete_file("f.list") -else : - os.system("ar rc core.a *.o") - -if testing : - miracl_compile.compile_binary(2, "testecc.cpp", "core.a", "testecc") - miracl_compile.compile_binary(2, "testeddsa.cpp", "core.a", "testeddsa") - miracl_compile.compile_binary(2, "testmpin.cpp", "core.a", "testmpin") - miracl_compile.compile_binary(2, "testbls.cpp", "core.a", "testbls") - miracl_compile.compile_binary(2, "benchtest_all.cpp", "core.a", "benchtest_all") - miracl_compile.compile_binary(2, "testnhs.cpp", "core.a", "testnhs") - miracl_compile.compile_binary(2, "testdlthm.cpp", "core.a", "testdlthm") - miracl_compile.compile_binary(2, "testkyber.cpp", "core.a", "testkyber") - -#clean up -for file in generated_files: - delete_file(file) - -delete_file("*.o") -delete_file("big.*") -delete_file("fp.*") -delete_file("ecp.*") -delete_file("ecdh.*") -delete_file("hpke.*") -delete_file("ff.*") -delete_file("rsa.*") -delete_file("config_big.h") -delete_file("config_field.h") -delete_file("config_curve.h") -delete_file("config_ff.h") -delete_file("fp2.*") -delete_file("fp4.*") -delete_file("fp8.*") -delete_file("fp16.*") -delete_file("share.cpp") -delete_file("x509.cpp") -delete_file("gcm.cpp") -delete_file("hash.cpp") -delete_file("hmac.cpp") -delete_file("aes.cpp") -delete_file("oct.cpp"); -delete_file("newhope.cpp") -delete_file("dilithium.cpp") -delete_file("kyber.cpp") -delete_file("Doxyfile") -delete_file("refman.pdf") -delete_file("readme.md") -delete_file("rand.cpp") -delete_file("randapi.cpp") -delete_file("config*.py") - -delete_file("fp12.*") -delete_file("fp24.*") -delete_file("fp48.*") - -delete_file("ecp2.*") -delete_file("ecp4.*") -delete_file("ecp8.*") - -delete_file("pair.*") -delete_file("mpin.*") -delete_file("bls.*") - -delete_file("pair4.*") -delete_file("mpin192.*") -delete_file("bls192.*") - -delete_file("pair8.*") -delete_file("mpin256.*") -delete_file("bls256.*") - -delete_file("rom_field*.cpp") -delete_file("rom_curve*.cpp") - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config64.py b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config64.py deleted file mode 100644 index b25021b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config64.py +++ /dev/null @@ -1,1036 +0,0 @@ -#!/usr/bin/env python3 - -# -# Copyright (c) 2012-2020 MIRACL UK Ltd. -# -# This file is part of MIRACL Core -# (see https://github.com/miracl/core). -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import os -import sys -import getopt -import shutil -import fnmatch - -intr=False -arg_options=False -testing=False -fast_fail=True -keep_querying=True -ignore_variables=False - -my_compiler = "g++" -generated_files = [] - -def copy_keep_file(file, target): - shutil.copyfile(file, target) - -def copy_temp_file(file, target): - shutil.copyfile(file, target) - generated_files.append(target) - -def delete_file(expression): - for root, dirs, files in os.walk(os.path.abspath(os.path.dirname(__file__))): - for name in files: - if fnmatch.fnmatch(name, expression): - os.remove(os.path.join(root, name)) - -def request_compile(compiler_path, cflags, optim, file, lib, bin): - flags = " -std=c++11" - if optim != 0: - flags += " -O%d" % optim - if cflags != None: - flags += " %s" % cflags - if lib == None and bin == None: - flags += " -c %s" % (file) - else: - if sys.platform.startswith("win"): - bin += ".exe" - flags += " %s %s -o %s" % (file, lib, bin) - print("Processing " + file + "..", end = "", flush=True) - if sys.platform.startswith("win") : - os.system(compiler_path + flags) - print(". [DONE]") - else : - if os.WEXITSTATUS(os.system(compiler_path + flags)) == 0: - print(". [DONE]") - elif fast_fail: - print("unable to process. Fast-fail enabled, quitting!") - sys.exit(1) - else: - print(". [ERROR]") - -class miracl_compile: - def compile_file(optim, file): - if (os.environ.get('CXX') != None and not ignore_variables): - request_compile(os.environ.get('CXX'), os.environ.get('CXXFLAGS'), optim, file, None, None) - else: - request_compile(my_compiler, None, optim, file, None, None) - - def compile_binary(optim, file, lib, bin): - if (os.environ.get('CXX') != None and not ignore_variables): - request_compile(os.environ.get('CXX'), os.environ.get('CXXFLAGS'), optim, file, lib, bin) - else: - request_compile(my_compiler, None, optim, file, lib, bin) - - -def inline_mul1(N,base) : - str="" - str+="\tt=(dchunk)a[0]*b[0]; c[0]=(chunk)t & BMASK_XXX; t=t>>BASEBITS_XXX;\n" - - for i in range(1,N) : - k=0; - str+="\tt=t" - while (k<=i) : - str+="+(dchunk)a[{}]*b[{}]".format(k,i-k) - k+=1 - str+="; c[{}]=(chunk)t & BMASK_XXX; ".format(i) - str+="t=t>>BASEBITS_XXX;\n" - - for i in range(N,2*N-1) : - k=i-(N-1) - str+="\tt=t" - while (k<=N-1) : - str+="+(dchunk)a[{}]*b[{}]".format(k,i-k) - k+=1 - str+="; c[{}]=(chunk)t & BMASK_XXX; ".format(i) - str+="t=t>>BASEBITS_XXX;\n" - - str+="\tc[{}]=(chunk)t;\n".format(2*N-1) - - return str.replace("XXX",base) - -def inline_mul2(N,base) : - str="" - for i in range(0,N) : - str+="\td[{}]=(dchunk)a[{}]*b[{}];\n".format(i, i, i) - str+="\n\ts=d[0];\n\tt = s; c[0]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX;\n" - for k in range(1,N) : - str+="\ts+=d[{}]; t=co+s ".format(k) - for i in range(k,int(k/2),-1) : - str+="+(dchunk)(a[{}]-a[{}])*(b[{}]-b[{}])".format(i,k - i, k - i, i) - str+="; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - str+="\n" - for k in range(N,2 * N - 1) : - str+="\ts-=d[{}]; t=co+s ".format(k - N) - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)(a[{}]-a[{}])*(b[{}]-b[{}])".format(i, k - i, k - i, i) - str+="; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - - str+="\tc[{}]=(chunk)co;\n".format(2 * N - 1) - return str.replace("XXX",base) - -def inline_sqr(N,base) : - str="" - str+="\n\tt=(dchunk)a[0]*a[0]; c[0]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX;\n" - - for k in range(1,N) : - str+="\tt= " - for i in range(k,int(k/2),-1) : - str+="+(dchunk)a[{}]*a[{}]".format(i, k - i) - str+="; t+=t; t+=co;" - if k % 2 == 0 : - str+=" t+=(dchunk)a[{}]*a[{}];".format(int(k/2), int(k/2)) - str+=" c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - str+="\n" - - for k in range(N,2*N-2) : - str+="\tt= " - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)a[{}]*a[{}]".format(i, k - i) - str+="; t+=t; t+=co;" - if k % 2 == 0 : - str+=" t+=(dchunk)a[{}]*a[{}];".format(int(k/2),int(k/2)) - str+=" c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n".format(k) - - str+="\tt=co; t+=(dchunk)a[{}]*a[{}]; c[{}]=(chunk)t&BMASK_XXX; co=t>>BASEBITS_XXX; \n ".format(N-1,N-1,2*N-2) - - str+="\tc[{}]=(chunk)co;\n".format(2 * N - 1) - return str.replace("XXX",base) - -def inline_redc2(N,base) : - str="" - str+="\tt=d[0]; v[0]=((chunk)t*MC)&BMASK_XXX; t+=(dchunk)v[0]*md[0]; s=0; c=(t>>BASEBITS_XXX);\n\n" - - for k in range(1,N) : - str+="\tt=d[{}]+c+s+(dchunk)v[0]*md[{}]".format(k, k) - for i in range(k-1,int(k/2),-1) : - str+="+(dchunk)(v[{}]-v[{}])*(md[{}]-md[{}])".format(k - i, i, i, k - i) - str+="; v[{}]=((chunk)t*MC)&BMASK_XXX; t+=(dchunk)v[{}]*md[0]; ".format(k, k) - str+=" dd[{}]=(dchunk)v[{}]*md[{}]; s+=dd[{}]; c=(t>>BASEBITS_XXX); \n".format(k, k, k, k) - - str+="\n" - for k in range(N,2*N-1) : - str+="\tt=d[{}]+c+s".format(k) - for i in range(N-1,int(k/2),-1) : - str+="+(dchunk)(v[{}]-v[{}])*(md[{}]-md[{}])".format(k - i, i, i, k - i) - str+="; a[{}]=(chunk)t&BMASK_XXX; s-=dd[{}]; c=(t>>BASEBITS_XXX); \n".format(k - N, k - N + 1) - - str+="\ta[{}]=d[{}]+((chunk)c&BMASK_XXX);\n".format(N-1,2*N-1) - return str.replace("XXX",base) - -def inline_redc1(N,base) : - str="" - - str+="\tt = d[0];\n" - str+="\tv[0] = ((chunk)t * MC)&BMASK_XXX;\n" - str+="\tt += (dchunk)v[0] * md[0];\n" - str+="\tt = (t >> BASEBITS_XXX) + d[1];\n" - - for i in range(1,N) : - k=1 - str+="\tt += (dchunk)v[0] * md[{}] ".format(i) - while k 0 : - replace(fnameh,"@TW@","POSITOWER") - else : - replace(fnameh,"@TW@","NEGATOWER") - - ib=int(base) - inb=int(nb) - inbt=int(nbt) - nlen=(1+((8*inb-1)//ib)) - sh=ib*nlen-inbt - - if sh > 30 : - sh=30 - replace(fnameh,"@SH@",str(sh)) - - fnameh="config_curve_"+tc+".h" - copy_keep_file("config_curve.h", fnameh) - - replace(fnameh,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"@CT@",ct) - replace(fnameh,"@CA@",ca) - replace(fnameh,"@PF@",pf) - - replace(fnameh,"@ST@",stw) - replace(fnameh,"@SX@",sx) - replace(fnameh,"@CS@",cs) - replace(fnameh,"@AB@",ab) - replace(fnameh,"@G2@",g2) - - replace(fnameh,"@HC@",hc) - replace(fnameh,"@HC2@",hc2) - - fnamec="big_"+bd+".cpp" - fnameh="big_"+bd+".h" - - copy_temp_file("big.cpp", fnamec) - copy_keep_file("big.h", fnameh) - - replace(fnamec,"XXX",bd) - replace(fnameh,"XXX",bd) - - replace(fnamec,"INLINE_MUL1",inline_mul1(nlen,bd)) - replace(fnamec,"INLINE_MUL2",inline_mul2(nlen,bd)) - replace(fnamec,"INLINE_SQR",inline_sqr(nlen,bd)) - replace(fnamec,"INLINE_REDC1",inline_redc1(nlen,bd)) - replace(fnamec,"INLINE_REDC2",inline_redc2(nlen,bd)) - - - miracl_compile.compile_file(3, fnamec) - - fnamec="fp_"+tf+".cpp" - fnameh="fp_"+tf+".h" - - copy_temp_file("fp.cpp", fnamec) - copy_keep_file("fp.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - miracl_compile.compile_file(3, "rom_field_"+tf+".cpp"); - - fnamec="ecp_"+tc+".cpp" - fnameh="ecp_"+tc+".h" - - copy_temp_file("ecp.cpp", fnamec) - copy_keep_file("ecp.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecdh_"+tc+".cpp" - fnameh="ecdh_"+tc+".h" - - copy_temp_file("ecdh.cpp", fnamec) - copy_keep_file("ecdh.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="eddsa_"+tc+".cpp" - fnameh="eddsa_"+tc+".h" - - copy_temp_file("eddsa.cpp", fnamec) - copy_keep_file("eddsa.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - - fnamec="hpke_"+tc+".cpp" - fnameh="hpke_"+tc+".h" - - copy_temp_file("hpke.cpp", fnamec) - copy_keep_file("hpke.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - miracl_compile.compile_file(3, "rom_curve_"+tc+".cpp"); - - if pf != "NOT_PF" : - fnamec="fp2_"+tf+".cpp" - fnameh="fp2_"+tf+".h" - - copy_temp_file("fp2.cpp", fnamec) - copy_keep_file("fp2.h", fnameh) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="fp4_"+tf+".cpp" - fnameh="fp4_"+tf+".h" - - copy_temp_file("fp4.cpp", fnamec) - copy_keep_file("fp4.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - if pf == "BN_CURVE" or pf == "BLS12_CURVE" : - fnamec="fp12_"+tf+".cpp" - fnameh="fp12_"+tf+".h" - - copy_temp_file("fp12.cpp", fnamec) - copy_keep_file("fp12.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecp2_"+tc+".cpp" - fnameh="ecp2_"+tc+".h" - - copy_temp_file("ecp2.cpp", fnamec) - copy_keep_file("ecp2.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="pair_"+tc+".cpp" - fnameh="pair_"+tc+".h" - - copy_temp_file("pair.cpp", fnamec) - copy_keep_file("pair.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin_"+tc+".cpp" - fnameh="mpin_"+tc+".h" - - copy_temp_file("mpin.cpp", fnamec) - copy_keep_file("mpin.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls_"+tc+".cpp" - fnameh="bls_"+tc+".h" - - copy_temp_file("bls.cpp", fnamec) - copy_keep_file("bls.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - if pf == "BLS24_CURVE" : - fnamec="fp8_"+tf+".cpp" - fnameh="fp8_"+tf+".h" - - copy_temp_file("fp8.cpp", fnamec) - copy_keep_file("fp8.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="fp24_"+tf+".cpp" - fnameh="fp24_"+tf+".h" - - copy_temp_file("fp24.cpp", fnamec) - copy_keep_file("fp24.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - fnamec="ecp4_"+tc+".cpp" - fnameh="ecp4_"+tc+".h" - - copy_temp_file("ecp4.cpp", fnamec) - copy_keep_file("ecp4.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="pair4_"+tc+".cpp" - fnameh="pair4_"+tc+".h" - - copy_temp_file("pair4.cpp", fnamec) - copy_keep_file("pair4.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin192_"+tc+".cpp" - fnameh="mpin192_"+tc+".h" - - copy_temp_file("mpin192.cpp", fnamec) - copy_keep_file("mpin192.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls192_"+tc+".cpp" - fnameh="bls192_"+tc+".h" - - copy_temp_file("bls192.cpp", fnamec) - copy_keep_file("bls192.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - if pf == "BLS48_CURVE" : - - fnamec="fp8_"+tf+".cpp" - fnameh="fp8_"+tf+".h" - - copy_temp_file("fp8.cpp", fnamec) - copy_keep_file("fp8.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="ecp8_"+tc+".cpp" - fnameh="ecp8_"+tc+".h" - - copy_temp_file("ecp8.cpp", fnamec) - copy_keep_file("ecp8.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - - fnamec="fp16_"+tf+".cpp" - fnameh="fp16_"+tf+".h" - - copy_temp_file("fp16.cpp", fnamec) - copy_keep_file("fp16.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="fp48_"+tf+".cpp" - fnameh="fp48_"+tf+".h" - - copy_temp_file("fp48.cpp", fnamec) - copy_keep_file("fp48.h", fnameh) - - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnamec,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - replace(fnameh,"ZZZ",tc) - miracl_compile.compile_file(3, fnamec) - - - fnamec="pair8_"+tc+".cpp" - fnameh="pair8_"+tc+".h" - - copy_temp_file("pair8.cpp", fnamec) - copy_keep_file("pair8.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="mpin256_"+tc+".cpp" - fnameh="mpin256_"+tc+".h" - - copy_temp_file("mpin256.cpp", fnamec) - copy_keep_file("mpin256.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - - fnamec="bls256_"+tc+".cpp" - fnameh="bls256_"+tc+".h" - - copy_temp_file("bls256.cpp", fnamec) - copy_keep_file("bls256.h", fnameh) - - replace(fnamec,"ZZZ",tc) - replace(fnamec,"YYY",tf) - replace(fnamec,"XXX",bd) - replace(fnameh,"ZZZ",tc) - replace(fnameh,"YYY",tf) - replace(fnameh,"XXX",bd) - miracl_compile.compile_file(3, fnamec) - -class miracl_crypto: - np_curves = ( - ( "255", "F25519", "Ed25519", "56", "2", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "-1", "NOT_PF", "", "", "", "", "128" ), - ( "255", "F25519", "C25519", "56", "2", "1", "PSEUDO_MERSENNE", "0", "MONTGOMERY", "486662", "NOT_PF", "", "", "", "", "128" ), - ( "256", "NIST256", "NIST256", "56", "1", "-10", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "256", "BRAINPOOL", "BRAINPOOL", "56", "1", "-3", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "256", "ANSSI", "ANSSI", "56", "1", "-5", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "336", "HIFIVE", "HIFIVE", "60", "2", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "192" ), - ( "448", "F448", "Ed448", "58", "1", "0", "GENERALISED_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "256" ), - ( "384", "NIST384", "NIST384", "56", "1", "-12", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "192" ), - ( "414", "C41417", "C41417", "60", "1", "1", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "256" ), - ( "521", "NIST521", "NIST521", "60", "1", "-4", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "256" ), - ( "256", "F256PMW", "NUMS256W", "56", "1", "7", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "256", "F256PME", "NUMS256E", "56", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128" ), - ( "384", "F384PM", "NUMS384W", "58", "1", "-4", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "192" ), - ( "384", "F384PM", "NUMS384E", "58", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "192" ), - ( "512", "F512PM", "NUMS512W", "60", "1", "-4", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "256" ), - ( "512", "F512PM", "NUMS512E", "60", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "256" ), - # ,"1", for SVDW - # set for SSWU plus isogenies - ( "256", "SECP256K1", "SECP256K1", "56", "1",["-11", "3"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "NOT_PF", "", "", "", "", "128" ), - ( "256", "SM2", "SM2", "56", "1", "-9", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "255", "F25519", "C13318", "56", "2", "2", "PSEUDO_MERSENNE", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "255", "JUBJUB", "JUBJUB", "56", "32", "1", "NOT_SPECIAL", "5", "EDWARDS", "-1", "NOT_PF", "", "", "", "", "128" ), - ( "448", "F448", "X448", "58", "1", "0", "GENERALISED_MERSENNE", "0", "MONTGOMERY", "156326", "NOT_PF", "", "", "", "", "256" ), - ( "160", "SECP160R1", "SECP160R1", "56", "1", "3", "NOT_SPECIAL", "0", "WEIERSTRASS", "-3", "NOT_PF", "", "", "", "", "128" ), - ( "251", "C1174", "C1174", "56", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128" ), - ( "166", "C1665", "C1665", "60", "1", "0", "PSEUDO_MERSENNE", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128" ), - ( "256", "MDC", "MDC", "56", "1", "0", "NOT_SPECIAL", "0", "EDWARDS", "1", "NOT_PF", "", "", "", "", "128" ), - ( "255", "TWEEDLEDUM", "TWEEDLEDUM", "56", "33", "1", "NOT_SPECIAL", "5", "WEIERSTRASS", "0", "NOT_PF", "", "", "", "", "128" ), - ( "255", "TWEEDLEDEE", "TWEEDLEDEE", "56", "34", "1", "NOT_SPECIAL", "5", "WEIERSTRASS", "0", "NOT_PF", "", "", "", "", "128" ) - ) - - pf_curves = ( - ( "254", "BN254", "BN254", "56", "1",["-1", "-1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "NEGATIVEX", "71", "66", "128" ), - ( "254", "BN254CX", "BN254CX", "56", "1",["-1", "-1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "NEGATIVEX", "76", "66", "128" ), - ( "383", "BLS12383", "BLS12383", "58", "1",["1", "1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "POSITIVEX", "68", "65", "128" ), - # ["-3" ,"-1", "0"] for SVDW - # set for SSWU plus isogenies - ( "381", "BLS12381", "BLS12381", "58", "1",["11", "-2", "-1", "11", "3"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "NEGATIVEX", "69", "65", "128" ), - ( "256", "FP256BN", "FP256BN", "56", "1",["1", "1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "M_TYPE", "NEGATIVEX", "83", "66", "128" ), - ( "512", "FP512BN", "FP512BN", "60", "1",["1", "1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BN_CURVE", "M_TYPE", "POSITIVEX", "172", "130", "128" ), - ( "443", "BLS12443", "BLS12443", "60", "1",["-7", "1", "1", "11", "3"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "POSITIVEX", "78", "75", "128" ), - # https://eprint.iacr.org/2017/334.pdf - ( "461", "BLS12461", "BLS12461", "60", "1",["1", "4", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS12_CURVE", "M_TYPE", "NEGATIVEX", "79", "78", "128" ), - ( "462", "BN462", "BN462", "60", "1",["1", "1", "0"], "NOT_SPECIAL", "1", "WEIERSTRASS", "0", "BN_CURVE", "D_TYPE", "POSITIVEX", "125", "118", "128" ), - ( "479", "BLS24479", "BLS24479", "56", "1",["1", "4", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS24_CURVE", "M_TYPE", "POSITIVEX", "52", "49", "192" ), - ( "556", "BLS48556", "BLS48556", "58", "1",["-1", "2", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS48_CURVE", "M_TYPE", "POSITIVEX", "35", "32", "256" ), - ( "581", "BLS48581", "BLS48581", "60", "1",["2", "2", "0"], "NOT_SPECIAL", "10", "WEIERSTRASS", "0", "BLS48_CURVE", "D_TYPE", "NEGATIVEX", "36", "33", "256" ), - ( "286", "BLS48286", "BLS48286", "60", "1",["1", "1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0", "BLS48_CURVE", "M_TYPE", "POSITIVEX", "20", "17", "128" ), - ( "158", "BN158", "BN158", "56","1",["1", "1", "0"], "NOT_SPECIAL", "0", "WEIERSTRASS", "0","BN_CURVE","M_TYPE","NEGATIVEX","49","42","128") - ) - - # There are choices here, different ways of getting the same result, but some faster than others - rsa_params = ( - # 256 is slower but may allow reuse of 256-bit BIGs used for elliptic curve - # 512 is faster.. but best is 1024 - #("1024", "RSA2048", "58", "2"), - ("512", "RSA2048", "60", "4"), - #("256", "RSA2048", "56", "8"), - ("384", "RSA3072", "56", "8"), - #("256", "RSA4096", "56", "16"), - ("512", "RSA4096", "60", "8") - ) - - min_core_library = ( - "randapi.cpp", - "hash.cpp", - "hmac.cpp", - "rand.cpp", - "oct.cpp", - "share.cpp", - "aes.cpp", - "gcm.cpp", - "newhope.cpp", - "dilithium.cpp", - "kyber.cpp", - "x509.cpp" - ) - - total_entries = len(np_curves)+len(pf_curves)+len(rsa_params) - - def valid_query(number): - return number >= 0 and number <= miracl_crypto.total_entries - -def interactive_prompt_print(): - index = 1 - print("Elliptic Curves") - for tuple in miracl_crypto.np_curves: - print(str(index) + ".", tuple[2]) - index += 1 - - print("\nPairing-Friendly Elliptic Curves") - for tuple in miracl_crypto.pf_curves: - print(str(index) + ".", tuple[2]) - index += 1 - - print("\nRSA") - for tuple in miracl_crypto.rsa_params: - print(str(index) + ".", tuple[1]) - index += 1 - -def interactive_prompt_exect(index): - index -= 1 # Python internally is zero-indexed - if index < len(miracl_crypto.np_curves): - tuple = miracl_crypto.np_curves[index] - curveset( - tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], - tuple[5], tuple[6], tuple[7], tuple[8], tuple[9], - tuple[10], tuple[11], tuple[12], - tuple[13], tuple[14], tuple[15] - ) - #curve_selected=True - elif index < len(miracl_crypto.np_curves) + len(miracl_crypto.pf_curves): - tuple = miracl_crypto.pf_curves[index-len(miracl_crypto.np_curves)] - curveset( - tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], - tuple[5], tuple[6], tuple[7], tuple[8], tuple[9], - tuple[10], tuple[11], tuple[12], - tuple[13], tuple[14], tuple[15] - ) - #pfcurve_selected=True - else: - tuple = miracl_crypto.rsa_params[index-(len(miracl_crypto.np_curves)+len(miracl_crypto.pf_curves))] - rsaset( - tuple[0], tuple[1], tuple[2], tuple[3] - ) - #rsa_selected=True - -def interactive_prompt_input(): - while True: - userInput = input("\nChoose schemes to support (select 0 to finish): ") - try: - return int(userInput) - except: - if (userInput == ''): - return 0 - print("Non-integer input, select values between 1 and " + str(miracl_crypto.total_entries)) - interactive_prompt_input() - -def usage(): - print("Usage: ./config64.py [OPTIONS] [ARGUMENTS]\n") - print("Option Long Option Action") - print(" -h, -? --help Shows this message\n") - print("Script Behaviour:") - print(" -d --disable-fastfail Disable script termination if build fails (default: false)") - print(" -i --ignore-environment Do not read environment variables, rely on shell instead (default: false)\n") - print("Build Configuration:") - print(" -o --options=1 --options=64 Disable interactive mode and select specific options") - print(" -r --run-tests Disable interactive mode, select all options, build and run tests") - print(" (implies --disable-fastfail, --ignore-environment)\n") - -def arg_manager(argv, build_options): - global testing, arg_options, fast_fail, intr, ignore_variables - # Account for legacy behaviour - # Should be removed in future releases - if len(argv) == 0: - intr = True - return False - if len(argv) == 1: - if (argv[0] == "test"): - testing = True - return False - # Now let's try to actually make sense of arguments - try: - opts, args = getopt.getopt( - argv, - "hdiro:", - ["help", "disable-fastfail", "ignore-environment", "run-tests", "options="] - ) - except getopt.GetoptError as err: - print(err) - usage() - sys.exit(2) - - for opt, arg in opts: - if opt in ['-h', '--help']: - usage() - sys.exit(0) - elif opt in ['-d', '--disable-fastfail']: - fast_fail = False - elif opt in ['-i', '--ignore-environment']: - ignore_variables = True - elif opt in ['-r', '--run-tests']: - testing = True - fast_fail = False - ignore_variables = True - elif opt in ['-o', '--options']: - arg_options = True - try: - intarg = int(arg) - if (intarg <= miracl_crypto.total_entries and intarg > 0): - build_options.append(intarg) - else: - raise ValueError("Value too low or too high!") - except: - print("config64.py: Error! You have passed an invalid option, exiting.") - print(" If you are trying to select multiple options, please repeat the flag\n") - print(" e.g. ") - print(" ./config64.py -o 1 -o 23 -o 25") - sys.exit(1) - return len(opts) > 0 and not testing and arg_options - -def main(argv): - global testing, keep_querying, my_compiler, generated_files, arg_options, intr - options_list = [] - - replace("arch.h","@WL@","64") - - if not arg_manager(argv, options_list): - if intr: - if not testing: - interactive_prompt_print() - while keep_querying and not testing: - query_val = -1 - while not miracl_crypto.valid_query(query_val): - query_val = interactive_prompt_input() - if not miracl_crypto.valid_query(query_val): - print("Number out of range, select values between 1 and " + str(miracl_crypto.total_entries)) - elif query_val == 0: - keep_querying = False - else: - interactive_prompt_exect(query_val) - elif not arg_options and not testing: - print("config64.py: Invalid input, program terminating") - sys.exit(2) - else: - for i in options_list: - interactive_prompt_exect(i) - - if testing: - for i in range(0, miracl_crypto.total_entries): - interactive_prompt_exect(i+1) - - # create library - for f in miracl_crypto.min_core_library: - miracl_compile.compile_file(3, f) - - if sys.platform.startswith("win") : - os.system("for %i in (*.o) do @echo %~nxi >> f.list") - os.system("ar rc core.a @f.list") - delete_file("f.list") - else : - os.system("ar rc core.a *.o") - - if testing : - miracl_compile.compile_binary(2, "testecc.cpp", "core.a", "testecc") - miracl_compile.compile_binary(2, "testeddsa.cpp", "core.a", "testeddsa") - miracl_compile.compile_binary(2, "testmpin.cpp", "core.a", "testmpin") - miracl_compile.compile_binary(2, "testbls.cpp", "core.a", "testbls") - miracl_compile.compile_binary(2, "benchtest_all.cpp", "core.a", "benchtest_all") - miracl_compile.compile_binary(2, "testnhs.cpp", "core.a", "testnhs") - miracl_compile.compile_binary(2, "testdlthm.cpp", "core.a", "testdlthm") - miracl_compile.compile_binary(2, "testkyber.cpp", "core.a", "testkyber") - - #clean up - for file in generated_files: - delete_file(file) - delete_file("*.o") - sys.exit(0) - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/dilithium.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/dilithium.cpp deleted file mode 100644 index dfa9849..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/dilithium.cpp +++ /dev/null @@ -1,1224 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Dilithium API implementation. Constant time where it matters. Spends nearly all of its time running SHA3. Small. - -The Matrix A is calculated on-the-fly to keep memory requirement minimal -Note that -1. A precalculated A can be included in the public key, for use by signature and verification (which blows up public key size) -2. Precalculating A for signature calculation means that the A does not have to re-calculated for each attempt to find a good signature - -Might be simpler to wait for hardware support for SHA3 before attempting further optimization! - - M.Scott 30/09/2021 -*/ - -#include "dilithium.h" - -using namespace core; - -#define round(a,b) (((a)+((b)/2))/(b)) - -// parameters for each security level -// tau,gamma1,gamma2,K,L,eta,lg(2*eta+1),omega -const int PARAMS_2[8]={39,17,88,4,4,2,3,80}; -const int PARAMS_3[8]={49,19,32,6,5,4,4,55}; -const int PARAMS_5[8]={60,19,32,8,7,2,3,75}; - -const sign32 roots[] = {0x3ffe00,0x64f7,0x581103,0x77f504,0x39e44,0x740119,0x728129,0x71e24,0x1bde2b,0x23e92b,0x7a64ae,0x5ff480,0x2f9a75,0x53db0a,0x2f7a49,0x28e527,0x299658,0xfa070,0x6f65a5,0x36b788,0x777d91,0x6ecaa1,0x27f968,0x5fb37c,0x5f8dd7,0x44fae8,0x6a84f8,0x4ddc99,0x1ad035,0x7f9423,0x3d3201,0x445c5,0x294a67,0x17620,0x2ef4cd,0x35dec5,0x668504,0x49102d,0x5927d5,0x3bbeaf,0x44f586,0x516e7d,0x368a96,0x541e42,0x360400,0x7b4a4e,0x23d69c,0x77a55e,0x65f23e,0x66cad7,0x357e1e,0x458f5a,0x35843f,0x5f3618,0x67745d,0x38738c,0xc63a8,0x81b9a,0xe8f76,0x3b3853,0x3b8534,0x58dc31,0x1f9d54,0x552f2e,0x43e6e6,0x688c82,0x47c1d0,0x51781a,0x69b65e,0x3509ee,0x2135c7,0x67afbc,0x6caf76,0x1d9772,0x419073,0x709cf7,0x4f3281,0x4fb2af,0x4870e1,0x1efca,0x3410f2,0x70de86,0x20c638,0x296e9f,0x5297a4,0x47844c,0x799a6e,0x5a140a,0x75a283,0x6d2114,0x7f863c,0x6be9f8,0x7a0bde,0x1495d4,0x1c4563,0x6a0c63,0x4cdbea,0x40af0,0x7c417,0x2f4588,0xad00,0x6f16bf,0xdcd44,0x3c675a,0x470bcb,0x7fbe7f,0x193948,0x4e49c1,0x24756c,0x7ca7e0,0xb98a1,0x6bc809,0x2e46c,0x49a809,0x3036c2,0x639ff7,0x5b1c94,0x7d2ae1,0x141305,0x147792,0x139e25,0x67b0e1,0x737945,0x69e803,0x51cea3,0x44a79d,0x488058,0x3a97d9,0x1fea93,0x33ff5a,0x2358d4,0x3a41f8,0x4cdf73,0x223dfb,0x5a8ba0,0x498423,0x412f5,0x252587,0x6d04f1,0x359b5d,0x4a28a1,0x4682fd,0x6d9b57,0x4f25df,0xdbe5e,0x1c5e1a,0xde0e6,0xc7f5a,0x78f83,0x67428b,0x7f3705,0x77e6fd,0x75e022,0x503af7,0x1f0084,0x30ef86,0x49997e,0x77dcd7,0x742593,0x4901c3,0x53919,0x4610c,0x5aad42,0x3eb01b,0x3472e7,0x4ce03c,0x1a7cc7,0x31924,0x2b5ee5,0x291199,0x585a3b,0x134d71,0x3de11c,0x130984,0x25f051,0x185a46,0x466519,0x1314be,0x283891,0x49bb91,0x52308a,0x1c853f,0x1d0b4b,0x6fd6a7,0x6b88bf,0x12e11b,0x4d3e3f,0x6a0d30,0x78fde5,0x1406c7,0x327283,0x61ed6f,0x6c5954,0x1d4099,0x590579,0x6ae5ae,0x16e405,0xbdbe7,0x221de8,0x33f8cf,0x779935,0x54aa0d,0x665ff9,0x63b158,0x58711c,0x470c13,0x910d8,0x463e20,0x612659,0x251d8b,0x2573b7,0x7d5c90,0x1ddd98,0x336898,0x2d4bb,0x6d73a8,0x4f4cbf,0x27c1c,0x18aa08,0x2dfd71,0xc5ca5,0x19379a,0x478168,0x646c3e,0x51813d,0x35c539,0x3b0115,0x41dc0,0x21c4f7,0x70fbf5,0x1a35e7,0x7340e,0x795d46,0x1a4cd0,0x645caf,0x1d2668,0x666e99,0x6f0634,0x7be5db,0x455fdc,0x530765,0x5dc1b0,0x7973de,0x5cfd0a,0x2cc93,0x70f806,0x189c2a,0x49c5aa,0x776a51,0x3bcf2c,0x7f234f,0x6b16e0,0x3c15ca,0x155e68,0x72f6b7,0x1e29ce}; -const sign32 iroots[] = {0x3ffe00,0x7f7b0a,0x7eafd,0x27cefe,0x78c1dd,0xd5ed8,0xbdee8,0x7c41bd,0x56fada,0x5065b8,0x2c04f7,0x50458c,0x1feb81,0x57b53,0x5bf6d6,0x6401d6,0x7b9a3c,0x42ae00,0x4bde,0x650fcc,0x320368,0x155b09,0x3ae519,0x20522a,0x202c85,0x57e699,0x111560,0x86270,0x492879,0x107a5c,0x703f91,0x5649a9,0x2ab0d3,0x6042ad,0x2703d0,0x445acd,0x44a7ae,0x71508b,0x77c467,0x737c59,0x476c75,0x186ba4,0x20a9e9,0x4a5bc2,0x3a50a7,0x4a61e3,0x19152a,0x19edc3,0x83aa3,0x5c0965,0x495b3,0x49dc01,0x2bc1bf,0x49556b,0x2e7184,0x3aea7b,0x442152,0x26b82c,0x36cfd4,0x195afd,0x4a013c,0x50eb34,0x7e69e1,0x56959a,0x454828,0x375fa9,0x3b3864,0x2e115e,0x15f7fe,0xc66bc,0x182f20,0x6c41dc,0x6b686f,0x6bccfc,0x2b520,0x24c36d,0x1c400a,0x4fa93f,0x3637f8,0x7cfb95,0x1417f8,0x744760,0x33821,0x5b6a95,0x319640,0x66a6b9,0x2182,0x38d436,0x4378a7,0x7212bd,0x10c942,0x7f3301,0x509a79,0x781bea,0x7bd511,0x330417,0x15d39e,0x639a9e,0x6b4a2d,0x5d423,0x13f609,0x59c5,0x12beed,0xa3d7e,0x25cbf7,0x64593,0x385bb5,0x2d485d,0x567162,0x5f19c9,0xf017b,0x4bcf0f,0x7df037,0x376f20,0x302d52,0x30ad80,0xf430a,0x3e4f8e,0x62488f,0x13308b,0x183045,0x5eaa3a,0x4ad613,0x1629a3,0x2e67e7,0x381e31,0x17537f,0x3bf91b,0x61b633,0xce94a,0x6a8199,0x43ca37,0x14c921,0xbcb2,0x4410d5,0x875b0,0x361a57,0x6743d7,0xee7fb,0x7d136e,0x22e2f7,0x66c23,0x221e51,0x2cd89c,0x3a8025,0x3fa26,0x10d9cd,0x197168,0x62b999,0x1b8352,0x659331,0x682bb,0x78abf3,0x65aa1a,0xee40c,0x5e1b0a,0x7bc241,0x44deec,0x4a1ac8,0x2e5ec4,0x1b73c3,0x385e99,0x66a867,0x73835c,0x51e290,0x6735f9,0x7d63e5,0x309342,0x126c59,0x7d0b46,0x4c7769,0x620269,0x28371,0x5a6c4a,0x5ac276,0x1eb9a8,0x39a1e1,0x76cf29,0x38d3ee,0x276ee5,0x1c2ea9,0x198008,0x2b35f4,0x846cc,0x4be732,0x5dc219,0x74041a,0x68fbfc,0x14fa53,0x26da88,0x629f68,0x1386ad,0x1df292,0x4d6d7e,0x6bd93a,0x6e21c,0x15d2d1,0x32a1c2,0x6cfee6,0x145742,0x10095a,0x62d4b6,0x635ac2,0x2daf77,0x362470,0x57a770,0x6ccb43,0x397ae8,0x6785bb,0x59efb0,0x6cd67d,0x41fee5,0x6c9290,0x2785c6,0x56ce68,0x54811c,0x7cc6dd,0x65633a,0x32ffc5,0x4b6d1a,0x412fe6,0x2532bf,0x7b7ef5,0x7aa6e8,0x36de3e,0xbba6e,0x8032a,0x364683,0x4ef07b,0x60df7d,0x2fa50a,0x9ffdf,0x7f904,0xa8fc,0x189d76,0x78507e,0x7360a7,0x71ff1b,0x6381e7,0x7221a3,0x30ba22,0x1244aa,0x395d04,0x35b760,0x4a44a4,0x12db10,0x5aba7a,0x7bcd0c,0x365bde,0x255461,0x5da206,0x33008e,0x459e09,0x5c872d,0x4be0a7,0x5ff56e}; - -/* Montgomery stuff */ - -static sign32 redc(unsign64 T) -{ - unsign32 m = (unsign32)T * (unsign32)DL_ND; - return ((unsign64)m * DL_PRIME + T) >> 32; -} - -static sign32 nres(unsign32 x) -{ - return redc((unsign64)x * DL_R2MODP); -} - -static sign32 modmul(unsign32 a, unsign32 b) -{ - return redc((unsign64)a * b); -} - -// make all elements +ve -static void poly_pos(sign32 *p) -{ - int i; - for (i=0;i>31)&DL_PRIME; -} - -// NTT code - -// Important! -// nres(x); ntt(x) -// nres(y); ntt(y) -// z=x*y -// intt(z); -// redc(z); - -// is equivalent to (note that nres() and redc() cancel out) - -// ntt(x); -// nres(y); ntt(y); -// z=x*y -// intt(z) - -// is equivalent to - -// ntt(x) -// ntt(y) -// z=x*y -// intt(z) -// nres(z) - -// In all cases z ends up in normal (non-Montgomery) form! -// So the conversion to Montgomery form can be "pushed" through the calculation. - -// Here intt(z) <- intt(z);nres(z); -// Combining is more efficient -// note that ntt() and intt() are not mutually inverse - -/* NTT code */ -/* Cooley-Tukey NTT */ -/* Excess of 2 allowed on input - coefficients must be < 2*PRIME */ - -static void ntt(sign32 *x) -{ - int m, i, j, start, len = DL_DEGREE / 2; - sign32 S, V, q = DL_PRIME; - - /* Make positive */ - poly_pos(x); - m = 1; - while (m < DL_DEGREE) - { - start = 0; - for (i = 0; i < m; i++) - { - S = roots[m + i]; - for (j = start; j < start + len; j++) - { - V = modmul(x[j + len], S); - x[j + len] = x[j] + 2 * q - V; - x[j] = x[j] + V; - } - start += 2 * len; - } - len /= 2; - m *= 2; - } -} - -/* Gentleman-Sande INTT */ -/* Excess of 2 allowed on input - coefficients must be < 2*PRIME */ -/* Output fully reduced */ -#define NTTL 1 // maybe should be 2? - -static void intt(sign32 *x) -{ - int m, i, j, k, n,lim,t = 1; - sign32 S, U, V, W, q = DL_PRIME; - - m = DL_DEGREE/2; - n=DL_LGN; - while (m >= 1) - { - lim=NTTL>>n; - n--; - k = 0; - for (i = 0; i < m; i++) - { - S = iroots[m + i]; - for (j = k; j < k + t; j++) - { -#if NTTL>1 - if (m> 31)&q; - } -} - -static void nres_it(sign32 *p) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p[i] = nres(p[i]); -} - -static void redc_it(sign32 *p) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p[i] = redc(p[i]); -} - -// copy polynomial -static void poly_copy(sign32 *p1, sign32 *p2) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = p2[i]; -} - -// copy from small polynomial -static void poly_scopy(sign32 *p1, sign8 *p2) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = (sign32)p2[i]; -} - -// copy from medium polynomial -static void poly_mcopy(sign32 *p1, sign16 *p2) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = (sign32)p2[i]; -} - -static void poly_zero(sign32 *p1) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = 0; -} - -static void poly_negate(sign32 *p1,sign32 *p2) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = DL_PRIME-p2[i]; -} - -static void poly_mul(sign32 *p1, sign32 *p2, sign32 *p3) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = modmul(p2[i], p3[i]); -} - -static void poly_add(sign32 *p1, sign32 *p2, sign32 *p3) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = (p2[i] + p3[i]); -} - -static void poly_sub(sign32 *p1, sign32 *p2, sign32 *p3) -{ - int i; - for (i = 0; i < DL_DEGREE; i++) - p1[i] = (p2[i] + DL_PRIME - p3[i]); -} - -/* reduces inputs that are already < 2q */ -static void poly_soft_reduce(sign32 *poly) -{ - int i; - sign32 e; - for (i = 0; i < DL_DEGREE; i++) - { - e = poly[i] - DL_PRIME; - poly[i] = e + ((e >> 31)&DL_PRIME); - } -} - -/* fully reduces modulo q */ -static void poly_hard_reduce(sign32 *poly) -{ - int i; - sign32 e; - for (i = 0; i < DL_DEGREE; i++) - { - e = modmul(poly[i], DL_ONE); // reduces to < 2q - e = e - DL_PRIME; - poly[i] = e + ((e >> 31)&DL_PRIME); // finishes it off - } -} - -// Generate A[i][j] from rho -static void ExpandAij(byte rho[32],sign32 Aij[],int i,int j) -{ - sha3 sh; - int m,n; - unsign32 b0,b1,b2; - sign32 cf; - SHA3_init(&sh, SHAKE128); - byte buff[840]; // should be plenty - for (m=0;m<32;m++) - SHA3_process(&sh,rho[m]); - SHA3_process(&sh,j&0xff); - SHA3_process(&sh,i&0xff); - SHA3_shake(&sh,(char *)buff,840); - m=n=0; - while (m=DL_PRIME) continue; - Aij[m++]=cf; - } -} - -// array t has ab active bits per word -// extract bytes from array of words -// if max!=0 then -max<=t[i]<=+max -static byte nextbyte32(int ab,int max,sign32 t[],int &ptr, int &bts) -{ - sign32 r,w; - int left=ab-bts; // number of bits left in this word - int i=0; - w=t[ptr]; - if (max!=0) - w=max-w; - r=w>>bts; - while (left<8) - { - i++; - w=t[ptr+i]; - if (max!=0) - w=max-w; - r|=w<=ab) - { - bts-=ab; - ptr++; - } - return (byte)r&0xff; -} - -// array t has ab active bits per word -// extract dense bytes from array of words -// if max!=0 then -max<=t[i]<=+max -static byte nextbyte16(int ab,int max,sign16 t[],int &ptr, int &bts) -{ - sign32 r,w; - int left=ab-bts; // number of bits left in this word - int i=0; - w=t[ptr]; - if (max!=0) - w=max-w; - r=w>>bts; - while (left<8) - { - i++; - w=t[ptr+i]; - if (max!=0) - w=max-w; - r|=w<=ab) - { - bts-=ab; - ptr++; - } - return (byte)r&0xff; -} - -// array t has ab active bits per word -// extract dense bytes from array of words -// if max!=0 then -max<=t[i]<=+max -static byte nextbyte8(int ab,int max,sign8 t[],int &ptr, int &bts) -{ - sign32 r,w; - int left=ab-bts; // number of bits left in this word - int i=0; - w=t[ptr]; - if (max!=0) - w=max-w; - r=w>>bts; - while (left<8) - { - i++; - w=t[ptr+i]; - if (max!=0) - w=max-w; - r|=w<=ab) - { - bts-=ab; - ptr++; - } - return (byte)r&0xff; -} - -// extract ab bits into word from dense byte stream -static sign32 nextword(const int ab,int max,byte t[],int &ptr, int &bts) -{ - sign32 r=t[ptr]>>bts; - sign32 mask=(1<=8) - { - bts-=8; - ptr++; - } - w=r&mask; - if (max!=0) - w=max-w; - return w; -} - -// pack public key -static int pack_pk(const int *params,byte pk[],byte rho[32],sign16 t1[]) -{ - int ptr,bts,i,n=0; - int ck=params[3]; - for (i=0;i<32;i++) - pk[i]=rho[i]; - n=32; ptr=bts=0; - for (i=0;i<(ck*DL_DEGREE*DL_TD)/8;i++ ) - pk[n++]=nextbyte16(DL_TD,0,t1,ptr,bts); - return n; -} - -// unpack public key -static void unpack_pk(const int *params,byte rho[32],sign16 t1[],byte pk[]) -{ - int ptr,bts,i; - int ck=params[3]; - for (i=0;i<32;i++) - rho[i]=pk[i]; - ptr=bts=0; - for (i=0;iDL_PRIME/2) t-=DL_PRIME; - t=gamma1-t; - z[row+m]=t; - } - } - for (i=0;i>8)&0xff); - SHA3_shake(&sh,(char *)buff,272); - ptr=bts=0; - for (m=0;m2*eta); - s[m]=eta-s[m]; - } -} - -// uniform random sampling -static void sample_Y(const int *params,int k,byte rhod[64],sign32 y[]) -{ - int i,j,m,ki,row,ptr,bts; // 2^n-1 - int lg=params[1]; - int gamma1=1<>8); - SHA3_shake(&sh,(char *)buff,DL_YBYTES); - - ptr=bts=0; - for (m=0;m>31; - y[row+m]=w+(DL_PRIME&t); - } - } -} - -// CRH(rho,t1) -static void CRH1(const int *params,byte H[32],byte rho[32],sign16 t1[]) -{ - int i; - int ptr,bts; - int ck=params[3]; - sha3 sh; - SHA3_init(&sh, SHAKE256); - for (i=0;i<32;i++) - SHA3_process(&sh,rho[i]); - ptr=bts=0; - for (i=0;i<(ck*DL_DEGREE*DL_TD)/8;i++) - SHA3_process(&sh,nextbyte16(DL_TD,0,t1,ptr,bts)); - SHA3_shake(&sh,(char *)H,32); -} - -// CRH(tr,M) -static void CRH2(byte H[64],byte tr[32],byte mess[],int mlen) -{ - int i; - sha3 sh; - SHA3_init(&sh, SHAKE256); - for (i=0;i<32;i++) - SHA3_process(&sh,tr[i]); - for (i=0;ii); - c[i]=c[j]; - c[j]=1-2*((sign32)sn&1); - sn>>=1; b++; - if (b==8) { - sn=signs[n++]; b=0; - } - } -} - -static sign16 p2r(sign32 *r0) -{ - sign32 d=(1<>DL_D; - *r0-=(r1 << DL_D); - return (sign16)r1; -} - -static void Power2Round(sign32 t[],sign16 t0[],sign16 t1[]) -{ - int m; - sign32 w; - for (m=0;m> 7; - - if (dv==32) - { - a1 = (a1*1025 + (1 << 21)) >> 22; - a1 &= 15; - gamma2=(DL_PRIME-1)/32; - } else { // 88 - a1 = (a1*11275 + (1 << 23)) >> 24; - a1 ^= ((43 - a1) >> 31) & a1; - gamma2=(DL_PRIME-1)/88; - } - - a0 = a - a1*2*gamma2; // (Q-1)/2R=alpha - a0 -= (((DL_PRIME-1)/2 - a0) >> 31) & DL_PRIME; - a0 += (a0>>31)&DL_PRIME; - return a0; -} - -// ALPHA = (Q-1)/16 -static sign8 decompose_hi(const int *params,sign32 a) { - int dv=params[2]; - sign32 a1; - a1 = (a + 127) >> 7; - if (dv==32) { - a1 = (a1*1025 + (1 << 21)) >> 22; - a1 &= 15; - } else { - a1 = (a1*11275 + (1 << 23)) >> 24; - a1 ^= ((43 - a1) >> 31) & a1; - } - return (sign8)a1; -} - -static void lobits(const int *params,sign32 r0[],sign32 r[]) -{ - int m; - for (m=0;m>31)&DL_PRIME); - a1=decompose_hi(params,rz); - if (a0!=a1) { - if (hptr>=omega) return omega+1; - h[hptr++]=m&0xff; - } - } - return hptr; -} - -static int UsePartialHint(const int *params,sign8 r[],byte h[],int hptr,int i,sign32 w[]) -{ - int dv=(sign8)params[2]; - int omega=params[7]; - sign8 a1,md=dv/2; - sign32 a0; - int m; - for (m=0;m=md) a1-=md; - } else { - a1--; - if (a1<0) a1+=md; - } - } - r[m]=a1; - } - return hptr; -} - -static sign32 infinity_norm(sign32 w[]) -{ - int m; - sign32 az,n=0; - for (m=0;mDL_PRIME/2) az=DL_PRIME-az; - if (az>n) n=az; - } - return n; -} - -// Dilithium API - -static void keypair(const int *params,byte *tau,octet *sk,octet *pk) -{ - int i,row,j; - sha3 sh; - byte buff[128]; - byte rho[32]; - byte rhod[64]; - byte bK[32]; - byte tr[32]; // 320 bytes - sign32 Aij[DL_DEGREE]; // 1024 bytes - sign32 w[DL_DEGREE]; // work space 1024 bytes - sign32 r[DL_DEGREE]; // work space 1024 bytes total = 12352 - - int ck=params[3]; - int el=params[4]; - -#ifdef USE_VLAS - sign8 s1[el*DL_DEGREE]; // 1280 bytes - sign8 s2[ck*DL_DEGREE]; // 1536 bytes - sign16 t0[ck*DL_DEGREE]; // 3072 bytes - sign16 t1[ck*DL_DEGREE]; // 3072 bytes -#else - sign8 s1[DL_MAXL*DL_DEGREE]; // 1280 bytes - sign8 s2[DL_MAXK*DL_DEGREE]; // 1536 bytes - sign16 t0[DL_MAXK*DL_DEGREE]; // 3072 bytes - sign16 t1[DL_MAXK*DL_DEGREE]; // 3072 bytes -#endif - SHA3_init(&sh, SHAKE256); - - for (i=0;i<32;i++) - SHA3_process(&sh,tau[i]); - SHA3_shake(&sh,(char *)buff,128); - for (i=0;i<32;i++) - { - rho[i]=buff[i]; - bK[i]=buff[i+96]; - } - for (i=0;i<64;i++) - rhod[i]=buff[32+i]; - - for (i=0;ilen=pack_pk(params,(byte *)pk->val,rho,t1); - sk->len=pack_sk(params,(byte *)sk->val,rho,bK,tr,s1,s2,t0); -} - -static int signature(const int *params,octet *sk,octet *M,octet *sig) -{ - int i,k,nh,fk,row,j; - bool badone; - byte rho[32]; - byte bK[32]; - byte ct[32]; - byte tr[32]; - byte mu[64]; - byte rhod[64]; // 288 bytes - byte hint[100]; // 61 bytes - - sign32 c[DL_DEGREE]; // 1024 bytes - sign32 w[DL_DEGREE]; // work space 1024 bytes - sign32 r[DL_DEGREE]; // work space 1024 bytes total= 21673 bytes - //sign32 Aij[DL_DEGREE]; // 1024 bytes - - int ck=params[3]; - int el=params[4]; - -#ifdef USE_VLAS - sign8 s1[el*DL_DEGREE]; // 1280 bytes - sign8 s2[ck*DL_DEGREE]; // 1536 bytes - sign16 t0[ck*DL_DEGREE]; // 3072 bytes - sign32 y[el*DL_DEGREE]; // 5120 bytes - sign32 Ay[ck*DL_DEGREE]; // 6144 bytes - sign8 w1[ck*DL_DEGREE]; // 1280 bytes -#else - sign8 s1[DL_MAXL*DL_DEGREE]; // 1280 bytes - sign8 s2[DL_MAXK*DL_DEGREE]; // 1536 bytes - sign16 t0[DL_MAXK*DL_DEGREE]; // 3072 bytes - sign32 y[DL_MAXL*DL_DEGREE]; // 5120 bytes - sign32 Ay[DL_MAXK*DL_DEGREE]; // 6144 bytes - sign8 w1[DL_MAXK*DL_DEGREE]; // 1280 bytes -#endif - int tau=params[0]; - int lg=params[1]; - int gamma1=(sign32)(1<val); - -// signature - CRH2(mu,tr,(byte*)M->val,M->len); - CRH3(rhod,bK,mu); - - for (k=0; ;k++ ) - { - fk=k*el; - sample_Y(params,fk,rhod,y); - -// NTT y - for (i=0;i=gamma1-beta) - { - badone=true; - break; - } - } - - if (badone) continue; - -// Calculate Ay=w-c.s2 and r0=lobits(w-c.s2) - nh=0; - for (i=0;i=gamma2-beta) - { - badone=true; - break; - } - poly_mcopy(w,&t0[row]); - ntt(w); - poly_mul(w,w,c); - - intt(w); - poly_negate(r,w); // -ct0 - if (infinity_norm(r)>=gamma2) - { - badone=true; - break; - } - poly_sub(&Ay[row],&Ay[row],r); - poly_soft_reduce(&Ay[row]); - - nh=MakePartialHint(params,hint,nh,r,&Ay[row]); - if (nh>omega) - { - badone=true; - break; - } - hint[omega+i]=nh; - } - if (badone) continue; - break; - } - sig->len=pack_sig(params,(byte *)sig->val,y,ct,hint); - return k+1; -} - -static bool verify(const int *params,octet *pk,octet *M,octet *sig) -{ - int i,row,j,m,hints; - byte rho[32]; - byte mu[64]; - byte ct[32]; - byte cct[32]; - byte tr[32]; // 192 bytes - byte hint[100]; // 61 bytes - - - sign32 Aij[DL_DEGREE]; // 1024 bytes - sign32 c[DL_DEGREE]; // 1024 bytes - sign32 w[DL_DEGREE]; // work space // 1024 bytes - sign32 r[DL_DEGREE]; // work space // 1024 bytes total=14077 bytes - - int ck=params[3]; - int el=params[4]; - -#ifdef USE_VLAS - sign32 z[el*DL_DEGREE]; // 5120 bytes - sign16 t1[ck*DL_DEGREE]; // 3072 bytes - sign8 w1d[ck*DL_DEGREE]; // 1536 bytes -#else - sign32 z[DL_MAXL*DL_DEGREE]; // 5120 bytes - sign16 t1[DL_MAXK*DL_DEGREE]; // 3072 bytes - sign8 w1d[DL_MAXK*DL_DEGREE]; // 1536 bytes -#endif - int tau=params[0]; - int lg=params[1]; - int gamma1=(sign32)(1<val); - unpack_sig(params,z,ct,hint,(byte *)sig->val); - - for (i=0;i=gamma1-beta) - return false; - ntt(&z[row]); // convert to ntt form - } - - CRH1(params,tr,rho,t1); - CRH2(mu,tr,(byte *)M->val,M->len); - SampleInBall(params,ct,c); - ntt(c); - -// Calculate Az - hints=0; - for (i=0;iomega) return false; - } - - H4(params,cct,mu,w1d); - - for (i=0;i<32;i++) - if (ct[i]!=cct[i]) - return false; - return true; -} - -void core::DLTHM_keypair_2(byte *tau,octet *sk,octet *pk) -{ - keypair(PARAMS_2,tau,sk,pk); -} - -int core::DLTHM_signature_2(octet *sk,octet *M,octet *sig) -{ - return signature(PARAMS_2,sk,M,sig); -} - -bool core::DLTHM_verify_2(octet *pk,octet *M,octet *sig) -{ - return verify(PARAMS_2,pk,M,sig); -} - - -void core::DLTHM_keypair_3(byte *tau,octet *sk,octet *pk) -{ - keypair(PARAMS_3,tau,sk,pk); -} - -int core::DLTHM_signature_3(octet *sk,octet *M,octet *sig) -{ - return signature(PARAMS_3,sk,M,sig); -} - -bool core::DLTHM_verify_3(octet *pk,octet *M,octet *sig) -{ - return verify(PARAMS_3,pk,M,sig); -} - -void core::DLTHM_keypair_5(byte *tau,octet *sk,octet *pk) -{ - keypair(PARAMS_5,tau,sk,pk); -} - -int core::DLTHM_signature_5(octet *sk,octet *M,octet *sig) -{ - return signature(PARAMS_5,sk,M,sig); -} - -bool core::DLTHM_verify_5(octet *pk,octet *M,octet *sig) -{ - return verify(PARAMS_5,pk,M,sig); -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh.cpp deleted file mode 100644 index dcba8b4..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh.cpp +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ECDH/ECIES/ECDSA API Functions */ - -#include -#include -#include -#include - -#include "ecdh_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#if CURVETYPE_ZZZ!=WEIERSTRASS -// Process a random BIG r by RFC7748 (for Montgomery & Edwards curves only) -static void RFC7748(BIG r) -{ - int c,lg=0; - BIG t; - c=ZZZ::CURVE_Cof_I; - while (c!=1) - { - lg++; - c/=2; - } - int n=8*EGS_ZZZ-lg+1; - BIG_mod2m(r,n); - BIG_zero(t); BIG_inc(t,1); BIG_shl(t,n); - BIG_add(r,r,t); - c=BIG_lastbits(r,lg); - BIG_dec(r,c); -// printf("lg= %d n=%d\n",lg,n); -} -#endif - -/* return 1 if S is in ranger 0 < S < order , else return 0 */ -int ZZZ::ECP_IN_RANGE(octet* S) -{ - BIG r,s; - BIG_rcopy(r, CURVE_Order); - BIG_fromBytes(s,S->val); - if (BIG_iszilch(s)) return 0; - if (BIG_comp(s,r)>=0) return 0; - return 1; -} - -/* Calculate a public/private EC GF(p) key pair. W=S.G mod EC(p), - * where S is the secret key and W is the public key - * and G is fixed generator. - * If RNG is NULL then the private key is provided externally in S - * otherwise it is generated randomly internally */ -int ZZZ::ECP_KEY_PAIR_GENERATE(csprng *RNG, octet* S, octet *W) -{ - BIG r, gx, gy, s; - ECP G; - int res = 0; - - ECP_generator(&G); - BIG_rcopy(r, CURVE_Order); - - if (RNG != NULL) - { -#if CURVETYPE_ZZZ!=WEIERSTRASS - BIG_random(s,RNG); // from random bytes -#else - BIG_randomnum(s, r, RNG); // Removes biases -#endif - } - else - { - BIG_fromBytes(s, S->val); - } - -#if CURVETYPE_ZZZ!=WEIERSTRASS - RFC7748(s); // For Montgomery or Edwards, apply RFC7748 transformation -#endif - S->len = EGS_ZZZ; - BIG_toBytes(S->val, s); - - ECP_clmul(&G, s, r); - ECP_toOctet(W, &G, false); // To use point compression on public keys, change to true - - return res; -} - -/* Validate public key */ -int ZZZ::ECP_PUBLIC_KEY_VALIDATE(octet *W) -{ - BIG q, r, wx, k; - ECP WP; - int valid, nb; - int res = 0; - - BIG_rcopy(q, Modulus); - BIG_rcopy(r, CURVE_Order); - - valid = ECP_fromOctet(&WP, W); - if (!valid) res = ECDH_INVALID_PUBLIC_KEY; - - if (res == 0) - { - - nb = BIG_nbits(q); - BIG_one(k); - BIG_shl(k, (nb + 4) / 2); - BIG_add(k, q, k); - BIG_sdiv(k, r); /* get co-factor */ - while (BIG_parity(k) == 0) - { - ECP_dbl(&WP); - BIG_fshr(k, 1); - } - - if (!BIG_isunity(k)) ECP_mul(&WP, k); - if (ECP_isinf(&WP)) res = ECDH_INVALID_PUBLIC_KEY; - } - - return res; -} - -/* IEEE-1363 Diffie-Hellman online calculation Z=S.WD */ -// type = 0 is just x coordinate output -// type = 1 for standard compressed output -// type = 2 for standard uncompress output 04|x|y -int ZZZ::ECP_SVDP_DH(octet *S, octet *WD, octet *Z,int type) -{ - BIG r, s, wx; - int valid; - ECP W; - int res = 0; - - BIG_fromBytes(s, S->val); - valid = ECP_fromOctet(&W, WD); - - if (!valid) res = ECDH_ERROR; - if (res == 0) - { - BIG_rcopy(r, CURVE_Order); - ECP_clmul(&W, s, r); - if (ECP_isinf(&W)) res = ECDH_ERROR; - else - { -#if CURVETYPE_ZZZ!=MONTGOMERY - if (type>0) - { - if (type==1) ECP_toOctet(Z,&W,true); - else ECP_toOctet(Z,&W,false); - return res; - } - else - ECP_get(wx, wx, &W); -#else - ECP_get(wx, &W); -#endif - } - Z->len = EFS_ZZZ; - BIG_toBytes(Z->val, wx); - } - return res; -} - -#if CURVETYPE_ZZZ!=MONTGOMERY - -/* IEEE ECDSA Signature, C and D are signature on F using private key S */ -int ZZZ::ECP_SP_DSA(int hlen, csprng *RNG, octet *K, octet *S, octet *F, octet *C, octet *D) -{ - char h[128]; - octet H = {0, sizeof(h), h}; - - BIG r, s, f, c, d, u, vx, w; - ECP G, V; - - SPhash(MC_SHA2, hlen, &H, F); - - ECP_generator(&G); - BIG_rcopy(r, CURVE_Order); - - BIG_fromBytes(s, S->val); - - int blen = H.len; - if (H.len > EGS_ZZZ) blen = EGS_ZZZ; - BIG_fromBytesLen(f, H.val, blen); - - if (RNG != NULL) - { - do - { - BIG_randomnum(u, r, RNG); - BIG_randomnum(w, r, RNG); /* IMPORTANT - side channel masking to protect invmodp() */ - - ECP_copy(&V, &G); - ECP_clmul(&V, u, r); - - ECP_get(vx, vx, &V); - - BIG_copy(c, vx); - BIG_mod(c, r); - if (BIG_iszilch(c)) continue; - - BIG_modmul(u, u, w, r); - - BIG_invmodp(u, u, r); - BIG_modmul(d, s, c, r); - - BIG_modadd(d, f, d, r); - BIG_modmul(d, d, w, r); - BIG_modmul(d, u, d, r); - - } - while (BIG_iszilch(d)); - } - else - { - BIG_fromBytes(u, K->val); - - ECP_copy(&V, &G); - ECP_clmul(&V, u, r); - - ECP_get(vx, vx, &V); - - BIG_copy(c, vx); - BIG_mod(c, r); - if (BIG_iszilch(c)) return ECDH_ERROR; - - BIG_invmodp(u, u, r); - BIG_modmul(d, s, c, r); - - BIG_modadd(d, f, d, r); - BIG_modmul(d, u, d, r); - if (BIG_iszilch(d)) return ECDH_ERROR; - } - - C->len = D->len = EGS_ZZZ; - - BIG_toBytes(C->val, c); - BIG_toBytes(D->val, d); - - return 0; -} - -/* IEEE1363 ECDSA Signature Verification. Signature C and D on F is verified using public key W */ -int ZZZ::ECP_VP_DSA(int hlen, octet *W, octet *F, octet *C, octet *D) -{ - char h[128]; - octet H = {0, sizeof(h), h}; - - BIG r, wx, wy, f, c, d, h2; - int res = 0; - ECP G, WP; - int valid; - - SPhash(MC_SHA2, hlen, &H, F); - - ECP_generator(&G); - BIG_rcopy(r, CURVE_Order); - - BIG_fromBytes(c, C->val); - BIG_fromBytes(d, D->val); - - int blen = H.len; - if (blen > EGS_ZZZ) blen = EGS_ZZZ; - - BIG_fromBytesLen(f, H.val, blen); - - if (BIG_iszilch(c) || BIG_comp(c, r) >= 0 || BIG_iszilch(d) || BIG_comp(d, r) >= 0) - res = ECDH_ERROR; - - if (res == 0) - { - BIG_invmodp(d, d, r); - BIG_modmul(f, f, d, r); - BIG_modmul(h2, c, d, r); - - valid = ECP_fromOctet(&WP, W); - if (!valid) res = ECDH_ERROR; - else - { - ECP_mul2(&WP, &G, h2, f); - if (ECP_isinf(&WP)) res = ECDH_ERROR; - else - { - ECP_get(d, d, &WP); - BIG_mod(d, r); - if (BIG_comp(d, c) != 0) res = ECDH_ERROR; - } - } - } - - return res; -} - -/* IEEE1363 ECIES encryption. Encryption of plaintext M uses public key W and produces ciphertext V,C,T */ -void ZZZ::ECP_ECIES_ENCRYPT(int hlen, octet *P1, octet *P2, csprng *RNG, octet *W, octet *M, int tlen, octet *V, octet *C, octet *T) -{ - - int i, len; - char z[EFS_ZZZ], vz[3 * EFS_ZZZ + 1], k[2 * AESKEY_ZZZ], k1[AESKEY_ZZZ], k2[AESKEY_ZZZ], l2[8], u[EFS_ZZZ]; - octet Z = {0, sizeof(z), z}; - octet VZ = {0, sizeof(vz), vz}; - octet K = {0, sizeof(k), k}; - octet K1 = {0, sizeof(k1), k1}; - octet K2 = {0, sizeof(k2), k2}; - octet L2 = {0, sizeof(l2), l2}; - octet U = {0, sizeof(u), u}; - - if (ECP_KEY_PAIR_GENERATE(RNG, &U, V) != 0) return; - if (ECP_SVDP_DH(&U, W, &Z,0) != 0) return; - - OCT_copy(&VZ, V); - OCT_joctet(&VZ, &Z); - - KDF2(MC_SHA2, hlen, &K, 2 * AESKEY_ZZZ, &VZ, P1); - - K1.len = K2.len = AESKEY_ZZZ; - for (i = 0; i < AESKEY_ZZZ; i++) - { - K1.val[i] = K.val[i]; - K2.val[i] = K.val[AESKEY_ZZZ + i]; - } - - AES_CBC_IV0_ENCRYPT(&K1, M, C); - - OCT_jint(&L2, P2->len, 8); - - len = C->len; - OCT_joctet(C, P2); - OCT_joctet(C, &L2); - HMAC(MC_SHA2, hlen, T, tlen, &K2, C); - C->len = len; -} - -/* IEEE1363 ECIES decryption. Decryption of ciphertext V,C,T using private key U outputs plaintext M */ -int ZZZ::ECP_ECIES_DECRYPT(int hlen, octet *P1, octet *P2, octet *V, octet *C, octet *T, octet *U, octet *M) -{ - - int i, len; - char z[EFS_ZZZ], vz[3 * EFS_ZZZ + 1], k[2 * AESKEY_ZZZ], k1[AESKEY_ZZZ], k2[AESKEY_ZZZ], l2[8], tag[32]; - octet Z = {0, sizeof(z), z}; - octet VZ = {0, sizeof(vz), vz}; - octet K = {0, sizeof(k), k}; - octet K1 = {0, sizeof(k1), k1}; - octet K2 = {0, sizeof(k2), k2}; - octet L2 = {0, sizeof(l2), l2}; - octet TAG = {0, sizeof(tag), tag}; - - if (ECP_SVDP_DH(U, V, &Z,0) != 0) return 0; - - OCT_copy(&VZ, V); - OCT_joctet(&VZ, &Z); - - KDF2(MC_SHA2, hlen, &K, 2 * AESKEY_ZZZ, &VZ, P1); - - K1.len = K2.len = AESKEY_ZZZ; - for (i = 0; i < AESKEY_ZZZ; i++) - { - K1.val[i] = K.val[i]; - K2.val[i] = K.val[AESKEY_ZZZ + i]; - } - - if (!AES_CBC_IV0_DECRYPT(&K1, C, M)) return 0; - - OCT_jint(&L2, P2->len, 8); - - len = C->len; - OCT_joctet(C, P2); - OCT_joctet(C, &L2); - HMAC(MC_SHA2, hlen, &TAG, T->len, &K2, C); - C->len = len; - - if (!OCT_ncomp(T, &TAG, T->len)) return 0; - - return 1; - -} - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp.cpp deleted file mode 100644 index 1ea8a2d..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp.cpp +++ /dev/null @@ -1,1798 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Elliptic Curve Functions */ -/* SU=m, SU is Stack Usage (Weierstrass Curves) */ - -//#define HAS_MAIN - -#include "ecp_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -/* test for P=O point-at-infinity */ -int ZZZ::ECP_isinf(ECP *P) -{ - -#if CURVETYPE_ZZZ==EDWARDS - return (FP_iszilch(&(P->x)) && FP_equals(&(P->y), &(P->z))); -#endif -#if CURVETYPE_ZZZ==WEIERSTRASS - return (FP_iszilch(&(P->x)) && FP_iszilch(&(P->z))); -#endif -#if CURVETYPE_ZZZ==MONTGOMERY - return FP_iszilch(&(P->z)); -#endif - -} - -/* Conditional swap of P and Q dependant on d */ -static void ECP_cswap(ZZZ::ECP *P, ZZZ::ECP *Q, int d) -{ - FP_cswap(&(P->x), &(Q->x), d); -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_cswap(&(P->y), &(Q->y), d); -#endif - FP_cswap(&(P->z), &(Q->z), d); - -} - -#if CURVETYPE_ZZZ!=MONTGOMERY -/* Conditional move Q to P dependant on d */ -static void ECP_cmove(ZZZ::ECP *P, ZZZ::ECP *Q, int d) -{ - FP_cmove(&(P->x), &(Q->x), d); -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_cmove(&(P->y), &(Q->y), d); -#endif - FP_cmove(&(P->z), &(Q->z), d); - -} - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} -#endif // CURVETYPE_ZZZ!=MONTGOMERY - -#if CURVETYPE_ZZZ!=MONTGOMERY -/* Constant time select from pre-computed table */ -static void ECP_select(ZZZ::ECP *P, ZZZ::ECP W[], sign32 b) -{ - ZZZ::ECP MP; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - ECP_cmove(P, &W[0], teq(babs, 0)); // conditional move - ECP_cmove(P, &W[1], teq(babs, 1)); - ECP_cmove(P, &W[2], teq(babs, 2)); - ECP_cmove(P, &W[3], teq(babs, 3)); - ECP_cmove(P, &W[4], teq(babs, 4)); - ECP_cmove(P, &W[5], teq(babs, 5)); - ECP_cmove(P, &W[6], teq(babs, 6)); - ECP_cmove(P, &W[7], teq(babs, 7)); - - ECP_copy(&MP, P); - ECP_neg(&MP); // minus P - ECP_cmove(P, &MP, (int)(m & 1)); -} -#endif - -/* Test P == Q */ -/* SU=168 */ -int ZZZ::ECP_equals(ECP *P, ECP *Q) -{ - FP a, b; - FP_mul(&a, &(P->x), &(Q->z)); - FP_mul(&b, &(Q->x), &(P->z)); - if (!FP_equals(&a, &b)) return 0; - -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_mul(&a, &(P->y), &(Q->z)); - FP_mul(&b, &(Q->y), &(P->z)); - if (!FP_equals(&a, &b)) return 0; -#endif - - return 1; -} - -/* Set P=Q */ -/* SU=16 */ -void ZZZ::ECP_copy(ECP *P, ECP *Q) -{ - FP_copy(&(P->x), &(Q->x)); -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_copy(&(P->y), &(Q->y)); -#endif - FP_copy(&(P->z), &(Q->z)); -} - -/* Set P=-Q */ -#if CURVETYPE_ZZZ!=MONTGOMERY -/* SU=8 */ -void ZZZ::ECP_neg(ECP *P) -{ -#if CURVETYPE_ZZZ==WEIERSTRASS - FP_neg(&(P->y), &(P->y)); - FP_norm(&(P->y)); -#else - FP_neg(&(P->x), &(P->x)); - FP_norm(&(P->x)); -#endif - -} -#endif - -/* Set P=O */ -void ZZZ::ECP_inf(ECP *P) -{ - FP_zero(&(P->x)); -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_one(&(P->y)); -#endif -#if CURVETYPE_ZZZ!=EDWARDS - FP_zero(&(P->z)); -#else - FP_one(&(P->z)); -#endif -} - -/* Calculate right Hand Side of curve equation y^2=RHS */ -/* SU=56 */ -void ZZZ::ECP_rhs(FP *v, FP *x) -{ -#if CURVETYPE_ZZZ==WEIERSTRASS - /* x^3+Ax+B */ - FP t; - FP_sqr(&t, x); - FP_mul(&t, &t, x); - -#if CURVE_A_ZZZ == -3 - - FP_neg(v, x); - FP_norm(v); - FP_imul(v, v, -CURVE_A_ZZZ); - FP_norm(v); - FP_add(v, &t, v); -#else - FP_copy(v, &t); -#endif - FP_rcopy(&t, CURVE_B); - - FP_add(v, &t, v); - FP_reduce(v); -#endif - -#if CURVETYPE_ZZZ==EDWARDS - /* (Ax^2-1)/(Bx^2-1) */ - FP t, one; - FP_sqr(v, x); - FP_one(&one); - FP_rcopy(&t, CURVE_B); - - FP_mul(&t, v, &t); - FP_sub(&t, &t, &one); - FP_norm(&t); -#if CURVE_A_ZZZ == 1 - FP_sub(v, v, &one); -#endif -#if CURVE_A_ZZZ == -1 - FP_add(v, v, &one); - FP_norm(v); - FP_neg(v, v); -#endif - FP_norm(v); - FP_inv(&t, &t, NULL); - FP_mul(v, v, &t); - FP_reduce(v); -#endif - -#if CURVETYPE_ZZZ==MONTGOMERY - /* x^3+Ax^2+x */ - FP x2, x3; - FP_sqr(&x2, x); - FP_mul(&x3, &x2, x); - FP_copy(v, x); - FP_imul(&x2, &x2, CURVE_A_ZZZ); - FP_add(v, v, &x2); - FP_add(v, v, &x3); - FP_reduce(v); -#endif -} - -/* Set P=(x,y) */ - -#if CURVETYPE_ZZZ==MONTGOMERY - -/* Set P=(x,{y}) */ - -int ZZZ::ECP_set(ECP *P, BIG x) -{ - FP rhs; - FP_nres(&rhs, x); - - ECP_rhs(&rhs, &rhs); - - if (!FP_qr(&rhs,NULL)) - { - ECP_inf(P); - return 0; - } - - FP_nres(&(P->x), x); - FP_one(&(P->z)); - return 1; -} - -/* Extract x coordinate as BIG */ -int ZZZ::ECP_get(BIG x, ECP *P) -{ - ECP W; - ECP_copy(&W, P); - ECP_affine(&W); - if (ECP_isinf(&W)) return -1; - FP_redc(x, &(W.x)); - return 0; -} - - -#else -/* Extract (x,y) and return sign of y. If x and y are the same return only x */ -/* SU=16 */ -int ZZZ::ECP_get(BIG x, BIG y, ECP *P) -{ - ECP W; - ECP_copy(&W, P); - ECP_affine(&W); - if (ECP_isinf(&W)) return -1; - FP_redc(y, &(W.y)); - FP_redc(x, &(W.x)); - return FP_sign(&(W.y)); -} - -/* Set P=(x,{y}) */ -/* SU=96 */ -int ZZZ::ECP_set(ECP *P, BIG x, BIG y) -{ - FP rhs, y2; - - FP_nres(&y2, y); - FP_sqr(&y2, &y2); - FP_reduce(&y2); - - FP_nres(&rhs, x); - ECP_rhs(&rhs, &rhs); - - if (!FP_equals(&y2, &rhs)) - { - ECP_inf(P); - return 0; - } - - FP_nres(&(P->x), x); - FP_nres(&(P->y), y); - FP_one(&(P->z)); - return 1; -} - -/* Set P=(x,y), where y is calculated from x with sign s */ -/* SU=136 */ -int ZZZ::ECP_setx(ECP *P, BIG x, int s) -{ - FP rhs,hint; - FP_nres(&rhs, x); - - ECP_rhs(&rhs, &rhs); - - if (!FP_qr(&rhs,&hint)) - { - ECP_inf(P); - return 0; - } - - FP_nres(&(P->x), x); - FP_sqrt(&(P->y), &rhs, &hint); - - if (FP_sign(&(P->y))!=s) - FP_neg(&(P->y), &(P->y)); - FP_reduce(&(P->y)); - FP_one(&(P->z)); - return 1; -} - -#endif - -/* Convert P to Affine, from (x,y,z) to (x,y) */ -/* SU=160 */ -void ZZZ::ECP_affine(ECP *P) -{ - FP one, iz; - if (ECP_isinf(P)) return; - FP_one(&one); - if (FP_equals(&(P->z), &one)) return; - - FP_inv(&iz, &(P->z), NULL); - FP_mul(&(P->x), &(P->x), &iz); - -#if CURVETYPE_ZZZ==EDWARDS || CURVETYPE_ZZZ==WEIERSTRASS - - FP_mul(&(P->y), &(P->y), &iz); - FP_reduce(&(P->y)); - -#endif - - FP_reduce(&(P->x)); - FP_copy(&(P->z), &one); -} - -/* SU=120 */ -void ZZZ::ECP_outputxyz(ECP *P) -{ - BIG x, z; - if (ECP_isinf(P)) - { - printf("Infinity\n"); - return; - } - FP_reduce(&(P->x)); - FP_redc(x, &(P->x)); - FP_reduce(&(P->z)); - FP_redc(z, &(P->z)); - -#if CURVETYPE_ZZZ!=MONTGOMERY - BIG y; - FP_reduce(&(P->y)); - FP_redc(y, &(P->y)); - printf("("); - BIG_output(x); - printf(","); - BIG_output(y); - printf(","); - BIG_output(z); - printf(")\n"); - -#else - printf("("); - BIG_output(x); - printf(","); - BIG_output(z); - printf(")\n"); -#endif -} - -/* SU=16 */ -/* Output point P */ -void ZZZ::ECP_output(ECP *P) -{ - BIG x, y; - if (ECP_isinf(P)) - { - printf("Infinity\n"); - return; - } - ECP_affine(P); -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_reduce(&(P->x)); - FP_reduce(&(P->y)); - FP_redc(x, &(P->x)); - FP_redc(y, &(P->y)); - printf("("); - BIG_output(x); - printf(","); - BIG_output(y); - printf(")\n"); -#else - FP_reduce(&(P->x)); - FP_redc(x, &(P->x)); - printf("("); - BIG_output(x); - printf(")\n"); -#endif -} - -/* SU=16 */ -/* Output point P */ -void ZZZ::ECP_rawoutput(ECP *P) -{ - BIG x, y, z; - -#if CURVETYPE_ZZZ!=MONTGOMERY - FP_redc(x, &(P->x)); - FP_redc(y, &(P->y)); - FP_redc(z, &(P->z)); - printf("("); - BIG_output(x); - printf(","); - BIG_output(y); - printf(","); - BIG_output(z); - printf(")\n"); -#else - FP_redc(x, &(P->x)); - FP_redc(z, &(P->z)); - printf("("); - BIG_output(x); - printf(","); - BIG_output(z); - printf(")\n"); -#endif -} - -/* SU=88 */ -/* Convert P to octet string, compressing if desired */ -void ZZZ::ECP_toOctet(octet *W, ECP *P, bool compress) -{ -#if CURVETYPE_ZZZ==MONTGOMERY - BIG x; - ECP_get(x, P); - W->len = MODBYTES_XXX; // + 1; - BIG_toBytes(&(W->val[0]), x); -#else - BIG x, y; - bool alt=false; - ECP_affine(P); - ECP_get(x, y, P); - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - BIG_toBytes(&(W->val[0]), x); - if (compress) - { - W->len = MODBYTES_XXX; - W->val[0]|=0x80; - if (FP_islarger(&(P->y))==1) W->val[0]|=0x20; - } else { - W->len = 2 * MODBYTES_XXX; - BIG_toBytes(&(W->val[MODBYTES_XXX]), y); - } - } else { - BIG_toBytes(&(W->val[1]), x); - if (compress) - { - W->val[0] = 0x02; - if (FP_sign(&(P->y)) == 1) W->val[0] = 0x03; - W->len = MODBYTES_XXX + 1; - } else { - W->val[0] = 0x04; - W->len = 2 * MODBYTES_XXX + 1; - BIG_toBytes(&(W->val[MODBYTES_XXX + 1]), y); - } - } -#endif -} - -/* SU=88 */ -/* Restore P from octet string */ -int ZZZ::ECP_fromOctet(ECP *P, octet *W) -{ -#if CURVETYPE_ZZZ==MONTGOMERY - BIG x; - BIG_fromBytes(x, &(W->val[0])); - if (ECP_set(P, x)) return 1; - return 0; -#else - BIG x, y; - bool alt=false; - int sgn,cmp,typ = W->val[0]; - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - W->val[0]&=0x1f; - BIG_fromBytes(x, &(W->val[0])); - W->val[0]=typ; - if ((typ&0x80)==0) - { - BIG_fromBytes(y, &(W->val[MODBYTES_XXX])); - if (ECP_set(P, x, y)) return 1; - return 0; - } else { - if (!ECP_setx(P,x,0)) return 0; - sgn=(typ&0x20)>>5; - cmp=FP_islarger(&(P->y)); - if ((sgn==1 && cmp!=1) || (sgn==0 && cmp==1)) ECP_neg(P); - return 1; - } - - } else { - BIG_fromBytes(x, &(W->val[1])); - if (typ == 0x04) - { - BIG_fromBytes(y, &(W->val[MODBYTES_XXX + 1])); - if (ECP_set(P, x, y)) return 1; - } - if (typ == 0x02 || typ == 0x03) - { - if (ECP_setx(P, x, typ & 1)) return 1; - } - } - return 0; -#endif -} - - -/* Set P=2P */ -/* SU=272 */ -void ZZZ::ECP_dbl(ECP *P) -{ -#if CURVETYPE_ZZZ==WEIERSTRASS - FP t0, t1, t2, t3, x3, y3, z3, b; - -#if CURVE_A_ZZZ == 0 - - FP_sqr(&t0, &(P->y)); //t0.sqr(); - FP_mul(&t1, &(P->y), &(P->z)); //t1.mul(z); - - FP_sqr(&t2, &(P->z)); //t2.sqr(); - - FP_add(&(P->z), &t0, &t0); //z.add(t0); - FP_norm(&(P->z)); //z.norm(); - FP_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP_norm(&(P->z)); //z.norm(); - - FP_imul(&t2, &t2, 3 * CURVE_B_I); //t2.imul(3*ROM.CURVE_B_I); - FP_mul(&x3, &t2, &(P->z)); //x3.mul(z); - - FP_add(&y3, &t0, &t2); //y3.add(t2); - FP_norm(&y3); //y3.norm(); - FP_mul(&(P->z), &(P->z), &t1); //z.mul(t1); - - FP_add(&t1, &t2, &t2); //t1.add(t2); - FP_add(&t2, &t2, &t1); //t2.add(t1); - FP_sub(&t0, &t0, &t2); //t0.sub(t2); - FP_norm(&t0); //t0.norm(); - FP_mul(&y3, &y3, &t0); //y3.mul(t0); - FP_add(&y3, &y3, &x3); //y3.add(x3); - - FP_mul(&t1, &(P->x), &(P->y)); //t1.mul(y); - FP_norm(&t0); //x.norm(); - FP_mul(&(P->x), &t0, &t1); //x.mul(t1); - FP_add(&(P->x), &(P->x), &(P->x)); //x.add(x); - FP_norm(&(P->x)); //x.norm(); - FP_copy(&(P->y), &y3); //y.copy(y3); - FP_norm(&(P->y)); //y.norm(); -#else - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - FP_rcopy(&b, CURVE_B); //b.copy(new FP(new BIG(ROM.CURVE_B))); - - FP_sqr(&t0, &(P->x)); //t0.sqr(); //1 x^2 - FP_sqr(&t1, &(P->y)); //t1.sqr(); //2 y^2 - FP_sqr(&t2, &(P->z)); //t2.sqr(); //3 - - FP_mul(&t3, &(P->x), &(P->y)); //t3.mul(y); //4 - FP_add(&t3, &t3, &t3); //t3.add(t3); - FP_norm(&t3); //t3.norm();//5 - - FP_mul(&z3, &(P->z), &(P->x)); //z3.mul(x); //6 - FP_add(&z3, &z3, &z3); //z3.add(z3); - FP_norm(&z3); //z3.norm();//7 - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - FP_mul(&y3, &t2, &b); //y3.mul(b); //8 - else - FP_imul(&y3, &t2, CURVE_B_I); //y3.imul(ROM.CURVE_B_I); - - FP_sub(&y3, &y3, &z3); //y3.sub(z3); //y3.norm(); //9 *** - FP_add(&x3, &y3, &y3); //x3.add(y3); - FP_norm(&x3); //x3.norm();//10 - - FP_add(&y3, &y3, &x3); //y3.add(x3); //y3.norm();//11 - FP_sub(&x3, &t1, &y3); //x3.sub(y3); - FP_norm(&x3); //x3.norm();//12 - FP_add(&y3, &y3, &t1); //y3.add(t1); - FP_norm(&y3); //y3.norm();//13 - FP_mul(&y3, &y3, &x3); //y3.mul(x3); //14 - FP_mul(&x3, &x3, &t3); //x3.mul(t3); //15 - FP_add(&t3, &t2, &t2); //t3.add(t2); //16 - FP_add(&t2, &t2, &t3); //t2.add(t3); //17 - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - FP_mul(&z3, &z3, &b); //z3.mul(b); //18 - else - FP_imul(&z3, &z3, CURVE_B_I); //z3.imul(ROM.CURVE_B_I); - - FP_sub(&z3, &z3, &t2); //z3.sub(t2); //z3.norm();//19 - FP_sub(&z3, &z3, &t0); //z3.sub(t0); - FP_norm(&z3); //z3.norm();//20 *** - FP_add(&t3, &z3, &z3); //t3.add(z3); //t3.norm();//21 - - FP_add(&z3, &z3, &t3); //z3.add(t3); - FP_norm(&z3); //z3.norm(); //22 - FP_add(&t3, &t0, &t0); //t3.add(t0); //t3.norm(); //23 - FP_add(&t0, &t0, &t3); //t0.add(t3); //t0.norm();//24 - FP_sub(&t0, &t0, &t2); //t0.sub(t2); - FP_norm(&t0); //t0.norm();//25 - - FP_mul(&t0, &t0, &z3); //t0.mul(z3);//26 - FP_add(&y3, &y3, &t0); //y3.add(t0); //y3.norm();//27 - FP_mul(&t0, &(P->y), &(P->z)); //t0.mul(z);//28 - FP_add(&t0, &t0, &t0); //t0.add(t0); - FP_norm(&t0); //t0.norm(); //29 - FP_mul(&z3, &z3, &t0); //z3.mul(t0);//30 - FP_sub(&(P->x), &x3, &z3); //x3.sub(z3); //x3.norm();//31 - FP_add(&t0, &t0, &t0); //t0.add(t0); - FP_norm(&t0); //t0.norm();//32 - FP_add(&t1, &t1, &t1); //t1.add(t1); - FP_norm(&t1); //t1.norm();//33 - FP_mul(&(P->z), &t0, &t1); //z3.mul(t1);//34 - - FP_norm(&(P->x)); //x.norm(); - FP_copy(&(P->y), &y3); //y.copy(y3); - FP_norm(&(P->y)); //y.norm(); - FP_norm(&(P->z)); //z.norm(); -#endif -#endif - -#if CURVETYPE_ZZZ==EDWARDS - /* Not using square for multiplication swap, as (1) it needs more adds, and (2) it triggers more reductions */ - - FP C, D, H, J; - FP_sqr(&C, &(P->x)); //C.sqr(); - FP_mul(&(P->x), &(P->x), &(P->y)); //x.mul(y); - FP_add(&(P->x), &(P->x), &(P->x)); //x.add(x); - FP_norm(&(P->x)); //x.norm(); - - FP_sqr(&D, &(P->y)); //D.sqr(); - -#if CURVE_A_ZZZ == -1 - FP_neg(&C, &C); // C.neg(); -#endif - FP_add(&(P->y), &C, &D); //y.add(D); - FP_norm(&(P->y)); //y.norm(); - FP_sqr(&H, &(P->z)); //H.sqr(); - FP_add(&H, &H, &H); //H.add(H); - - FP_sub(&J, &(P->y), &H); //J.sub(H); - FP_norm(&J); //J.norm(); - - FP_mul(&(P->x), &(P->x), &J); //x.mul(J); - FP_sub(&C, &C, &D); //C.sub(D); - FP_norm(&C); //C.norm(); - FP_mul(&(P->z), &(P->y), &J); //z.mul(J); - FP_mul(&(P->y), &(P->y), &C); //y.mul(C); - - -#endif - -#if CURVETYPE_ZZZ==MONTGOMERY - FP A, B, AA, BB, C; - - FP_add(&A, &(P->x), &(P->z)); //A.add(z); - FP_norm(&A); //A.norm(); - FP_sqr(&AA, &A); //AA.sqr(); - FP_sub(&B, &(P->x), &(P->z)); //B.sub(z); - FP_norm(&B); //B.norm(); - FP_sqr(&BB, &B); //BB.sqr(); - FP_sub(&C, &AA, &BB); //C.sub(BB); - FP_norm(&C); //C.norm(); - FP_mul(&(P->x), &AA, &BB); //x.mul(BB); - - FP_imul(&A, &C, (CURVE_A_ZZZ + 2) / 4); //A.imul((ROM.CURVE_A+2)/4); - - FP_add(&BB, &BB, &A); //BB.add(A); - FP_norm(&BB); //BB.norm(); - FP_mul(&(P->z), &BB, &C); //z.mul(C); - -#endif -} - -#if CURVETYPE_ZZZ==MONTGOMERY - -/* Set P+=Q. W is difference between P and Q and is affine */ -void ZZZ::ECP_add(ECP *P, ECP *Q, ECP *W) -{ - FP A, B, C, D, DA, CB; - - FP_add(&A, &(P->x), &(P->z)); //A.add(z); - FP_sub(&B, &(P->x), &(P->z)); //B.sub(z); - - FP_add(&C, &(Q->x), &(Q->z)); //C.add(Q.z); - FP_sub(&D, &(Q->x), &(Q->z)); //D.sub(Q.z); - - FP_norm(&A); //A.norm(); - FP_norm(&D); //D.norm(); - FP_mul(&DA, &D, &A); //DA.mul(A); - - FP_norm(&C); //C.norm(); - FP_norm(&B); //B.norm(); - FP_mul(&CB, &C, &B); //CB.mul(B); - - FP_add(&A, &DA, &CB); //A.add(CB); - FP_norm(&A); //A.norm(); - FP_sqr(&(P->x), &A); //A.sqr(); - FP_sub(&B, &DA, &CB); //B.sub(CB); - FP_norm(&B); //B.norm(); - FP_sqr(&B, &B); //B.sqr(); - - FP_mul(&(P->z), &(W->x), &B); //z.mul(B); -} - -#else - -/* Set P+=Q */ -/* SU=248 */ -void ZZZ::ECP_add(ECP *P, ECP *Q) -{ -#if CURVETYPE_ZZZ==WEIERSTRASS - - int b3; - FP t0, t1, t2, t3, t4, x3, y3, z3, b; - -#if CURVE_A_ZZZ == 0 - b3 = 3 * CURVE_B_I; //int b=3*ROM.CURVE_B_I; - FP_mul(&t0, &(P->x), &(Q->x)); //t0.mul(Q.x); - FP_mul(&t1, &(P->y), &(Q->y)); //t1.mul(Q.y); - FP_mul(&t2, &(P->z), &(Q->z)); //t2.mul(Q.z); - FP_add(&t3, &(P->x), &(P->y)); //t3.add(y); - FP_norm(&t3); //t3.norm(); - FP_add(&t4, &(Q->x), &(Q->y)); //t4.add(Q.y); - FP_norm(&t4); //t4.norm(); - FP_mul(&t3, &t3, &t4); //t3.mul(t4); - FP_add(&t4, &t0, &t1); //t4.add(t1); - - FP_sub(&t3, &t3, &t4); //t3.sub(t4); - FP_norm(&t3); //t3.norm(); - FP_add(&t4, &(P->y), &(P->z)); //t4.add(z); - FP_norm(&t4); //t4.norm(); - FP_add(&x3, &(Q->y), &(Q->z)); //x3.add(Q.z); - FP_norm(&x3); //x3.norm(); - - FP_mul(&t4, &t4, &x3); //t4.mul(x3); - FP_add(&x3, &t1, &t2); //x3.add(t2); - - FP_sub(&t4, &t4, &x3); //t4.sub(x3); - FP_norm(&t4); //t4.norm(); - FP_add(&x3, &(P->x), &(P->z)); //x3.add(z); - FP_norm(&x3); //x3.norm(); - FP_add(&y3, &(Q->x), &(Q->z)); //y3.add(Q.z); - FP_norm(&y3); //y3.norm(); - FP_mul(&x3, &x3, &y3); //x3.mul(y3); - FP_add(&y3, &t0, &t2); //y3.add(t2); - FP_sub(&y3, &x3, &y3); //y3.rsub(x3); - FP_norm(&y3); //y3.norm(); - FP_add(&x3, &t0, &t0); //x3.add(t0); - FP_add(&t0, &t0, &x3); //t0.add(x3); - FP_norm(&t0); //t0.norm(); - FP_imul(&t2, &t2, b3); //t2.imul(b); - - FP_add(&z3, &t1, &t2); //z3.add(t2); - FP_norm(&z3); //z3.norm(); - FP_sub(&t1, &t1, &t2); //t1.sub(t2); - FP_norm(&t1); //t1.norm(); - FP_imul(&y3, &y3, b3); //y3.imul(b); - - FP_mul(&x3, &y3, &t4); //x3.mul(t4); - FP_mul(&t2, &t3, &t1); //t2.mul(t1); - FP_sub(&(P->x), &t2, &x3); //x3.rsub(t2); - FP_mul(&y3, &y3, &t0); //y3.mul(t0); - FP_mul(&t1, &t1, &z3); //t1.mul(z3); - FP_add(&(P->y), &y3, &t1); //y3.add(t1); - FP_mul(&t0, &t0, &t3); //t0.mul(t3); - FP_mul(&z3, &z3, &t4); //z3.mul(t4); - FP_add(&(P->z), &z3, &t0); //z3.add(t0); - - FP_norm(&(P->x)); //x.norm(); - FP_norm(&(P->y)); //y.norm(); - FP_norm(&(P->z)); //z.norm(); -#else - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - FP_rcopy(&b, CURVE_B); //b.copy(new FP(new BIG(ROM.CURVE_B))); - - FP_mul(&t0, &(P->x), &(Q->x)); //t0.mul(Q.x); //1 - FP_mul(&t1, &(P->y), &(Q->y)); //t1.mul(Q.y); //2 - FP_mul(&t2, &(P->z), &(Q->z)); //t2.mul(Q.z); //3 - - FP_add(&t3, &(P->x), &(P->y)); //t3.add(y); - FP_norm(&t3); //t3.norm(); //4 - FP_add(&t4, &(Q->x), &(Q->y)); //t4.add(Q.y); - FP_norm(&t4); //t4.norm();//5 - FP_mul(&t3, &t3, &t4); //t3.mul(t4);//6 - FP_add(&t4, &t0, &t1); //t4.add(t1); //t4.norm(); //7 - FP_sub(&t3, &t3, &t4); //t3.sub(t4); - FP_norm(&t3); //t3.norm(); //8 - FP_add(&t4, &(P->y), &(P->z)); //t4.add(z); - FP_norm(&t4); //t4.norm();//9 - FP_add(&x3, &(Q->y), &(Q->z)); //x3.add(Q.z); - FP_norm(&x3); //x3.norm();//10 - FP_mul(&t4, &t4, &x3); //t4.mul(x3); //11 - FP_add(&x3, &t1, &t2); //x3.add(t2); //x3.norm();//12 - - FP_sub(&t4, &t4, &x3); //t4.sub(x3); - FP_norm(&t4); //t4.norm();//13 - FP_add(&x3, &(P->x), &(P->z)); //x3.add(z); - FP_norm(&x3); //x3.norm(); //14 - FP_add(&y3, &(Q->x), &(Q->z)); //y3.add(Q.z); - FP_norm(&y3); //y3.norm();//15 - - FP_mul(&x3, &x3, &y3); //x3.mul(y3); //16 - FP_add(&y3, &t0, &t2); //y3.add(t2); //y3.norm();//17 - - FP_sub(&y3, &x3, &y3); //y3.rsub(x3); - FP_norm(&y3); //y3.norm(); //18 - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - FP_mul(&z3, &t2, &b); //z3.mul(b); //18 - else - FP_imul(&z3, &t2, CURVE_B_I); //z3.imul(ROM.CURVE_B_I); - - FP_sub(&x3, &y3, &z3); //x3.sub(z3); - FP_norm(&x3); //x3.norm(); //20 - FP_add(&z3, &x3, &x3); //z3.add(x3); //z3.norm(); //21 - - FP_add(&x3, &x3, &z3); //x3.add(z3); //x3.norm(); //22 - FP_sub(&z3, &t1, &x3); //z3.sub(x3); - FP_norm(&z3); //z3.norm(); //23 - FP_add(&x3, &x3, &t1); //x3.add(t1); - FP_norm(&x3); //x3.norm(); //24 - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - FP_mul(&y3, &y3, &b); //y3.mul(b); //18 - else - FP_imul(&y3, &y3, CURVE_B_I); //y3.imul(ROM.CURVE_B_I); - - FP_add(&t1, &t2, &t2); //t1.add(t2); //t1.norm();//26 - FP_add(&t2, &t2, &t1); //t2.add(t1); //t2.norm();//27 - - FP_sub(&y3, &y3, &t2); //y3.sub(t2); //y3.norm(); //28 - - FP_sub(&y3, &y3, &t0); //y3.sub(t0); - FP_norm(&y3); //y3.norm(); //29 - FP_add(&t1, &y3, &y3); //t1.add(y3); //t1.norm();//30 - FP_add(&y3, &y3, &t1); //y3.add(t1); - FP_norm(&y3); //y3.norm(); //31 - - FP_add(&t1, &t0, &t0); //t1.add(t0); //t1.norm(); //32 - FP_add(&t0, &t0, &t1); //t0.add(t1); //t0.norm();//33 - FP_sub(&t0, &t0, &t2); //t0.sub(t2); - FP_norm(&t0); //t0.norm();//34 - FP_mul(&t1, &t4, &y3); //t1.mul(y3);//35 - FP_mul(&t2, &t0, &y3); //t2.mul(y3);//36 - FP_mul(&y3, &x3, &z3); //y3.mul(z3);//37 - FP_add(&(P->y), &y3, &t2); //y3.add(t2); //y3.norm();//38 - FP_mul(&x3, &x3, &t3); //x3.mul(t3);//39 - FP_sub(&(P->x), &x3, &t1); //x3.sub(t1);//40 - FP_mul(&z3, &z3, &t4); //z3.mul(t4);//41 - - FP_mul(&t1, &t3, &t0); //t1.mul(t0);//42 - FP_add(&(P->z), &z3, &t1); //z3.add(t1); - FP_norm(&(P->x)); //x.norm(); - FP_norm(&(P->y)); //y.norm(); - FP_norm(&(P->z)); //z.norm(); -#endif - -#else - FP A, B, C, D, E, F, G, b; - - FP_mul(&A, &(P->z), &(Q->z)); //A.mul(Q.z); - FP_sqr(&B, &A); //B.sqr(); - FP_mul(&C, &(P->x), &(Q->x)); //C.mul(Q.x); - FP_mul(&D, &(P->y), &(Q->y)); //D.mul(Q.y); - - FP_mul(&E, &C, &D); //E.mul(D); - - if (CURVE_B_I == 0) //if (ROM.CURVE_B_I==0) - { - FP_rcopy(&b, CURVE_B); //FP b=new FP(new BIG(ROM.CURVE_B)); - FP_mul(&E, &E, &b); //E.mul(b); - } - else - FP_imul(&E, &E, CURVE_B_I); //E.imul(ROM.CURVE_B_I); - - FP_sub(&F, &B, &E); //F.sub(E); - FP_add(&G, &B, &E); //G.add(E); - -#if CURVE_A_ZZZ == 1 - FP_sub(&E, &D, &C); //E.sub(C); -#endif - FP_add(&C, &C, &D); //C.add(D); - - FP_add(&B, &(P->x), &(P->y)); //B.add(y); - FP_add(&D, &(Q->x), &(Q->y)); //D.add(Q.y); - FP_norm(&B); //B.norm(); - FP_norm(&D); //D.norm(); - FP_mul(&B, &B, &D); //B.mul(D); - FP_sub(&B, &B, &C); //B.sub(C); - FP_norm(&B); //B.norm(); - FP_norm(&F); //F.norm(); - FP_mul(&B, &B, &F); //B.mul(F); - FP_mul(&(P->x), &A, &B); //x.mul(B); - FP_norm(&G); //G.norm(); - -#if CURVE_A_ZZZ == 1 - FP_norm(&E); //E.norm(); - FP_mul(&C, &E, &G); //C.mul(G); -#endif - -#if CURVE_A_ZZZ == -1 - FP_norm(&C); //C.norm(); - FP_mul(&C, &C, &G); //C.mul(G); -#endif - FP_mul(&(P->y), &A, &C); //y.mul(C); - FP_mul(&(P->z), &F, &G); //z.mul(G); - -#endif -} - -/* Set P-=Q */ -/* SU=16 */ -void ZZZ::ECP_sub(ECP *P, ECP *Q) -{ - ECP NQ; - ECP_copy(&NQ, Q); - ECP_neg(&NQ); - ECP_add(P, &NQ); -} - -#endif - -#if CURVETYPE_ZZZ!=MONTGOMERY -/* constant time multiply by small integer of length bts - use ladder */ -void ZZZ::ECP_pinmul(ECP *P, int e, int bts) -{ - int i, b; - ECP R0, R1; - - ECP_affine(P); - ECP_inf(&R0); - ECP_copy(&R1, P); - - for (i = bts - 1; i >= 0; i--) - { - b = (e >> i) & 1; - ECP_copy(P, &R1); - ECP_add(P, &R0); - ECP_cswap(&R0, &R1, b); - ECP_copy(&R1, P); - ECP_dbl(&R0); - ECP_cswap(&R0, &R1, b); - } - ECP_copy(P, &R0); -} -#endif - -// Point multiplication, multiplies a point P by a scalar e -// This code has no inherent awareness of the order of the curve, or the order of the point. -// The order of the curve will be h.r, where h is a cofactor, and r is a large prime -// Typically P will be of order r (but not always), and typically e will be less than r (but not always) -// A problem can arise if a secret e is a few bits less than r, as the leading zeros in e will leak via a timing attack -// The secret e may however be greater than r (see RFC7748 which combines elimination of a small cofactor h with the point multiplication, using an e>r) -// Our solution is to use as a multiplier an e, whose length in bits is that of the logical OR of e and r, hence allowing e>r while forcing inclusion of leading zeros if e= 0; i--) - { - b = BIG_bit(e, i); - ECP_copy(P, &R1); - ECP_add(P, &R0, &D); - ECP_cswap(&R0, &R1, b); - ECP_copy(&R1, P); - ECP_dbl(&R0); - - ECP_cswap(&R0, &R1, b); - } - - ECP_copy(P, &R0); - -#else - /* fixed size windows */ - int i, nb, s, ns; - BIG mt, t; - ECP Q, W[8], C; - sign8 w[1 + (NLEN_XXX * BASEBITS_XXX + 3) / 4]; - - if (ECP_isinf(P)) return; - if (BIG_iszilch(e)) - { - ECP_inf(P); - return; - } - - /* precompute table */ - ECP_copy(&Q, P); - ECP_dbl(&Q); - ECP_copy(&W[0], P); - - for (i = 1; i < 8; i++) - { - ECP_copy(&W[i], &W[i - 1]); - ECP_add(&W[i], &Q); - } - - /* make exponent odd - add 2P if even, P if odd */ - BIG_copy(t, e); - s = BIG_parity(t); - BIG_inc(t, 1); - BIG_norm(t); - ns = BIG_parity(t); - BIG_copy(mt, t); - BIG_inc(mt, 1); - BIG_norm(mt); - BIG_cmove(t, mt, s); - ECP_cmove(&Q, P, ns); - ECP_copy(&C, &Q); - - nb = 1 + (max + 3) / 4; - /* convert exponent to signed 4-bit window */ - for (i = 0; i < nb; i++) - { - w[i] = BIG_lastbits(t, 5) - 16; - BIG_dec(t, w[i]); - BIG_norm(t); - BIG_fshr(t, 4); - } - w[nb] = BIG_lastbits(t, 5); - - ECP_select(P, W, w[nb]); - for (i = nb - 1; i >= 0; i--) - { - ECP_select(&Q, W, w[i]); - ECP_dbl(P); - ECP_dbl(P); - ECP_dbl(P); - ECP_dbl(P); - ECP_add(P, &Q); - } - ECP_sub(P, &C); /* apply correction */ -#endif -} - -#if CURVETYPE_ZZZ!=MONTGOMERY - -// Generic multi-multiplication, fixed 4-bit window, P=Sigma e_i*X_i -// m point doublings -void ZZZ::ECP_muln(ECP *P,int n,ECP X[],BIG e[]) -{ - int i,j,k,nb; - BIG t,mt; - ECP S,R,B[16]; - ECP_inf(P); - - BIG_copy(mt,e[0]); BIG_norm(mt); - for (i=1;i=0;i--) - { // Pippenger's algorithm - for (j=0;j<16;j++) - ECP_inf(&B[j]); - for (j=0;j=1;j--) - { - ECP_add(&R,&B[j]); - ECP_add(&S,&R); - } - for (j=0;j<4;j++) - ECP_dbl(P); - ECP_add(P,&S); - } -} - -void ZZZ::ECP_mul2(ECP *P, ECP *Q, BIG e, BIG f) -{ - ECP_clmul2(P,Q,e,f,e); -} - -/* Set P=eP+fQ double multiplication */ -/* constant time - as useful for GLV method in pairings */ -/* SU=456 */ - -void ZZZ::ECP_clmul2(ECP *P, ECP *Q, BIG e, BIG f, BIG maxe) -{ - BIG cm; - BIG te, tf, mt; - ECP S, T, W[8], C; - sign8 w[1 + (NLEN_XXX * BASEBITS_XXX + 1) / 2]; - int i, a, b, s, ns, nb; - - BIG_copy(cm,maxe); BIG_or(cm,cm,e); BIG_or(cm,cm,f); - int max=BIG_nbits(cm); - - BIG_copy(te, e); - BIG_copy(tf, f); - - /* precompute table */ - ECP_copy(&W[1], P); - ECP_sub(&W[1], Q); /* P+Q */ - ECP_copy(&W[2], P); - ECP_add(&W[2], Q); /* P-Q */ - ECP_copy(&S, Q); - ECP_dbl(&S); /* S=2Q */ - ECP_copy(&W[0], &W[1]); - ECP_sub(&W[0], &S); - ECP_copy(&W[3], &W[2]); - ECP_add(&W[3], &S); - ECP_copy(&T, P); - ECP_dbl(&T); /* T=2P */ - ECP_copy(&W[5], &W[1]); - ECP_add(&W[5], &T); - ECP_copy(&W[6], &W[2]); - ECP_add(&W[6], &T); - ECP_copy(&W[4], &W[5]); - ECP_sub(&W[4], &S); - ECP_copy(&W[7], &W[6]); - ECP_add(&W[7], &S); - - /* if multiplier is odd, add 2, else add 1 to multiplier, and add 2P or P to correction */ - - s = BIG_parity(te); - BIG_inc(te, 1); - BIG_norm(te); - ns = BIG_parity(te); - BIG_copy(mt, te); - BIG_inc(mt, 1); - BIG_norm(mt); - BIG_cmove(te, mt, s); - ECP_cmove(&T, P, ns); - ECP_copy(&C, &T); - - s = BIG_parity(tf); - BIG_inc(tf, 1); - BIG_norm(tf); - ns = BIG_parity(tf); - BIG_copy(mt, tf); - BIG_inc(mt, 1); - BIG_norm(mt); - BIG_cmove(tf, mt, s); - ECP_cmove(&S, Q, ns); - ECP_add(&C, &S); - - //BIG_add(mt, te, tf); - //BIG_norm(mt); - nb = 1 + (max + 1) / 2; - - /* convert exponent to signed 2-bit window */ - for (i = 0; i < nb; i++) - { - a = BIG_lastbits(te, 3) - 4; - BIG_dec(te, a); - BIG_norm(te); - BIG_fshr(te, 2); - b = BIG_lastbits(tf, 3) - 4; - BIG_dec(tf, b); - BIG_norm(tf); - BIG_fshr(tf, 2); - w[i] = 4 * a + b; - } - w[nb] = (4 * BIG_lastbits(te, 3) + BIG_lastbits(tf, 3)); - - //ECP_copy(P, &W[(w[nb] - 1) / 2]); - ECP_select(P, W, w[nb]); - for (i = nb - 1; i >= 0; i--) - { - ECP_select(&T, W, w[i]); - ECP_dbl(P); - ECP_dbl(P); - ECP_add(P, &T); - } - ECP_sub(P, &C); /* apply correction */ -} - -#endif - -void ZZZ::ECP_cfp(ECP *P) -{ /* multiply point by curves cofactor */ - BIG c; - int cf = CURVE_Cof_I; - if (cf == 1) return; - if (cf == 4) - { - ECP_dbl(P); - ECP_dbl(P); - return; - } - if (cf == 8) - { - ECP_dbl(P); - ECP_dbl(P); - ECP_dbl(P); - return; - } - BIG_rcopy(c, CURVE_Cof); - ECP_mul(P, c); - return; -} - -/* Constant time Map to Point */ -void ZZZ::ECP_map2point(ECP *P,FP *h) -{ -#if CURVETYPE_ZZZ==MONTGOMERY -// Elligator 2 - int qres; - BIG a; - FP X1,X2,w,N,t,one,A,D,hint; - //BIG_zero(a); BIG_inc(a,CURVE_A); BIG_norm(a); FP_nres(&A,a); - FP_from_int(&A,CURVE_A_ZZZ); - FP_copy(&t,h); - FP_sqr(&t,&t); // t^2 - - if (PM1D2_YYY == 2) - FP_add(&t,&t,&t); // 2t^2 - if (PM1D2_YYY == 1) - FP_neg(&t,&t); // -t^2 - if (PM1D2_YYY > 2) - FP_imul(&t,&t,QNRI_YYY); // precomputed QNR - FP_norm(&t); // z.t^2 - - FP_one(&one); - FP_add(&D,&t,&one); FP_norm(&D); // Denominator D=1+z.t^2 - - FP_copy(&X1,&A); - FP_neg(&X1,&X1); FP_norm(&X1); // X1 = -A/D - FP_copy(&X2,&X1); - FP_mul(&X2,&X2,&t); // X2 = -At/D - - FP_sqr(&w,&X1); FP_mul(&N,&w,&X1); // w=X1^2, N=X1^3 - FP_mul(&w,&w,&A); FP_mul(&w,&w,&D); FP_add(&N,&N,&w); // N = X1^3+ADX1^2 - FP_sqr(&t,&D); - FP_mul(&t,&t,&X1); - FP_add(&N,&N,&t); // N=X1^3+ADX1^2+D^2X1 // Numerator of gx = N/D^3 - FP_norm(&N); - - FP_mul(&t,&N,&D); // N.D - qres=FP_qr(&t,&hint); // *** exp - FP_inv(&w,&t,&hint); - FP_mul(&D,&w,&N); // 1/D - FP_mul(&X1,&X1,&D); // get X1 - FP_mul(&X2,&X2,&D); // get X2 - FP_cmove(&X1,&X2,1-qres); - FP_redc(a,&X1); - - ECP_set(P,a); - return; -#endif -#if CURVETYPE_ZZZ==EDWARDS -// Elligator 2 - map to Montgomery, place point, map back - int qres,ne,rfc,qnr; - BIG x,y; - FP X1,X2,t,w,one,A,w1,w2,B,Y,K,D,hint; - FP_one(&one); - -#if MODTYPE_YYY != GENERALISED_MERSENNE -// its NOT ed448! -// Figure out the Montgomery curve parameters - - FP_rcopy(&B,CURVE_B); - -#if CURVE_A_ZZZ == 1 - FP_add(&A,&B,&one); // A=B+1 // A = a+d - FP_sub(&B,&B,&one); // B=B-1 // B = -a+d -#else - FP_sub(&A,&B,&one); // A=B-1 - FP_add(&B,&B,&one); // B=B+1 -#endif - FP_norm(&A); FP_norm(&B); - - FP_div2(&A,&A); // (A+B)/2 // (a+d)/2 = J/K - FP_div2(&B,&B); // (B-A)/2 // (-a+d)/2 - FP_div2(&B,&B); // (B-A)/4 // (-a+d)/4 = -1/K - - FP_neg(&K,&B); FP_norm(&K); - //FP_inv(&K,&K,NULL); // K - FP_invsqrt(&K,&w1,&K); // *** return K, w1=sqrt(1/K) - - could be precalculated! - - rfc=RIADZ_YYY; - if (rfc) - { // RFC7748 method applies - FP_mul(&A,&A,&K); // = J - FP_mul(&K,&K,&w1); -// FP_sqrt(&K,&K,NULL); - } else { // generic method - FP_sqr(&B,&B); - } -#else - FP_from_int(&A,156326); - rfc=1; -#endif -// Map to this Montgomery curve X^2=X^3+AX^2+BX - - FP_copy(&t,h); - FP_sqr(&t,&t); // t^2 - - if (PM1D2_YYY == 2) - { - FP_add(&t,&t,&t); // 2t^2 - qnr=2; - } - if (PM1D2_YYY == 1) - { - FP_neg(&t,&t); // -t^2 - qnr=-1; - } - if (PM1D2_YYY > 2) - { - FP_imul(&t,&t,QNRI_YYY); // precomputed QNR - qnr=QNRI_YYY; - } - FP_norm(&t); - FP_add(&D,&t,&one); FP_norm(&D); // Denominator=(1+z.u^2) - - FP_copy(&X1,&A); - FP_neg(&X1,&X1); FP_norm(&X1); // X1=-(J/K).inv(1+z.u^2) - FP_mul(&X2,&X1,&t); // X2=X1*z.u^2 - -// Figure out RHS of Montgomery curve in rational form gx1/d^3 - - FP_sqr(&w,&X1); FP_mul(&w1,&w,&X1); // w=X1^2, w1=X1^3 - FP_mul(&w,&w,&A); FP_mul(&w,&w,&D); FP_add(&w1,&w1,&w); // w1 = X1^3+ADX1^2 - FP_sqr(&w2,&D); - if (!rfc) - { - FP_mul(&w,&X1,&B); - FP_mul(&w2,&w2,&w); // - FP_add(&w1,&w1,&w2); // w1=X1^3+ADX1^2+BD^2X1 - } else { - FP_mul(&w2,&w2,&X1); - FP_add(&w1,&w1,&w2); // w1=X1^3+ADX1^2+D^2X1 // was &X1 - } - FP_norm(&w1); - - FP_mul(&B,&w1,&D); // gx1=num/den^3 - is_qr num*den (same as num/den, same as num/den^3) - qres=FP_qr(&B,&hint); // *** - FP_inv(&w,&B,&hint); - FP_mul(&D,&w,&w1); // 1/D - FP_mul(&X1,&X1,&D); // get X1 - FP_mul(&X2,&X2,&D); // get X2 - FP_sqr(&D,&D); - - FP_imul(&w1,&B,qnr); // now for gx2 = Z.u^2.gx1 - FP_rcopy(&w,CURVE_HTPC); // qnr^C3 - FP_mul(&w,&w,&hint); // modify hint for gx2 - FP_mul(&w2,&D,h); - - FP_cmove(&X1,&X2,1-qres); // pick correct one - FP_cmove(&B,&w1,1-qres); - FP_cmove(&hint,&w,1-qres); - FP_cmove(&D,&w2,1-qres); - - FP_sqrt(&Y,&B,&hint); // sqrt(num*den) - FP_mul(&Y,&Y,&D); // sqrt(num/den^3) - -// correct sign of Y - FP_neg(&w,&Y); FP_norm(&w); - FP_cmove(&Y,&w,qres^FP_sign(&Y)); - - if (!rfc) - { - FP_mul(&X1,&X1,&K); - FP_mul(&Y,&Y,&K); - } - -#if MODTYPE_YYY == GENERALISED_MERSENNE -// Ed448 isogeny - FP_sqr(&t,&X1); // t=u^2 - FP_add(&w,&t,&one); // w=u^2+1 - FP_norm(&w); - FP_sub(&t,&t,&one); // t=u^2-1 - FP_norm(&t); - FP_mul(&w1,&t,&Y); // w1=v(u^2-1) - FP_add(&w1,&w1,&w1); - FP_add(&X2,&w1,&w1); - FP_norm(&X2); // w1=4v(u^2-1) - FP_sqr(&t,&t); // t=(u^2-1)^2 - FP_sqr(&Y,&Y); // v^2 - FP_add(&Y,&Y,&Y); - FP_add(&Y,&Y,&Y); - FP_norm(&Y); // 4v^2 - FP_add(&B,&t,&Y); // w2=(u^2-1)^2+4v^2 - FP_norm(&B); // X1=w1/w2 - X2=w1, B=w2 - - FP_sub(&w2,&Y,&t); // w2=4v^2-(u^2-1)^2 - FP_norm(&w2); - FP_mul(&w2,&w2,&X1); // w2=u(4v^2-(u^2-1)^2) - FP_mul(&t,&t,&X1); // t=u(u^2-1)^2 - FP_div2(&Y,&Y); // 2v^2 - FP_mul(&w1,&Y,&w); // w1=2v^2(u^2+1) - FP_sub(&w1,&t,&w1); // w1=u(u^2-1)^2 - 2v^2(u^2+1) - FP_norm(&w1); // Y=w2/w1 - - FP_mul(&t,&X2,&w1); // output in projective to avoid inversion - FP_copy(&(P->x),&t); - FP_mul(&t,&w2,&B); - FP_copy(&(P->y),&t); - FP_mul(&t,&w1,&B); - FP_copy(&(P->z),&t); - - return; - -#else - FP_add(&w1,&X1,&one); FP_norm(&w1); // (s+1) - FP_sub(&w2,&X1,&one); FP_norm(&w2); // (s-1) - FP_mul(&t,&w1,&Y); - FP_mul(&X1,&X1,&w1); - - if (rfc) - FP_mul(&X1,&X1,&K); - - FP_mul(&Y,&Y,&w2); // output in projective to avoid inversion - FP_copy(&(P->x),&X1); - FP_copy(&(P->y),&Y); - FP_copy(&(P->z),&t); - return; -#endif - -#endif - -#if CURVETYPE_ZZZ==WEIERSTRASS -// SSWU or SVDW method - int sgn,ne; - BIG a,x,y; - FP X1,X2,X3,t,w,one,A,B,Y,D; - FP D2,hint,GX1; - -#if HTC_ISO_ZZZ != 0 -// Map to point on isogenous curve - int i,k,isox,isoy,iso=HTC_ISO_ZZZ; - FP xnum,xden,ynum,yden; - BIG z; - FP_rcopy(&A,CURVE_Ad); - FP_rcopy(&B,CURVE_Bd); -#else - FP_from_int(&A,CURVE_A_ZZZ); - FP_rcopy(&B,CURVE_B); -#endif - - FP_one(&one); - FP_copy(&t,h); - sgn=FP_sign(&t); - -#if CURVE_A_ZZZ != 0 || HTC_ISO_ZZZ != 0 - - FP_sqr(&t,&t); - FP_imul(&t,&t,RIADZ_YYY); // Z from hash-to-point draft standard - FP_add(&w,&t,&one); // w=Zt^2+1 - FP_norm(&w); - - FP_mul(&w,&w,&t); // w=Z^2*t^4+Zt^2 - FP_mul(&D,&A,&w); // A=Aw - - FP_add(&w,&w,&one); FP_norm(&w); - FP_mul(&w,&w,&B); - FP_neg(&w,&w); // -B(w+1) - FP_norm(&w); - - FP_copy(&X2,&w); // Numerators - FP_mul(&X3,&t,&X2); - -// x^3+Ad^2x+Bd^3 - FP_sqr(&GX1,&X2); - FP_sqr(&D2,&D); FP_mul(&w,&A,&D2); FP_add(&GX1,&GX1,&w); FP_norm(&GX1); FP_mul(&GX1,&GX1,&X2); FP_mul(&D2,&D2,&D); FP_mul(&w,&B,&D2); FP_add(&GX1,&GX1,&w); FP_norm(&GX1); - - FP_mul(&w,&GX1,&D); - int qr=FP_qr(&w,&hint); // qr(ad) - only exp happens here - FP_inv(&D,&w,&hint); // d=1/(ad) - FP_mul(&D,&D,&GX1); // 1/d - FP_mul(&X2,&X2,&D); // X2/=D - FP_mul(&X3,&X3,&D); // X3/=D - FP_mul(&t,&t,h); // t=Z.u^3 - FP_sqr(&D2,&D); - - FP_mul(&D,&D2,&t); - FP_imul(&t,&w,RIADZ_YYY); - FP_rcopy(&X1,CURVE_HTPC); - FP_mul(&X1,&X1,&hint); // modify hint - - FP_cmove(&X2,&X3,1-qr); - FP_cmove(&D2,&D,1-qr); - FP_cmove(&w,&t,1-qr); - FP_cmove(&hint,&X1,1-qr); - - FP_sqrt(&Y,&w,&hint); // first candidate if X2 is correct - FP_mul(&Y,&Y,&D2); - - ne=FP_sign(&Y)^sgn; - FP_neg(&w,&Y); FP_norm(&w); - FP_cmove(&Y,&w,ne); - -#if HTC_ISO_ZZZ != 0 - -// (X2,Y) is on isogenous curve - k=0; - isox=iso; - isoy=3*(iso-1)/2; - -// xnum - FP_rcopy(&xnum,PC[k++]); - for (i=0;ix),&t); - - FP_mul(&t,&ynum,&xden); - FP_copy(&(P->y),&t); - - FP_mul(&t,&xden,&yden); - FP_copy(&(P->z),&t); - return; -#else - - FP_redc(x,&X2); - FP_redc(y,&Y); - ECP_set(P,x,y); - return; -#endif -#else -// SVDW - Shallue and van de Woestijne - FP_from_int(&Y,RIADZ_YYY); - ECP_rhs(&A,&Y); // A=g(Z) - FP_rcopy(&B,SQRTm3); - FP_imul(&B,&B,RIADZ_YYY); // B=Z*sqrt(-3) - - FP_sqr(&t,&t); - FP_mul(&Y,&A,&t); // Y=tv1=u^2*g(Z) - FP_add(&t,&one,&Y); FP_norm(&t); // t=tv2=1+tv1 - FP_sub(&Y,&one,&Y); FP_norm(&Y); // Y=tv1=1-tv1 - FP_mul(&D,&t,&Y); - FP_mul(&D,&D,&B); - - FP_copy(&w,&A); - FP_tpo(&D,&w); // D=tv3=inv0(tv1*tv2*Z*sqrt(-3)) and w=sqrt(g(Z)) // *** - - FP_mul(&w,&w,&B); // w=tv4=Z.sqrt(-3).sqrt(g(Z)) - if (FP_sign(&w)==1) - { // depends only on sign of constant RIADZ - FP_neg(&w,&w); - FP_norm(&w); - } - FP_mul(&w,&w,&B); // Z.sqrt(-3) - FP_mul(&w,&w,h); // u - FP_mul(&w,&w,&Y); // tv1 - FP_mul(&w,&w,&D); // tv3 // tv5=u*tv1*tv3*tv4*Z*sqrt(-3) - - FP_from_int(&X1,RIADZ_YYY); - FP_copy(&X3,&X1); - FP_neg(&X1,&X1); FP_norm(&X1); FP_div2(&X1,&X1); // -Z/2 - FP_copy(&X2,&X1); - FP_sub(&X1,&X1,&w); FP_norm(&X1); - FP_add(&X2,&X2,&w); FP_norm(&X2); - FP_add(&A,&A,&A); - FP_add(&A,&A,&A); - FP_norm(&A); // 4*g(Z) - FP_sqr(&t,&t); - FP_mul(&t,&t,&D); - FP_sqr(&t,&t); // (tv2^2*tv3)^2 - FP_mul(&A,&A,&t); // 4*g(Z)*(tv2^2*tv3)^2 - FP_add(&X3,&X3,&A); FP_norm(&X3); - - ECP_rhs(&w,&X2); - FP_cmove(&X3,&X2,FP_qr(&w,NULL)); // *** - ECP_rhs(&w,&X1); - FP_cmove(&X3,&X1,FP_qr(&w,NULL)); // *** - ECP_rhs(&w,&X3); - FP_sqrt(&Y,&w,NULL); // *** - - ne=FP_sign(&Y)^sgn; - FP_neg(&w,&Y); FP_norm(&w); - FP_cmove(&Y,&w,ne); - - FP_redc(x,&X3); - FP_redc(y,&Y); - ECP_set(P,x,y); - return; -#endif - -#endif -} - -/* Hunt and Peck a BIG to a curve point */ -/* -void ZZZ::ECP_hap2point(ECP *P,BIG h) -{ - BIG x; - BIG_copy(x,h); - for (;;) - { -#if CURVETYPE_ZZZ!=MONTGOMERY - ECP_setx(P,x,0); -#else - ECP_set(P,x); -#endif - BIG_inc(x,1); BIG_norm(x); - if (!ECP_isinf(P)) break; - } -} -*/ -/* Map octet to point */ -/* -void ZZZ::ECP_mapit(ECP *P, octet *W) -{ - BIG q, x; - DBIG dx; - BIG_rcopy(q, Modulus); - - BIG_dfromBytesLen(dx,W->val,W->len); - BIG_dmod(x,dx,q); - - ECP_hap2point(P,x); - ECP_cfp(P); -} -*/ -int ZZZ::ECP_generator(ECP *G) -{ - BIG x, y; - BIG_rcopy(x, CURVE_Gx); -#if CURVETYPE_ZZZ!=MONTGOMERY - BIG_rcopy(y, CURVE_Gy); - return ECP_set(G, x, y); -#else - return ECP_set(G, x); -#endif -} - -#ifdef HAS_MAIN - -using namespace ZZZ; - -int main() -{ - int i; - ECP G, P; - csprng RNG; - BIG r, s, x, y, b, m, w, q; - BIG_rcopy(x, CURVE_Gx); -#if CURVETYPE_ZZZ!=MONTGOMERY - BIG_rcopy(y, CURVE_Gy); -#endif - BIG_rcopy(m, Modulus); - - printf("x= "); - BIG_output(x); - printf("\n"); -#if CURVETYPE_ZZZ!=MONTGOMERY - printf("y= "); - BIG_output(y); - printf("\n"); -#endif - RNG_seed(&RNG, 3, "abc"); - -#if CURVETYPE_ZZZ!=MONTGOMERY - ECP_set(&G, x, y); -#else - ECP_set(&G, x); -#endif - if (ECP_isinf(&G)) printf("Failed to set - point not on curve\n"); - else printf("set success\n"); - - ECP_output(&G); - - BIG_rcopy(r, CURVE_Order); //BIG_dec(r,7); - printf("r= "); - BIG_output(r); - printf("\n"); - - ECP_copy(&P, &G); - - ECP_mul(&P, r); - - ECP_output(&P); - BIG_randomnum(w, &RNG); - BIG_mod(w, r); - - ECP_copy(&P, &G); - ECP_mul(&P, w); - - ECP_output(&P); - - return 0; -} - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp2.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp2.cpp deleted file mode 100644 index c76094a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp2.cpp +++ /dev/null @@ -1,998 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Weierstrass elliptic curve functions over FP2 */ -/* SU=m, m is Stack Usage */ - -#include "ecp2_ZZZ.h" -#include "ecp_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -int ZZZ::ECP2_isinf(ECP2 *P) -{ - return (FP2_iszilch(&(P->x)) & FP2_iszilch(&(P->z))); -} - -/* Set P=Q */ -/* SU= 16 */ -void ZZZ::ECP2_copy(ECP2 *P, ECP2 *Q) -{ - FP2_copy(&(P->x), &(Q->x)); - FP2_copy(&(P->y), &(Q->y)); - FP2_copy(&(P->z), &(Q->z)); -} - -/* set P to Infinity */ -/* SU= 8 */ -void ZZZ::ECP2_inf(ECP2 *P) -{ - FP2_zero(&(P->x)); - FP2_one(&(P->y)); - FP2_zero(&(P->z)); -} - -/* Conditional move Q to P dependant on d */ -static void ECP2_cmove(ZZZ::ECP2 *P, ZZZ::ECP2 *Q, int d) -{ - FP2_cmove(&(P->x), &(Q->x), d); - FP2_cmove(&(P->y), &(Q->y), d); - FP2_cmove(&(P->z), &(Q->z), d); -} - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} - -/* Constant time select from pre-computed table */ -static void ECP2_select(ZZZ::ECP2 *P, ZZZ::ECP2 W[], sign32 b) -{ - ZZZ::ECP2 MP; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - ECP2_cmove(P, &W[0], teq(babs, 0)); // conditional move - ECP2_cmove(P, &W[1], teq(babs, 1)); - ECP2_cmove(P, &W[2], teq(babs, 2)); - ECP2_cmove(P, &W[3], teq(babs, 3)); - ECP2_cmove(P, &W[4], teq(babs, 4)); - ECP2_cmove(P, &W[5], teq(babs, 5)); - ECP2_cmove(P, &W[6], teq(babs, 6)); - ECP2_cmove(P, &W[7], teq(babs, 7)); - - ECP2_copy(&MP, P); - ECP2_neg(&MP); // minus P - ECP2_cmove(P, &MP, (int)(m & 1)); -} - -/* return 1 if P==Q, else 0 */ -/* SU= 312 */ -int ZZZ::ECP2_equals(ECP2 *P, ECP2 *Q) -{ - FP2 a, b; - - FP2_mul(&a, &(P->x), &(Q->z)); - FP2_mul(&b, &(Q->x), &(P->z)); - if (!FP2_equals(&a, &b)) return 0; - - FP2_mul(&a, &(P->y), &(Q->z)); - FP2_mul(&b, &(Q->y), &(P->z)); - if (!FP2_equals(&a, &b)) return 0; - return 1; -} - -/* Make P affine (so z=1) */ -/* SU= 232 */ -void ZZZ::ECP2_affine(ECP2 *P) -{ - FP2 one, iz; - if (ECP2_isinf(P)) return; - - FP2_one(&one); - if (FP2_isunity(&(P->z))) - { - FP2_reduce(&(P->x)); - FP2_reduce(&(P->y)); - return; - } - - FP2_inv(&iz, &(P->z), NULL); - FP2_mul(&(P->x), &(P->x), &iz); - FP2_mul(&(P->y), &(P->y), &iz); - - FP2_reduce(&(P->x)); - FP2_reduce(&(P->y)); - FP2_copy(&(P->z), &one); -} - -/* extract x, y from point P */ -/* SU= 16 */ -int ZZZ::ECP2_get(FP2 *x, FP2 *y, ECP2 *P) -{ - ECP2 W; - ECP2_copy(&W, P); - ECP2_affine(&W); - if (ECP2_isinf(&W)) return -1; - - FP2_copy(y, &(W.y)); - FP2_copy(x, &(W.x)); - return 0; -} - -/* SU= 152 */ -/* Output point P */ -void ZZZ::ECP2_output(ECP2 *P) -{ - FP2 x, y; - if (ECP2_isinf(P)) - { - printf("Infinity\n"); - return; - } - ECP2_get(&x, &y, P); - printf("("); - FP2_output(&x); - printf(","); - FP2_output(&y); - printf(")\n"); -} - -/* SU= 232 */ -void ZZZ::ECP2_outputxyz(ECP2 *P) -{ - ECP2 Q; - if (ECP2_isinf(P)) - { - printf("Infinity\n"); - return; - } - ECP2_copy(&Q, P); - printf("("); - FP2_output(&(Q.x)); - printf(","); - FP2_output(&(Q.y)); - printf(","); - FP2_output(&(Q.z)); - printf(")\n"); -} - -/* SU= 168 */ -/* Convert Q to octet string */ -void ZZZ::ECP2_toOctet(octet *W, ECP2 *Q, bool compress) -{ - FP2 qx, qy; - bool alt=false; - ECP2_get(&qx, &qy, Q); - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - FP2_toBytes(&(W->val[0]),&qx); - if (!compress) - { - W->len=4*MODBYTES_XXX; - FP2_toBytes(&(W->val[2*MODBYTES_XXX]), &qy); - } else { - W->val[0]|=0x80; - if (FP2_islarger(&qy)==1) W->val[0]|=0x20; - W->len=2*MODBYTES_XXX; - } - } else { - FP2_toBytes(&(W->val[1]),&qx); - if (!compress) - { - W->val[0] = 0x04; - FP2_toBytes(&(W->val[2 * MODBYTES_XXX+1]), &qy); - W->len = 4 * MODBYTES_XXX + 1; - } else { - W->val[0]=0x02; - if (FP2_sign(&qy)==1) W->val[0] = 0x03; - W->len = 2 * MODBYTES_XXX + 1; - } - } -} -/* SU= 176 */ -/* restore Q from octet string */ -int ZZZ::ECP2_fromOctet(ECP2 *Q, octet *W) -{ - FP2 qx, qy; - bool alt=false; - int sgn,cmp,typ = W->val[0]; - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - W->val[0]&=0x1f; - FP2_fromBytes(&qx,&(W->val[0])); - W->val[0]=typ; - if ((typ&0x80)==0) - { - FP2_fromBytes(&qy,&(W->val[2*MODBYTES_XXX])); - if (ECP2_set(Q, &qx, &qy)) return 1; - return 0; - } else { - if (!ECP2_setx(Q,&qx,0)) return 0; - sgn=(typ&0x20)>>5; - cmp=FP2_islarger(&(Q->y)); - if ((sgn==1 && cmp!=1) || (sgn==0 && cmp==1)) ECP2_neg(Q); - return 1; - } - - } else { - FP2_fromBytes(&qx,&(W->val[1])); - if (typ == 0x04) - { - FP2_fromBytes(&qy,&(W->val[2 * MODBYTES_XXX+1])); - if (ECP2_set(Q, &qx, &qy)) return 1; - } else { - if (ECP2_setx(Q, &qx, typ&1)) return 1; - } - } - return 0; -} - -/* SU= 128 */ -/* Calculate RHS of twisted curve equation x^3+B/i or x^3+Bi*/ -void ZZZ::ECP2_rhs(FP2 *rhs, FP2 *x) -{ - /* calculate RHS of elliptic curve equation */ - FP2 t; - BIG b; - - FP2_sqr(&t, x); - FP2_mul(rhs, &t, x); - - /* Assuming CURVE_A=0 */ - - BIG_rcopy(b, CURVE_B); - FP2_from_BIG(&t, b); -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP2_div_ip(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */ -#endif - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP2_norm(&t); - FP2_mul_ip(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */ - FP2_norm(&t); - -#endif - - FP2_add(rhs, &t, rhs); - FP2_reduce(rhs); -} - - -/* Set P=(x,y). Return 1 if (x,y) is on the curve, else return 0*/ -/* SU= 232 */ -int ZZZ::ECP2_set(ECP2 *P, FP2 *x, FP2 *y) -{ - FP2 rhs, y2; - FP2_sqr(&y2, y); - ECP2_rhs(&rhs, x); - - if (!FP2_equals(&y2, &rhs)) - { - ECP2_inf(P); - return 0; - } - - FP2_copy(&(P->x), x); - FP2_copy(&(P->y), y); - - FP2_one(&(P->z)); - return 1; -} - -/* Set P=(x,y). Return 1 if (x,.) is on the curve, else return 0 */ -/* SU= 232 */ -int ZZZ::ECP2_setx(ECP2 *P, FP2 *x, int s) -{ - FP2 y; - FP hint; - ECP2_rhs(&y, x); - - if (!FP2_qr(&y,&hint)) - { - ECP2_inf(P); - return 0; - } - - FP2_sqrt(&y,&y,&hint); - - FP2_copy(&(P->x), x); - FP2_copy(&(P->y), &y); - FP2_one(&(P->z)); - - if (FP2_sign(&(P->y)) != s) - FP2_neg(&(P->y),&(P->y)); - FP2_reduce(&(P->y)); - return 1; -} - -/* Set P=-P */ -/* SU= 8 */ -void ZZZ::ECP2_neg(ECP2 *P) -{ - FP2_norm(&(P->y)); - FP2_neg(&(P->y), &(P->y)); - FP2_norm(&(P->y)); -} - -/* R+=R */ -/* return -1 for Infinity, 0 for addition, 1 for doubling */ -/* SU= 448 */ -int ZZZ::ECP2_dbl(ECP2 *P) -{ - FP2 t0, t1, t2, iy, x3, y3; - - FP2_copy(&iy, &(P->y)); //FP2 iy=new FP2(y); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP2_mul_ip(&iy); //iy.mul_ip(); - FP2_norm(&iy); //iy.norm(); -#endif - FP2_sqr(&t0, &(P->y)); //t0.sqr(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP2_mul_ip(&t0); //t0.mul_ip(); -#endif - FP2_mul(&t1, &iy, &(P->z)); //t1.mul(z); - FP2_sqr(&t2, &(P->z)); //t2.sqr(); - - FP2_add(&(P->z), &t0, &t0); //z.add(t0); - FP2_norm(&(P->z)); //z.norm(); - FP2_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP2_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP2_norm(&(P->z)); //z.norm(); - - FP2_imul(&t2, &t2, 3 * CURVE_B_I); //t2.imul(3*ROM.CURVE_B_I); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_mul_ip(&t2); - FP2_norm(&t2); -#endif - - FP2_mul(&x3, &t2, &(P->z)); //x3.mul(z); - - FP2_add(&y3, &t0, &t2); //y3.add(t2); - FP2_norm(&y3); //y3.norm(); - FP2_mul(&(P->z), &(P->z), &t1); //z.mul(t1); - - FP2_add(&t1, &t2, &t2); //t1.add(t2); - FP2_add(&t2, &t2, &t1); //t2.add(t1); - FP2_norm(&t2); //t2.norm(); - FP2_sub(&t0, &t0, &t2); //t0.sub(t2); - FP2_norm(&t0); //t0.norm(); //y^2-9bz^2 - FP2_mul(&y3, &y3, &t0); //y3.mul(t0); - FP2_add(&(P->y), &y3, &x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2 - FP2_mul(&t1, &(P->x), &iy); //t1.mul(iy); - - FP2_norm(&t0); //x.norm(); - FP2_mul(&(P->x), &t0, &t1); //x.mul(t1); - FP2_add(&(P->x), &(P->x), &(P->x)); //x.add(x); //(y^2-9bz^2)xy2 - - FP2_norm(&(P->x)); //x.norm(); - FP2_norm(&(P->y)); //y.norm(); - - return 1; -} - -/* Set P+=Q */ -/* SU= 400 */ -int ZZZ::ECP2_add(ECP2 *P, ECP2 *Q) -{ - FP2 t0, t1, t2, t3, t4, x3, y3, z3; - int b3 = 3 * CURVE_B_I; - - FP2_mul(&t0, &(P->x), &(Q->x)); //t0.mul(Q.x); // x.Q.x - FP2_mul(&t1, &(P->y), &(Q->y)); //t1.mul(Q.y); // y.Q.y - - FP2_mul(&t2, &(P->z), &(Q->z)); //t2.mul(Q.z); - - FP2_add(&t3, &(P->x), &(P->y)); //t3.add(y); - FP2_norm(&t3); //t3.norm(); //t3=X1+Y1 - FP2_add(&t4, &(Q->x), &(Q->y)); //t4.add(Q.y); - FP2_norm(&t4); //t4.norm(); //t4=X2+Y2 - FP2_mul(&t3, &t3, &t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2) - - FP2_add(&t4, &t0, &t1); //t4.add(t1); //t4=X1.X2+Y1.Y2 - - FP2_sub(&t3, &t3, &t4); //t3.sub(t4); - FP2_norm(&t3); //t3.norm(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP2_mul_ip(&t3); //t3.mul_ip(); - FP2_norm(&t3); //t3.norm(); //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1 -#endif - FP2_add(&t4, &(P->y), &(P->z)); //t4.add(z); - FP2_norm(&t4); //t4.norm(); //t4=Y1+Z1 - FP2_add(&x3, &(Q->y), &(Q->z)); //x3.add(Q.z); - FP2_norm(&x3); //x3.norm(); //x3=Y2+Z2 - - FP2_mul(&t4, &t4, &x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2) - FP2_add(&x3, &t1, &t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2 - - FP2_sub(&t4, &t4, &x3); //t4.sub(x3); - FP2_norm(&t4); //t4.norm(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP2_mul_ip(&t4); //t4.mul_ip(); - FP2_norm(&t4); //t4.norm(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1 -#endif - FP2_add(&x3, &(P->x), &(P->z)); //x3.add(z); - FP2_norm(&x3); //x3.norm(); // x3=X1+Z1 - FP2_add(&y3, &(Q->x), &(Q->z)); //y3.add(Q.z); - FP2_norm(&y3); //y3.norm(); // y3=X2+Z2 - FP2_mul(&x3, &x3, &y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2) - FP2_add(&y3, &t0, &t2); //y3.add(t2); // y3=X1.X2+Z1+Z2 - FP2_sub(&y3, &x3, &y3); //y3.rsub(x3); - FP2_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1 -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP2_mul_ip(&t0); //t0.mul_ip(); - FP2_norm(&t0); //t0.norm(); // x.Q.x - FP2_mul_ip(&t1); //t1.mul_ip(); - FP2_norm(&t1); //t1.norm(); // y.Q.y -#endif - - FP2_add(&x3, &t0, &t0); //x3.add(t0); - FP2_add(&t0, &t0, &x3); //t0.add(x3); - FP2_norm(&t0); //t0.norm(); - FP2_imul(&t2, &t2, b3); //t2.imul(b); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_mul_ip(&t2); - FP2_norm(&t2); -#endif - - FP2_add(&z3, &t1, &t2); //z3.add(t2); - FP2_norm(&z3); //z3.norm(); - FP2_sub(&t1, &t1, &t2); //t1.sub(t2); - FP2_norm(&t1); //t1.norm(); - - FP2_imul(&y3, &y3, b3); //y3.imul(b); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_mul_ip(&y3); - FP2_norm(&y3); -#endif - - FP2_mul(&x3, &y3, &t4); //x3.mul(t4); - FP2_mul(&t2, &t3, &t1); //t2.mul(t1); - FP2_sub(&(P->x), &t2, &x3); //x3.rsub(t2); - FP2_mul(&y3, &y3, &t0); //y3.mul(t0); - FP2_mul(&t1, &t1, &z3); //t1.mul(z3); - FP2_add(&(P->y), &y3, &t1); //y3.add(t1); - - FP2_mul(&t0, &t0, &t3); //t0.mul(t3); - FP2_mul(&z3, &z3, &t4); //z3.mul(t4); - FP2_add(&(P->z), &z3, &t0); //z3.add(t0); - - FP2_norm(&(P->x)); //x.norm(); - FP2_norm(&(P->y)); //y.norm(); - FP2_norm(&(P->z)); //z.norm(); - - return 0; -} - -/* Set P-=Q */ -/* SU= 16 */ -void ZZZ::ECP2_sub(ECP2 *P, ECP2 *Q) -{ - ECP2 NQ; - ECP2_copy(&NQ, Q); - ECP2_neg(&NQ); - ECP2_add(P, &NQ); -} - -/* P*=e */ -/* SU= 280 */ -void ZZZ::ECP2_mul(ECP2 *P, BIG e) -{ - /* fixed size windows */ - int i, nb, s, ns; - BIG mt, t; - ECP2 Q, W[8], C; - sign8 w[1 + (NLEN_XXX * BASEBITS_XXX + 3) / 4]; - - if (ECP2_isinf(P)) return; - - /* precompute table */ - - ECP2_copy(&Q, P); - ECP2_dbl(&Q); - ECP2_copy(&W[0], P); - - for (i = 1; i < 8; i++) - { - ECP2_copy(&W[i], &W[i - 1]); - ECP2_add(&W[i], &Q); - } - - /* make exponent odd - add 2P if even, P if odd */ - BIG_copy(t, e); - s = BIG_parity(t); - BIG_inc(t, 1); - BIG_norm(t); - ns = BIG_parity(t); - BIG_copy(mt, t); - BIG_inc(mt, 1); - BIG_norm(mt); - BIG_cmove(t, mt, s); - ECP2_cmove(&Q, P, ns); - ECP2_copy(&C, &Q); - - nb = 1 + (BIG_nbits(t) + 3) / 4; - - /* convert exponent to signed 4-bit window */ - for (i = 0; i < nb; i++) - { - w[i] = BIG_lastbits(t, 5) - 16; - BIG_dec(t, w[i]); - BIG_norm(t); - BIG_fshr(t, 4); - } - w[nb] = BIG_lastbits(t, 5); - - //ECP2_copy(P, &W[(w[nb] - 1) / 2]); - ECP2_select(P, W, w[nb]); - for (i = nb - 1; i >= 0; i--) - { - ECP2_select(&Q, W, w[i]); - ECP2_dbl(P); - ECP2_dbl(P); - ECP2_dbl(P); - ECP2_dbl(P); - ECP2_add(P, &Q); - } - ECP2_sub(P, &C); /* apply correction */ -} - -/* Calculates q.P using Frobenius constant X */ -/* SU= 96 */ -void ZZZ::ECP2_frob(ECP2 *P, FP2 *X) -{ - FP2 X2; - FP2_sqr(&X2, X); - FP2_conj(&(P->x), &(P->x)); - FP2_conj(&(P->y), &(P->y)); - FP2_conj(&(P->z), &(P->z)); - FP2_reduce(&(P->z)); - FP2_mul(&(P->x), &X2, &(P->x)); - FP2_mul(&(P->y), &X2, &(P->y)); - FP2_mul(&(P->y), X, &(P->y)); -} - -// Bos & Costello https://eprint.iacr.org/2013/458.pdf -// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf -// Side channel attack secure - -void ZZZ::ECP2_mul4(ECP2 *P, ECP2 Q[4], BIG u[4]) -{ - int i, j, k, nb, pb, bt; - ECP2 T[8], W; - BIG t[4], mt; - sign8 w[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s[NLEN_XXX * BASEBITS_XXX + 1]; - - for (i = 0; i < 4; i++) - { - BIG_copy(t[i], u[i]); - } - -// Precomputed table - ECP2_copy(&T[0], &Q[0]); // Q[0] - ECP2_copy(&T[1], &T[0]); - ECP2_add(&T[1], &Q[1]); // Q[0]+Q[1] - ECP2_copy(&T[2], &T[0]); - ECP2_add(&T[2], &Q[2]); // Q[0]+Q[2] - ECP2_copy(&T[3], &T[1]); - ECP2_add(&T[3], &Q[2]); // Q[0]+Q[1]+Q[2] - ECP2_copy(&T[4], &T[0]); - ECP2_add(&T[4], &Q[3]); // Q[0]+Q[3] - ECP2_copy(&T[5], &T[1]); - ECP2_add(&T[5], &Q[3]); // Q[0]+Q[1]+Q[3] - ECP2_copy(&T[6], &T[2]); - ECP2_add(&T[6], &Q[3]); // Q[0]+Q[2]+Q[3] - ECP2_copy(&T[7], &T[3]); - ECP2_add(&T[7], &Q[3]); // Q[0]+Q[1]+Q[2]+Q[3] - -// Make it odd - pb = 1 - BIG_parity(t[0]); - BIG_inc(t[0], pb); - BIG_norm(t[0]); - -// Number of bits - BIG_zero(mt); - for (i = 0; i < 4; i++) - { - BIG_or(mt, mt, t[i]); - } - nb = 1 + BIG_nbits(mt); - -// Sign pivot - s[nb - 1] = 1; - for (i = 0; i < nb - 1; i++) - { - BIG_fshr(t[0], 1); - s[i] = 2 * BIG_parity(t[0]) - 1; - } - -// Recoded exponent - for (i = 0; i < nb; i++) - { - w[i] = 0; - k = 1; - for (j = 1; j < 4; j++) - { - bt = s[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w[i] += bt * k; - k *= 2; - } - } - -// Main loop - ECP2_select(P, T, 2 * w[nb - 1] + 1); - for (i = nb - 2; i >= 0; i--) - { - ECP2_select(&W, T, 2 * w[i] + s[i]); - ECP2_dbl(P); - ECP2_add(P, &W); - } - -// apply correction - ECP2_copy(&W, P); - ECP2_sub(&W, &Q[0]); - ECP2_cmove(P, &W, pb); -} - -/* Hunt and Peck a BIG to G2 curve point */ -/* -void ZZZ::ECP2_hap2point(ECP2 *Q,BIG h) -{ - BIG one,hv; - FP2 X; - BIG_one(one); - BIG_copy(hv,h); - for (;;) - { - FP2_from_BIGs(&X,one,hv); - if (ECP2_setx(Q,&X,0)) break; - BIG_inc(hv,1); - BIG_norm(hv); - } -} -*/ - -/* Constant time Map FP2 to Point in G2 */ -void ZZZ::ECP2_map2point(ECP2 *Q,FP2 *H) -{ -// SSWU plus isogenies method - int i,k,sgn,ne,isox,isoy,iso=HTC_ISO_G2_ZZZ; - FP2 X1,X2,X3,W,Y,T,A,NY; - FP s; -#if HTC_ISO_G2_ZZZ != 0 - FP hint; - FP2 ZZ,Ad,Bd,D,D2,GX1; - FP2 xnum,xden,ynum,yden; - FP2_from_ints(&ZZ,RIADZG2A_ZZZ,RIADZG2B_ZZZ); - - FP2_rcopy(&Ad,CURVE_Adr,CURVE_Adi); - FP2_rcopy(&Bd,CURVE_Bdr,CURVE_Bdi); - - FP2_one(&NY); - FP2_copy(&T,H); - sgn=FP2_sign(&T); - - FP2_sqr(&T,&T); - FP2_mul(&T,&T,&ZZ); - FP2_add(&W,&T,&NY); - FP2_norm(&W); - - FP2_mul(&W,&W,&T); - FP2_mul(&D,&Ad,&W); - - FP2_add(&W,&W,&NY); - FP2_norm(&W); - FP2_mul(&W,&W,&Bd); - FP2_neg(&W,&W); - FP2_norm(&W); - - FP2_copy(&X2,&W); // Numerators - FP2_mul(&X3,&T,&X2); - -// x^3+Ad^2x+Bd^3 - FP2_sqr(&GX1,&X2); - FP2_sqr(&D2,&D); FP2_mul(&W,&Ad,&D2); FP2_add(&GX1,&GX1,&W); FP2_norm(&GX1); FP2_mul(&GX1,&GX1,&X2); FP2_mul(&D2,&D2,&D); FP2_mul(&W,&Bd,&D2); FP2_add(&GX1,&GX1,&W); FP2_norm(&GX1); - - FP2_mul(&W,&GX1,&D); - int qr=FP2_qr(&W,&hint); // qr(ad) - only exp happens here - FP2_inv(&D,&W,&hint); // d=1/(ad) - FP2_mul(&D,&D,&GX1); // 1/d - FP2_mul(&X2,&X2,&D); // X2/=D - FP2_mul(&X3,&X3,&D); // X3/=D - FP2_mul(&T,&T,H); // t=Z.u^3 - FP2_sqr(&D2,&D); - -// first solution - X2, W, hint, D2 - - FP2_mul(&D,&D2,&T); // second candidate if X3 is correct - FP2_mul(&T,&W,&ZZ); - - FP_rcopy(&s,CURVE_HTPC2); - FP_mul(&s,&s,&hint); // modify hint - - FP2_cmove(&X2,&X3,1-qr); - FP2_cmove(&W,&T,1-qr); - FP2_cmove(&D2,&D,1-qr); - FP_cmove(&hint,&s,1-qr); - - FP2_sqrt(&Y,&W,&hint); // first candidate if X2 is correct - FP2_mul(&Y,&Y,&D2); - - ne=FP2_sign(&Y)^sgn; - FP2_neg(&NY,&Y); FP2_norm(&NY); - FP2_cmove(&Y,&NY,ne); - -// (X2,Y) is on isogenous curve - - k=0; - isox=iso; - isoy=3*(iso-1)/2; - -// xnum - FP2_rcopy(&xnum,PCR[k],PCI[k]); k++; - for (i=0;ix),&T); - - FP2_mul(&T,&ynum,&xden); - FP2_copy(&(Q->y),&T); - - FP2_mul(&T,&xden,&yden); - FP2_copy(&(Q->z),&T); - -#else -// SVDW - Shallue and van de Woestijne method. - FP Z; - FP2_one(&NY); - FP2_copy(&T,H); - sgn=FP2_sign(&T); - - FP_from_int(&Z,RIADZG2A_YYY); - FP2_from_FP(&A,&Z); - ECP2_rhs(&A,&A); // A=g(Z) - - if (CURVE_B_I==4 && SEXTIC_TWIST_ZZZ==M_TYPE && RIADZG2A_YYY==-1 && RIADZG2B_YYY==0) - { // special case for BLS12381 - FP2_from_ints(&W,2,1); - } else { - FP2_sqrt(&W,&A,NULL); // sqrt(g(Z)) - } - FP_rcopy(&s,SQRTm3); - - FP_mul(&Z,&Z,&s); // Z.sqrt(-3) - - FP2_sqr(&T,&T); - FP2_mul(&Y,&A,&T); // tv1=u^2*g(Z) - FP2_add(&T,&NY,&Y); FP2_norm(&T); // tv2=1+tv1 - FP2_sub(&Y,&NY,&Y); FP2_norm(&Y); // tv1=1-tv1 - FP2_mul(&NY,&T,&Y); - - FP2_pmul(&NY,&NY,&Z); - FP2_inv(&NY,&NY,NULL); // tv3=inv0(tv1*tv2*Z*sqrt(-3)) - - FP2_pmul(&W,&W,&Z); // tv4=Z*sqrt(-3).sqrt(g(Z)) - if (FP2_sign(&W)==1) - { - FP2_neg(&W,&W); - FP2_norm(&W); - } - FP2_pmul(&W,&W,&Z); - FP2_mul(&W,&W,H); - FP2_mul(&W,&W,&Y); - FP2_mul(&W,&W,&NY); // tv5=u*tv1*tv3*tv4*Z*sqrt(-3) - - FP2_from_ints(&X1,RIADZG2A_YYY,RIADZG2B_YYY); - FP2_copy(&X3,&X1); - FP2_neg(&X1,&X1); FP2_norm(&X1); FP2_div2(&X1,&X1); // -Z/2 - FP2_copy(&X2,&X1); - FP2_sub(&X1,&X1,&W); FP2_norm(&X1); - FP2_add(&X2,&X2,&W); FP2_norm(&X2); - FP2_add(&A,&A,&A); - FP2_add(&A,&A,&A); - FP2_norm(&A); // 4*g(Z) - FP2_sqr(&T,&T); - FP2_mul(&T,&T,&NY); - FP2_sqr(&T,&T); // (tv2^2*tv3)^2 - FP2_mul(&A,&A,&T); // 4*g(Z)*(tv2^2*tv3)^2 - FP2_add(&X3,&X3,&A); FP2_norm(&X3); - - ECP2_rhs(&W,&X2); - FP2_cmove(&X3,&X2,FP2_qr(&W,NULL)); - ECP2_rhs(&W,&X1); - FP2_cmove(&X3,&X1,FP2_qr(&W,NULL)); - ECP2_rhs(&W,&X3); - FP2_sqrt(&Y,&W,NULL); - - ne=FP2_sign(&Y)^sgn; - FP2_neg(&W,&Y); FP2_norm(&W); - FP2_cmove(&Y,&W,ne); - - ECP2_set(Q,&X3,&Y); -#endif -} - -/* Map octet to point on G2 */ -/* -void ZZZ::ECP2_mapit(ECP2 *Q, octet *W) -{ - BIG q, x; - DBIG dx; - BIG_rcopy(q, Modulus); - - BIG_dfromBytesLen(dx,W->val,W->len); - BIG_dmod(x,dx,q); - - ECP2_hap2point(Q,x); - ECP2_cfp(Q); -} -*/ -/* cofactor product */ -void ZZZ::ECP2_cfp(ECP2 *Q) -{ -// FP Fx, Fy; - FP2 X; - BIG x; -#if (PAIRING_FRIENDLY_ZZZ == BN_CURVE) - ECP2 T, K; -#elif (PAIRING_FRIENDLY_ZZZ > BN_CURVE) - ECP2 xQ, x2Q; -#endif -// FP_rcopy(&Fx, Fra); -// FP_rcopy(&Fy, Frb); -// FP2_from_FPs(&X, &Fx, &Fy); - - FP2_rcopy(&X,Fra,Frb); - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X,NULL); - FP2_norm(&X); -#endif - - BIG_rcopy(x, CURVE_Bnx); - -#if (PAIRING_FRIENDLY_ZZZ == BN_CURVE) - - // Faster Hashing to G2 - Fuentes-Castaneda, Knapp and Rodriguez-Henriquez - // Q -> xQ + F(3xQ) + F(F(xQ)) + F(F(F(Q))). - ECP2_copy(&T, Q); - ECP2_mul(&T, x); -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&T); // our x is negative -#endif - ECP2_copy(&K, &T); - ECP2_dbl(&K); - ECP2_add(&K, &T); - - ECP2_frob(&K, &X); - ECP2_frob(Q, &X); - ECP2_frob(Q, &X); - ECP2_frob(Q, &X); - ECP2_add(Q, &T); - ECP2_add(Q, &K); - ECP2_frob(&T, &X); - ECP2_frob(&T, &X); - ECP2_add(Q, &T); -#elif (PAIRING_FRIENDLY_ZZZ > BN_CURVE) - - // Efficient hash maps to G2 on BLS curves - Budroni, Pintore - // Q -> x2Q -xQ -Q +F(xQ -Q) +F(F(2Q)) - - ECP2_copy(&xQ, Q); - ECP2_mul(&xQ, x); - ECP2_copy(&x2Q, &xQ); - ECP2_mul(&x2Q, x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&xQ); -#endif - - ECP2_sub(&x2Q, &xQ); - ECP2_sub(&x2Q, Q); - - ECP2_sub(&xQ, Q); - ECP2_frob(&xQ, &X); - - ECP2_dbl(Q); - ECP2_frob(Q, &X); - ECP2_frob(Q, &X); - - ECP2_add(Q, &x2Q); - ECP2_add(Q, &xQ); - -#endif -} - -int ZZZ::ECP2_generator(ECP2 *G) -{ - FP2 wx, wy; - FP2_rcopy(&wx,CURVE_Pxa,CURVE_Pxb); - FP2_rcopy(&wy,CURVE_Pya,CURVE_Pyb); -// FP_rcopy(&(wx.a), CURVE_Pxa); -// FP_rcopy(&(wx.b), CURVE_Pxb); -// FP_rcopy(&(wy.a), CURVE_Pya); -// FP_rcopy(&(wy.b), CURVE_Pyb); - return ECP2_set(G, &wx, &wy); -} - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp4.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp4.cpp deleted file mode 100644 index cdcfd15..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp4.cpp +++ /dev/null @@ -1,952 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Weierstrass elliptic curve functions over FP2 */ - -//#include -#include "ecp4_ZZZ.h" - -using namespace std; -using namespace XXX; -using namespace YYY; - -int ZZZ::ECP4_isinf(ECP4 *P) -{ - return (FP4_iszilch(&(P->x)) & FP4_iszilch(&(P->z))); -} - -/* Set P=Q */ -void ZZZ::ECP4_copy(ECP4 *P, ECP4 *Q) -{ - FP4_copy(&(P->x), &(Q->x)); - FP4_copy(&(P->y), &(Q->y)); - FP4_copy(&(P->z), &(Q->z)); -} - -/* set P to Infinity */ -void ZZZ::ECP4_inf(ECP4 *P) -{ - FP4_zero(&(P->x)); - FP4_one(&(P->y)); - FP4_zero(&(P->z)); -} - -/* Conditional move Q to P dependant on d */ -static void ECP4_cmove(ZZZ::ECP4 *P, ZZZ::ECP4 *Q, int d) -{ - FP4_cmove(&(P->x), &(Q->x), d); - FP4_cmove(&(P->y), &(Q->y), d); - FP4_cmove(&(P->z), &(Q->z), d); -} - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} - -/* Constant time select from pre-computed table */ -static void ECP4_select(ZZZ::ECP4 *P, ZZZ::ECP4 W[], sign32 b) -{ - ZZZ::ECP4 MP; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - ECP4_cmove(P, &W[0], teq(babs, 0)); // conditional move - ECP4_cmove(P, &W[1], teq(babs, 1)); - ECP4_cmove(P, &W[2], teq(babs, 2)); - ECP4_cmove(P, &W[3], teq(babs, 3)); - ECP4_cmove(P, &W[4], teq(babs, 4)); - ECP4_cmove(P, &W[5], teq(babs, 5)); - ECP4_cmove(P, &W[6], teq(babs, 6)); - ECP4_cmove(P, &W[7], teq(babs, 7)); - - ECP4_copy(&MP, P); - ECP4_neg(&MP); // minus P - ECP4_cmove(P, &MP, (int)(m & 1)); -} - -/* Make P affine (so z=1) */ -void ZZZ::ECP4_affine(ECP4 *P) -{ - FP4 one, iz; - if (ECP4_isinf(P)) return; - - FP4_one(&one); - if (FP4_isunity(&(P->z))) - { - FP4_reduce(&(P->x)); - FP4_reduce(&(P->y)); - return; - } - - FP4_inv(&iz, &(P->z),NULL); - FP4_mul(&(P->x), &(P->x), &iz); - FP4_mul(&(P->y), &(P->y), &iz); - - FP4_reduce(&(P->x)); - FP4_reduce(&(P->y)); - FP4_copy(&(P->z), &one); -} - -/* return 1 if P==Q, else 0 */ -/* SU= 312 */ -int ZZZ::ECP4_equals(ECP4 *P, ECP4 *Q) -{ - FP4 a, b; - - FP4_mul(&a, &(P->x), &(Q->z)); - FP4_mul(&b, &(Q->x), &(P->z)); - if (!FP4_equals(&a, &b)) return 0; - - FP4_mul(&a, &(P->y), &(Q->z)); - FP4_mul(&b, &(Q->y), &(P->z)); - if (!FP4_equals(&a, &b)) return 0; - return 1; - -} - -/* extract x, y from point P */ -int ZZZ::ECP4_get(FP4 *x, FP4 *y, ECP4 *P) -{ - ECP4 W; - ECP4_copy(&W, P); - ECP4_affine(&W); - if (ECP4_isinf(&W)) return -1; - FP4_copy(y, &(W.y)); - FP4_copy(x, &(W.x)); - return 0; -} - -/* Output point P */ -void ZZZ::ECP4_output(ECP4 *P) -{ - FP4 x, y; - if (ECP4_isinf(P)) - { - printf("Infinity\n"); - return; - } - ECP4_get(&x, &y, P); - printf("("); - FP4_output(&x); - printf(","); - FP4_output(&y); - printf(")\n"); -} - -/* Convert Q to octet string */ -void ZZZ::ECP4_toOctet(octet *W, ECP4 *Q,bool compress) -{ - FP4 qx, qy; - bool alt=false; - ECP4_get(&qx, &qy, Q); - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - FP4_toBytes(&(W->val[0]),&qx); - if (!compress) - { - W->len=8*MODBYTES_XXX; - FP4_toBytes(&(W->val[4*MODBYTES_XXX]), &qy); - } else { - W->val[0]|=0x80; - if (FP4_islarger(&qy)==1) W->val[0]|=0x20; - W->len=4*MODBYTES_XXX; - } - } else { - FP4_toBytes(&(W->val[1]),&qx); - if (!compress) - { - W->val[0] = 0x04; - FP4_toBytes(&(W->val[4 * MODBYTES_XXX+1]), &qy); - W->len = 8 * MODBYTES_XXX+1; - } else { - W->val[0]=0x02; - if (FP4_sign(&qy)==1) W->val[0] = 0x03; - W->len = 4 * MODBYTES_XXX+1; - } - } -} - -/* restore Q from octet string */ -int ZZZ::ECP4_fromOctet(ECP4 *Q, octet *W) -{ - FP4 qx, qy; - bool alt=false; - int sgn,cmp,typ = W->val[0]; - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - W->val[0]&=0x1f; - FP4_fromBytes(&qx,&(W->val[0])); - W->val[0]=typ; - if ((typ&0x80)==0) - { - FP4_fromBytes(&qy,&(W->val[4*MODBYTES_XXX])); - if (ECP4_set(Q, &qx, &qy)) return 1; - return 0; - } else { - if (!ECP4_setx(Q,&qx,0)) return 0; - sgn=(typ&0x20)>>5; - cmp=FP4_islarger(&(Q->y)); - if ((sgn==1 && cmp!=1) || (sgn==0 && cmp==1)) ECP4_neg(Q); - return 1; - } - } else { - FP4_fromBytes(&qx,&(W->val[1])); - if (typ == 0x04) - { - FP4_fromBytes(&qy,&(W->val[4 * MODBYTES_XXX+1])); - if (ECP4_set(Q, &qx, &qy)) return 1; - } else { - if (ECP4_setx(Q, &qx, typ&1)) return 1; - } - } - return 0; -} - -/* Calculate RHS of twisted curve equation x^3+B/i or x^3+Bi*/ -void ZZZ::ECP4_rhs(FP4 *rhs, FP4 *x) -{ - /* calculate RHS of elliptic curve equation */ - FP4 t; - FP2 t2; - BIG b; - FP4_sqr(&t, x); - - FP4_mul(rhs, &t, x); - - /* Assuming CURVE_A=0 */ - - BIG_rcopy(b, CURVE_B); - - FP2_from_BIG(&t2, b); - FP4_from_FP2(&t, &t2); - -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP4_div_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */ -#endif - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP4_times_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */ -#endif - - FP4_add(rhs, &t, rhs); - FP4_reduce(rhs); -} - -/* Set P=(x,y). Return 1 if (x,y) is on the curve, else return 0*/ -/* SU= 232 */ -int ZZZ::ECP4_set(ECP4 *P, FP4 *x, FP4 *y) -{ - FP4 rhs, y2; - - FP4_sqr(&y2, y); - ECP4_rhs(&rhs, x); - - if (!FP4_equals(&y2, &rhs)) - { - ECP4_inf(P); - return 0; - } - - FP4_copy(&(P->x), x); - FP4_copy(&(P->y), y); - - FP4_one(&(P->z)); - return 1; -} - -/* Set P=(x,y). Return 1 if (x,.) is on the curve, else return 0 */ -/* SU= 232 */ -int ZZZ::ECP4_setx(ECP4 *P, FP4 *x, int s) -{ - FP4 y; - FP hint; - ECP4_rhs(&y, x); - - if (!FP4_qr(&y,&hint)) - { - ECP4_inf(P); - return 0; - } - FP4_sqrt(&y, &y, &hint); - - FP4_copy(&(P->x), x); - FP4_copy(&(P->y), &y); - FP4_one(&(P->z)); - - if (FP4_sign(&(P->y)) != s) - FP4_neg(&(P->y),&(P->y)); - FP4_reduce(&(P->y)); - - return 1; -} - -/* Set P=-P */ -/* SU= 8 */ -void ZZZ::ECP4_neg(ECP4 *P) -{ - FP4_norm(&(P->y)); - FP4_neg(&(P->y), &(P->y)); - FP4_norm(&(P->y)); -} - -/* R+=R */ -/* return -1 for Infinity, 0 for addition, 1 for doubling */ -int ZZZ::ECP4_dbl(ECP4 *P) -{ - FP4 t0, t1, t2, t3, iy, x3, y3; - - FP4_copy(&iy, &(P->y)); //FP4 iy=new FP4(y); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_times_i(&iy); //iy.mul_ip(); -#endif - - FP4_sqr(&t0, &(P->y)); //t0.sqr(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_times_i(&t0); //t0.mul_ip(); -#endif - - FP4_mul(&t1, &iy, &(P->z)); //t1.mul(z); - FP4_sqr(&t2, &(P->z)); //t2.sqr(); - - FP4_add(&(P->z), &t0, &t0); //z.add(t0); - FP4_norm(&(P->z)); //z.norm(); - FP4_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP4_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP4_norm(&(P->z)); //z.norm(); - - FP4_imul(&t2, &t2, 3 * CURVE_B_I); //t2.imul(3*ROM.CURVE_B_I); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_times_i(&t2); -#endif - - FP4_mul(&x3, &t2, &(P->z)); //x3.mul(z); - - FP4_add(&y3, &t0, &t2); //y3.add(t2); - FP4_norm(&y3); //y3.norm(); - FP4_mul(&(P->z), &(P->z), &t1); //z.mul(t1); - - FP4_add(&t1, &t2, &t2); //t1.add(t2); - FP4_add(&t2, &t2, &t1); //t2.add(t1); - FP4_norm(&t2); //t2.norm(); - FP4_sub(&t0, &t0, &t2); //t0.sub(t2); - FP4_norm(&t0); //t0.norm(); //y^2-9bz^2 - FP4_mul(&y3, &y3, &t0); //y3.mul(t0); - FP4_add(&(P->y), &y3, &x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2 - - FP4_mul(&t1, &(P->x), &iy); //t1.mul(iy); // - - FP4_norm(&t0); //x.norm(); - FP4_mul(&(P->x), &t0, &t1); //x.mul(t1); - FP4_add(&(P->x), &(P->x), &(P->x)); //x.add(x); //(y^2-9bz^2)xy2 - - FP4_norm(&(P->x)); //x.norm(); - - FP4_norm(&(P->y)); //y.norm(); - - return 1; -} - -/* Set P+=Q */ - -int ZZZ::ECP4_add(ECP4 *P, ECP4 *Q) -{ - FP4 t0, t1, t2, t3, t4, x3, y3, z3; - int b3 = 3 * CURVE_B_I; - - FP4_mul(&t0, &(P->x), &(Q->x)); //t0.mul(Q.x); // x.Q.x - FP4_mul(&t1, &(P->y), &(Q->y)); //t1.mul(Q.y); // y.Q.y - - FP4_mul(&t2, &(P->z), &(Q->z)); //t2.mul(Q.z); - FP4_add(&t3, &(P->x), &(P->y)); //t3.add(y); - FP4_norm(&t3); //t3.norm(); //t3=X1+Y1 - FP4_add(&t4, &(Q->x), &(Q->y)); //t4.add(Q.y); - FP4_norm(&t4); //t4.norm(); //t4=X2+Y2 - FP4_mul(&t3, &t3, &t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2) - FP4_add(&t4, &t0, &t1); //t4.add(t1); //t4=X1.X2+Y1.Y2 - - FP4_sub(&t3, &t3, &t4); //t3.sub(t4); - FP4_norm(&t3); //t3.norm(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_times_i(&t3); //t3.mul_ip(); -#endif - - FP4_add(&t4, &(P->y), &(P->z)); //t4.add(z); - FP4_norm(&t4); //t4.norm(); //t4=Y1+Z1 - - FP4_add(&x3, &(Q->y), &(Q->z)); //x3.add(Q.z); - FP4_norm(&x3); //x3.norm(); //x3=Y2+Z2 - - FP4_mul(&t4, &t4, &x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2) - - FP4_add(&x3, &t1, &t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2 - - FP4_sub(&t4, &t4, &x3); //t4.sub(x3); - FP4_norm(&t4); //t4.norm(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_times_i(&t4); //t4.mul_ip(); -#endif - - FP4_add(&x3, &(P->x), &(P->z)); //x3.add(z); - FP4_norm(&x3); //x3.norm(); // x3=X1+Z1 - - FP4_add(&y3, &(Q->x), &(Q->z)); //y3.add(Q.z); - FP4_norm(&y3); //y3.norm(); // y3=X2+Z2 - FP4_mul(&x3, &x3, &y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2) - - FP4_add(&y3, &t0, &t2); //y3.add(t2); // y3=X1.X2+Z1+Z2 - FP4_sub(&y3, &x3, &y3); //y3.rsub(x3); - FP4_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1 -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_times_i(&t0); //t0.mul_ip(); - FP4_times_i(&t1); //t1.mul_ip(); -#endif - - FP4_add(&x3, &t0, &t0); //x3.add(t0); - FP4_add(&t0, &t0, &x3); //t0.add(x3); - FP4_norm(&t0); //t0.norm(); - FP4_imul(&t2, &t2, b3); //t2.imul(b); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_times_i(&t2); -#endif - - FP4_add(&z3, &t1, &t2); //z3.add(t2); - FP4_norm(&z3); //z3.norm(); - FP4_sub(&t1, &t1, &t2); //t1.sub(t2); - FP4_norm(&t1); //t1.norm(); - FP4_imul(&y3, &y3, b3); //y3.imul(b); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_times_i(&y3); -#endif - - FP4_mul(&x3, &y3, &t4); //x3.mul(t4); - - FP4_mul(&t2, &t3, &t1); //t2.mul(t1); - FP4_sub(&(P->x), &t2, &x3); //x3.rsub(t2); - FP4_mul(&y3, &y3, &t0); //y3.mul(t0); - FP4_mul(&t1, &t1, &z3); //t1.mul(z3); - FP4_add(&(P->y), &y3, &t1); //y3.add(t1); - FP4_mul(&t0, &t0, &t3); //t0.mul(t3); - FP4_mul(&z3, &z3, &t4); //z3.mul(t4); - FP4_add(&(P->z), &z3, &t0); //z3.add(t0); - - FP4_norm(&(P->x)); //x.norm(); - FP4_norm(&(P->y)); //y.norm(); - FP4_norm(&(P->z)); //z.norm(); - - return 0; -} - -/* Set P-=Q */ -/* SU= 16 */ -void ZZZ::ECP4_sub(ECP4 *P, ECP4 *Q) -{ - ECP4 NQ; - ECP4_copy(&NQ, Q); - ECP4_neg(&NQ); - ECP4_add(P, &NQ); -} - - -void ZZZ::ECP4_reduce(ECP4 *P) -{ - FP4_reduce(&(P->x)); - FP4_reduce(&(P->y)); - FP4_reduce(&(P->z)); -} - -/* P*=e */ -/* SU= 280 */ -void ZZZ::ECP4_mul(ECP4 *P, BIG e) -{ - /* fixed size windows */ - int i, nb, s, ns; - BIG mt, t; - ECP4 Q, W[8], C; - sign8 w[1 + (NLEN_XXX * BASEBITS_XXX + 3) / 4]; - - if (ECP4_isinf(P)) return; - - /* precompute table */ - - ECP4_copy(&Q, P); - ECP4_dbl(&Q); - ECP4_copy(&W[0], P); - - for (i = 1; i < 8; i++) - { - ECP4_copy(&W[i], &W[i - 1]); - ECP4_add(&W[i], &Q); - } - - /* make exponent odd - add 2P if even, P if odd */ - BIG_copy(t, e); - s = BIG_parity(t); - BIG_inc(t, 1); - BIG_norm(t); - ns = BIG_parity(t); - BIG_copy(mt, t); - BIG_inc(mt, 1); - BIG_norm(mt); - BIG_cmove(t, mt, s); - ECP4_cmove(&Q, P, ns); - ECP4_copy(&C, &Q); - - nb = 1 + (BIG_nbits(t) + 3) / 4; - - /* convert exponent to signed 4-bit window */ - for (i = 0; i < nb; i++) - { - w[i] = BIG_lastbits(t, 5) - 16; - BIG_dec(t, w[i]); - BIG_norm(t); - BIG_fshr(t, 4); - } - w[nb] = BIG_lastbits(t, 5); - - //ECP4_copy(P, &W[(w[nb] - 1) / 2]); - ECP4_select(P, W, w[nb]); - for (i = nb - 1; i >= 0; i--) - { - ECP4_select(&Q, W, w[i]); - ECP4_dbl(P); - ECP4_dbl(P); - ECP4_dbl(P); - ECP4_dbl(P); - ECP4_add(P, &Q); - } - ECP4_sub(P, &C); /* apply correction */ - ECP4_affine(P); -} - -// calculate frobenius constants -void ZZZ::ECP4_frob_constants(FP2 F[3]) -{ - FP fx, fy; - FP2 X; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - - FP2_sqr(&F[0], &X); // FF=F^2=(1+i)^(p-7)/6 - FP2_copy(&F[2], &F[0]); - FP2_mul_ip(&F[2]); // W=(1+i)^6/6.(1+i)^(p-7)/6 = (1+i)^(p-1)/6 - FP2_norm(&F[2]); - FP2_sqr(&F[1], &F[2]); - FP2_mul(&F[2], &F[2], &F[1]); // W=(1+i)^(p-1)/2 - - FP2_copy(&F[1], &X); - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP2_mul_ip(&F[1]); // (1+i)^12/12.(1+i)^(p-7)/12 = (1+i)^(p+5)/12 - FP2_inv(&F[1], &F[1], NULL); // (1+i)^-(p+5)/12 - FP2_sqr(&F[0], &F[1]); // (1+i)^-(p+5)/6 -#endif - - FP2_mul_ip(&F[0]); // FF=(1+i)^(p-7)/6.(1+i) = (1+i)^(p-1)/6 // (1+i)^6/6.(1+i)^-(p+5)/6 = (1+i)^-(p-1)/6 - FP2_norm(&F[0]); - FP2_mul(&F[1], &F[1], &F[0]); // FFF = (1+i)^(p-7)/12 . (1+i)^(p-1)/6 = (1+i)^(p-3)/4 // (1+i)^-(p+5)/12 . (1+i)^-(p-1)/6 = (1+i)^-(p+1)/4 - -} - -/* Calculates q^n.P using Frobenius constants */ -void ZZZ::ECP4_frob(ECP4 *P, FP2 F[3], int n) -{ - int i; - FP4 X, Y, Z; - - FP4_copy(&X, &(P->x)); - FP4_copy(&Y, &(P->y)); - FP4_copy(&Z, &(P->z)); - - for (i = 0; i < n; i++) - { - FP4_frob(&X, &F[2]); // X^p - FP4_pmul(&X, &X, &F[0]); // X^p.(1+i)^(p-1)/6 // X^p.(1+i)^-(p-1)/6 - - FP4_frob(&Y, &F[2]); // Y^p - FP4_pmul(&Y, &Y, &F[1]); - FP4_times_i(&Y); // Y.p.(1+i)^(p-3)/4.(1+i)^(2/4) = Y^p.(1+i)^(p-1)/4 // (1+i)^-(p+1)/4 .(1+i)^2/4 = Y^p.(1+i)^-(p-1)/4 - - FP4_frob(&Z, &F[2]); - } - - FP4_copy(&(P->x), &X); - FP4_copy(&(P->y), &Y); - FP4_copy(&(P->z), &Z); - - - //ECP4_set(P,&X,&Y); -} - -/* Side channel attack secure */ -// Bos & Costello https://eprint.iacr.org/2013/458.pdf -// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf - -void ZZZ::ECP4_mul8(ECP4 *P, ECP4 Q[8], BIG u[8]) -{ - int i, j, k, nb, pb1, pb2, bt; - ECP4 T1[8], T2[8], W; - BIG mt, t[8]; - sign8 w1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w2[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s2[NLEN_XXX * BASEBITS_XXX + 1]; -// FP2 X[3]; - /* - ECP4_frob_constants(X); - */ - for (i = 0; i < 8; i++) - { - BIG_copy(t[i], u[i]); - } -// Precomputed tables - ECP4_copy(&T1[0], &Q[0]); // Q[0] - ECP4_copy(&T1[1], &T1[0]); - ECP4_add(&T1[1], &Q[1]); // Q[0]+Q[1] - ECP4_copy(&T1[2], &T1[0]); - ECP4_add(&T1[2], &Q[2]); // Q[0]+Q[2] - ECP4_copy(&T1[3], &T1[1]); - ECP4_add(&T1[3], &Q[2]); // Q[0]+Q[1]+Q[2] - ECP4_copy(&T1[4], &T1[0]); - ECP4_add(&T1[4], &Q[3]); // Q[0]+Q[3] - ECP4_copy(&T1[5], &T1[1]); - ECP4_add(&T1[5], &Q[3]); // Q[0]+Q[1]+Q[3] - ECP4_copy(&T1[6], &T1[2]); - ECP4_add(&T1[6], &Q[3]); // Q[0]+Q[2]+Q[3] - ECP4_copy(&T1[7], &T1[3]); - ECP4_add(&T1[7], &Q[3]); // Q[0]+Q[1]+Q[2]+Q[3] - - ECP4_copy(&T2[0], &Q[4]); // Q[0] - ECP4_copy(&T2[1], &T2[0]); - ECP4_add(&T2[1], &Q[5]); // Q[0]+Q[1] - ECP4_copy(&T2[2], &T2[0]); - ECP4_add(&T2[2], &Q[6]); // Q[0]+Q[2] - ECP4_copy(&T2[3], &T2[1]); - ECP4_add(&T2[3], &Q[6]); // Q[0]+Q[1]+Q[2] - ECP4_copy(&T2[4], &T2[0]); - ECP4_add(&T2[4], &Q[7]); // Q[0]+Q[3] - ECP4_copy(&T2[5], &T2[1]); - ECP4_add(&T2[5], &Q[7]); // Q[0]+Q[1]+Q[3] - ECP4_copy(&T2[6], &T2[2]); - ECP4_add(&T2[6], &Q[7]); // Q[0]+Q[2]+Q[3] - ECP4_copy(&T2[7], &T2[3]); - ECP4_add(&T2[7], &Q[7]); // Q[0]+Q[1]+Q[2]+Q[3] - -// Use Frobenius - /* - for (i=0;i<8;i++) - { - ECP4_copy(&T2[i],&T1[i]); - ECP4_frob(&T2[i],X,4); - } - */ -// Make them odd - pb1 = 1 - BIG_parity(t[0]); - BIG_inc(t[0], pb1); - BIG_norm(t[0]); - - pb2 = 1 - BIG_parity(t[4]); - BIG_inc(t[4], pb2); - BIG_norm(t[4]); - -// Number of bits - BIG_zero(mt); - for (i = 0; i < 8; i++) - { - BIG_or(mt, mt, t[i]); - } - nb = 1 + BIG_nbits(mt); - -// Sign pivot - s1[nb - 1] = 1; - s2[nb - 1] = 1; - for (i = 0; i < nb - 1; i++) - { - BIG_fshr(t[0], 1); - s1[i] = 2 * BIG_parity(t[0]) - 1; - BIG_fshr(t[4], 1); - s2[i] = 2 * BIG_parity(t[4]) - 1; - } - - -// Recoded exponents - for (i = 0; i < nb; i++) - { - w1[i] = 0; - k = 1; - for (j = 1; j < 4; j++) - { - bt = s1[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w1[i] += bt * k; - k *= 2; - } - - w2[i] = 0; - k = 1; - for (j = 5; j < 8; j++) - { - bt = s2[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w2[i] += bt * k; - k *= 2; - } - } - -// Main loop - ECP4_select(P, T1, 2 * w1[nb - 1] + 1); - ECP4_select(&W, T2, 2 * w2[nb - 1] + 1); - ECP4_add(P, &W); - for (i = nb - 2; i >= 0; i--) - { - ECP4_dbl(P); - ECP4_select(&W, T1, 2 * w1[i] + s1[i]); - ECP4_add(P, &W); - ECP4_select(&W, T2, 2 * w2[i] + s2[i]); - ECP4_add(P, &W); - } - -// apply corrections - ECP4_copy(&W, P); - ECP4_sub(&W, &Q[0]); - ECP4_cmove(P, &W, pb1); - ECP4_copy(&W, P); - ECP4_sub(&W, &Q[4]); - ECP4_cmove(P, &W, pb2); - - ECP4_affine(P); -} - -/* Hunt and Peck a BIG to G2 curve point */ -/* -void ZZZ::ECP4_hap2point(ECP4 *Q,BIG h) -{ - BIG one,hv; - FP2 X2; - FP4 X4; - BIG_one(one); - BIG_copy(hv,h); - - for (;;) - { - FP2_from_BIGs(&X2,one,hv); - FP4_from_FP2(&X4,&X2); - if (ECP4_setx(Q,&X4,0)) break; - BIG_inc(hv,1); - BIG_norm(hv); - } -} -*/ -/* Constant time Map BIG to Point in G2 */ -void ZZZ::ECP4_map2point(ECP4 *Q,FP4 *H) -{ - int sgn,ne; - FP4 X1,X2,X3,W,Y,T,A,NY; - FP Z,s; - - FP4_one(&NY); - FP4_copy(&T,H); - sgn=FP4_sign(&T); - - FP_from_int(&Z,RIADZG2A_YYY); - FP4_from_FP(&A,&Z); - ECP4_rhs(&A,&A); // A=g(Z) - - FP4_sqrt(&W,&A,NULL); - FP_rcopy(&s,SQRTm3); - - FP_mul(&Z,&Z,&s); - - FP4_sqr(&T,&T); - FP4_mul(&Y,&A,&T); // tv1=u^2*g(Z) - FP4_add(&T,&NY,&Y); FP4_norm(&T); // tv2=1+tv1 - FP4_sub(&Y,&NY,&Y); FP4_norm(&Y); // tv1=1-tv1 - FP4_mul(&NY,&T,&Y); - - FP4_qmul(&NY,&NY,&Z); - - FP4_inv(&NY,&NY,NULL); // tv3=inv0(tv1*tv2*Z*sqrt(-3)) - FP4_qmul(&W,&W,&Z); // tv4=Z*sqrt(-3).sqrt(g(Z)) - if (FP4_sign(&W)==1) - { - FP4_neg(&W,&W); - FP4_norm(&W); - } - FP4_qmul(&W,&W,&Z); - FP4_mul(&W,&W,H); - FP4_mul(&W,&W,&Y); - FP4_mul(&W,&W,&NY); // tv5=u*tv1*tv3*tv4*Z*sqrt(-3) - - FP_from_int(&s,RIADZG2A_YYY); - FP4_from_FP(&X1,&s); - - FP4_copy(&X3,&X1); - FP4_neg(&X1,&X1); FP4_norm(&X1); FP4_div2(&X1,&X1); // -Z/2 - FP4_copy(&X2,&X1); - FP4_sub(&X1,&X1,&W); FP4_norm(&X1); - FP4_add(&X2,&X2,&W); FP4_norm(&X2); - FP4_add(&A,&A,&A); - FP4_add(&A,&A,&A); - FP4_norm(&A); // 4*g(Z) - FP4_sqr(&T,&T); - FP4_mul(&T,&T,&NY); - FP4_sqr(&T,&T); // (tv2^2*tv3)^2 - FP4_mul(&A,&A,&T); // -4*g(Z)*(tv2^2*tv3)^2 - - FP4_add(&X3,&X3,&A); FP4_norm(&X3); - - ECP4_rhs(&W,&X2); - FP4_cmove(&X3,&X2,FP4_qr(&W,NULL)); - ECP4_rhs(&W,&X1); - FP4_cmove(&X3,&X1,FP4_qr(&W,NULL)); - ECP4_rhs(&W,&X3); - FP4_sqrt(&Y,&W,NULL); - - ne=FP4_sign(&Y)^sgn; - FP4_neg(&W,&Y); FP4_norm(&W); - FP4_cmove(&Y,&W,ne); - - ECP4_set(Q,&X3,&Y); -} - -/* Map octet to point on G2 */ -/* -void ZZZ::ECP4_mapit(ECP4 *Q, octet *W) -{ - BIG q, x; - DBIG dx; - BIG_rcopy(q, Modulus); - - BIG_dfromBytesLen(dx,W->val,W->len); - BIG_dmod(x,dx,q); - - ECP4_hap2point(Q,x); - ECP4_cfp(Q); -} -*/ -/* cofactor product */ -void ZZZ::ECP4_cfp(ECP4 *Q) -{ - FP2 X[3]; - ECP4 xQ, x2Q, x3Q, x4Q; - BIG x; - - ECP4_frob_constants(X); - - BIG_rcopy(x, CURVE_Bnx); - - // Efficient hash maps to G2 on BLS24 curves - Budroni, Pintore - // Q -> x4Q -x3Q -Q + F(x3Q-x2Q) + F(F(x2Q-xQ)) + F(F(F(xQ-Q))) +F(F(F(F(2Q)))) - - ECP4_copy(&xQ, Q); - ECP4_mul(&xQ, x); - ECP4_copy(&x2Q, &xQ); - ECP4_mul(&x2Q, x); - ECP4_copy(&x3Q, &x2Q); - ECP4_mul(&x3Q, x); - ECP4_copy(&x4Q, &x3Q); - ECP4_mul(&x4Q, x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP4_neg(&xQ); - ECP4_neg(&x3Q); -#endif - - ECP4_sub(&x4Q, &x3Q); - ECP4_sub(&x4Q, Q); - - ECP4_sub(&x3Q, &x2Q); - ECP4_frob(&x3Q, X, 1); - - ECP4_sub(&x2Q, &xQ); - ECP4_frob(&x2Q, X, 2); - - ECP4_sub(&xQ, Q); - ECP4_frob(&xQ, X, 3); - - ECP4_dbl(Q); - ECP4_frob(Q, X, 4); - - ECP4_add(Q, &x4Q); - ECP4_add(Q, &x3Q); - ECP4_add(Q, &x2Q); - ECP4_add(Q, &xQ); - - ECP4_affine(Q); - -} - -// ECP$ Get Group Generator - -int ZZZ::ECP4_generator(ECP4 *G) -{ - BIG a, b; - FP2 Aa, Bb; - FP4 X, Y; - - BIG_rcopy(a, CURVE_Pxaa); - BIG_rcopy(b, CURVE_Pxab); - FP2_from_BIGs(&Aa, a, b); - - BIG_rcopy(a, CURVE_Pxba); - BIG_rcopy(b, CURVE_Pxbb); - FP2_from_BIGs(&Bb, a, b); - - FP4_from_FP2s(&X, &Aa, &Bb); - - BIG_rcopy(a, CURVE_Pyaa); - BIG_rcopy(b, CURVE_Pyab); - FP2_from_BIGs(&Aa, a, b); - - BIG_rcopy(a, CURVE_Pyba); - BIG_rcopy(b, CURVE_Pybb); - FP2_from_BIGs(&Bb, a, b); - - FP4_from_FP2s(&Y, &Aa, &Bb); - - return ECP4_set(G, &X, &Y); -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp8.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp8.cpp deleted file mode 100644 index 17de76a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecp8.cpp +++ /dev/null @@ -1,1118 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Weierstrass elliptic curve functions over FP2 */ - -//#include -#include "ecp8_ZZZ.h" - -using namespace std; -using namespace XXX; -using namespace YYY; - -int ZZZ::ECP8_isinf(ECP8 *P) -{ - return (FP8_iszilch(&(P->x)) & FP8_iszilch(&(P->z))); -} - -/* Set P=Q */ -void ZZZ::ECP8_copy(ECP8 *P, ECP8 *Q) -{ - FP8_copy(&(P->x), &(Q->x)); - FP8_copy(&(P->y), &(Q->y)); - FP8_copy(&(P->z), &(Q->z)); -} - -/* set P to Infinity */ -void ZZZ::ECP8_inf(ECP8 *P) -{ - FP8_zero(&(P->x)); - FP8_one(&(P->y)); - FP8_zero(&(P->z)); -} - -/* Conditional move Q to P dependant on d */ -static void ECP8_cmove(ZZZ::ECP8 *P, ZZZ::ECP8 *Q, int d) -{ - FP8_cmove(&(P->x), &(Q->x), d); - FP8_cmove(&(P->y), &(Q->y), d); - FP8_cmove(&(P->z), &(Q->z), d); -} - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} - -/* Constant time select from pre-computed table */ -static void ECP8_select(ZZZ::ECP8 *P, ZZZ::ECP8 W[], sign32 b) -{ - ZZZ::ECP8 MP; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - ECP8_cmove(P, &W[0], teq(babs, 0)); // conditional move - ECP8_cmove(P, &W[1], teq(babs, 1)); - ECP8_cmove(P, &W[2], teq(babs, 2)); - ECP8_cmove(P, &W[3], teq(babs, 3)); - ECP8_cmove(P, &W[4], teq(babs, 4)); - ECP8_cmove(P, &W[5], teq(babs, 5)); - ECP8_cmove(P, &W[6], teq(babs, 6)); - ECP8_cmove(P, &W[7], teq(babs, 7)); - - ECP8_copy(&MP, P); - ECP8_neg(&MP); // minus P - ECP8_cmove(P, &MP, (int)(m & 1)); -} - -/* Make P affine (so z=1) */ -void ZZZ::ECP8_affine(ECP8 *P) -{ - FP8 one, iz; - if (ECP8_isinf(P)) return; - - FP8_one(&one); - if (FP8_isunity(&(P->z))) - { - FP8_reduce(&(P->x)); - FP8_reduce(&(P->y)); - return; - } - - FP8_inv(&iz, &(P->z),NULL); - FP8_mul(&(P->x), &(P->x), &iz); - FP8_mul(&(P->y), &(P->y), &iz); - - FP8_reduce(&(P->x)); - FP8_reduce(&(P->y)); - FP8_copy(&(P->z), &one); -} - -/* return 1 if P==Q, else 0 */ -/* SU= 312 */ -int ZZZ::ECP8_equals(ECP8 *P, ECP8 *Q) -{ - FP8 a, b; - - FP8_mul(&a, &(P->x), &(Q->z)); - FP8_mul(&b, &(Q->x), &(P->z)); - if (!FP8_equals(&a, &b)) return 0; - - FP8_mul(&a, &(P->y), &(Q->z)); - FP8_mul(&b, &(Q->y), &(P->z)); - if (!FP8_equals(&a, &b)) return 0; - return 1; -} - -/* extract x, y from point P */ -int ZZZ::ECP8_get(FP8 *x, FP8 *y, ECP8 *P) -{ - ECP8 W; - ECP8_copy(&W, P); - ECP8_affine(&W); - if (ECP8_isinf(&W)) return -1; - FP8_copy(y, &(W.y)); - FP8_copy(x, &(W.x)); - return 0; -} - -/* Output point P */ -void ZZZ::ECP8_output(ECP8 *P) -{ - FP8 x, y; - if (ECP8_isinf(P)) - { - printf("Infinity\n"); - return; - } - ECP8_get(&x, &y, P); - printf("("); - FP8_output(&x); - printf(","); - FP8_output(&y); - printf(")\n"); -} - -/* Convert Q to octet string */ -void ZZZ::ECP8_toOctet(octet *W, ECP8 *Q,bool compress) -{ - FP8 qx, qy; - bool alt=false; - ECP8_get(&qx, &qy, Q); - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - FP8_toBytes(&(W->val[0]),&qx); - if (!compress) - { - W->len=16*MODBYTES_XXX; - FP8_toBytes(&(W->val[8*MODBYTES_XXX]), &qy); - } else { - W->val[0]|=0x80; - if (FP8_islarger(&qy)==1) W->val[0]|=0x20; - W->len=8*MODBYTES_XXX; - } - } else { - FP8_toBytes(&(W->val[1]),&qx); - if (!compress) - { - W->val[0] = 0x04; - - FP8_toBytes(&(W->val[8 * MODBYTES_XXX+1]), &qy); - W->len = 16 * MODBYTES_XXX+1; - } else { - W->val[0]=0x02; - if (FP8_sign(&qy)==1) W->val[0] = 0x03; - W->len = 8 * MODBYTES_XXX+1; - } - } -} - -/* restore Q from octet string */ -int ZZZ::ECP8_fromOctet(ECP8 *Q, octet *W) -{ - FP8 qx, qy; - bool alt=false; - int sgn,cmp,typ = W->val[0]; - -#if (MBITS-1)%8 <= 4 -#ifdef ALLOW_ALT_COMPRESS_ZZZ - alt=true; -#endif -#endif - - if (alt) - { - W->val[0]&=0x1f; - FP8_fromBytes(&qx,&(W->val[0])); - W->val[0]=typ; - if ((typ&0x80)==0) - { - FP8_fromBytes(&qy,&(W->val[8*MODBYTES_XXX])); - if (ECP8_set(Q, &qx, &qy)) return 1; - return 0; - } else { - if (!ECP8_setx(Q,&qx,0)) return 0; - sgn=(typ&0x20)>>5; - cmp=FP8_islarger(&(Q->y)); - if ((sgn==1 && cmp!=1) || (sgn==0 && cmp==1)) ECP8_neg(Q); - return 1; - } - } else { - FP8_fromBytes(&qx,&(W->val[1])); - - if (typ == 0x04) - { - FP8_fromBytes(&qy,&(W->val[8 * MODBYTES_XXX+1])); - if (ECP8_set(Q, &qx, &qy)) return 1; - } else { - if (ECP8_setx(Q, &qx, typ&1)) return 1; - } - } - return 0; -} - -/* Calculate RHS of twisted curve equation x^3+B/i or x^3+Bi*/ -void ZZZ::ECP8_rhs(FP8 *rhs, FP8 *x) -{ - /* calculate RHS of elliptic curve equation */ - FP8 t; - FP4 t4; - FP2 t2; - BIG b; - FP8_sqr(&t, x); - - FP8_mul(rhs, &t, x); - - /* Assuming CURVE_A=0 */ - - BIG_rcopy(b, CURVE_B); - - FP2_from_BIG(&t2, b); - FP4_from_FP2(&t4, &t2); - FP8_from_FP4(&t, &t4); - -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP8_div_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */ -#endif - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP8_times_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */ -#endif - - FP8_add(rhs, &t, rhs); - FP8_reduce(rhs); -} - -/* Set P=(x,y). Return 1 if (x,y) is on the curve, else return 0*/ -/* SU= 232 */ -int ZZZ::ECP8_set(ECP8 *P, FP8 *x, FP8 *y) -{ - FP8 rhs, y2; - - FP8_sqr(&y2, y); - ECP8_rhs(&rhs, x); - - if (!FP8_equals(&y2, &rhs)) - { - ECP8_inf(P); - return 0; - } - - FP8_copy(&(P->x), x); - FP8_copy(&(P->y), y); - FP8_one(&(P->z)); - return 1; -} - -/* Set P=(x,y). Return 1 if (x,.) is on the curve, else return 0 */ -/* SU= 232 */ -int ZZZ::ECP8_setx(ECP8 *P, FP8 *x, int s) -{ - FP8 y; - FP hint; - ECP8_rhs(&y, x); - - if (!FP8_qr(&y,&hint)) - { - ECP8_inf(P); - return 0; - } - FP8_sqrt(&y,&y,&hint); - - FP8_copy(&(P->x), x); - FP8_copy(&(P->y), &y); - FP8_one(&(P->z)); - - if (FP8_sign(&(P->y)) != s) - FP8_neg(&(P->y),&(P->y)); - FP8_reduce(&(P->y)); - - return 1; -} - -/* Set P=-P */ -/* SU= 8 */ -void ZZZ::ECP8_neg(ECP8 *P) -{ - FP8_norm(&(P->y)); - FP8_neg(&(P->y), &(P->y)); - FP8_norm(&(P->y)); -} - - -/* R+=R */ -/* return -1 for Infinity, 0 for addition, 1 for doubling */ -int ZZZ::ECP8_dbl(ECP8 *P) -{ - FP8 t0, t1, t2, t3, iy, x3, y3; - - FP8_copy(&iy, &(P->y)); //FP8 iy=new FP8(y); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_times_i(&iy); //iy.mul_ip(); -#endif - - FP8_sqr(&t0, &(P->y)); //t0.sqr(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_times_i(&t0); //t0.mul_ip(); -#endif - - FP8_mul(&t1, &iy, &(P->z)); //t1.mul(z); - FP8_sqr(&t2, &(P->z)); //t2.sqr(); - - FP8_add(&(P->z), &t0, &t0); //z.add(t0); - FP8_norm(&(P->z)); //z.norm(); - FP8_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP8_add(&(P->z), &(P->z), &(P->z)); //z.add(z); - FP8_norm(&(P->z)); //z.norm(); - - FP8_imul(&t2, &t2, 3 * CURVE_B_I); //t2.imul(3*ROM.CURVE_B_I); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_times_i(&t2); -#endif - - FP8_mul(&x3, &t2, &(P->z)); //x3.mul(z); - - FP8_add(&y3, &t0, &t2); //y3.add(t2); - FP8_norm(&y3); //y3.norm(); - FP8_mul(&(P->z), &(P->z), &t1); //z.mul(t1); - - FP8_add(&t1, &t2, &t2); //t1.add(t2); - FP8_add(&t2, &t2, &t1); //t2.add(t1); - FP8_norm(&t2); //t2.norm(); - FP8_sub(&t0, &t0, &t2); //t0.sub(t2); - FP8_norm(&t0); //t0.norm(); //y^2-9bz^2 - FP8_mul(&y3, &y3, &t0); //y3.mul(t0); - FP8_add(&(P->y), &y3, &x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2 - - FP8_mul(&t1, &(P->x), &iy); //t1.mul(iy); // - - FP8_norm(&t0); //x.norm(); - FP8_mul(&(P->x), &t0, &t1); //x.mul(t1); - FP8_add(&(P->x), &(P->x), &(P->x)); //x.add(x); //(y^2-9bz^2)xy2 - - FP8_norm(&(P->x)); //x.norm(); - - FP8_norm(&(P->y)); //y.norm(); - - return 1; -} - -/* Set P+=Q */ - -int ZZZ::ECP8_add(ECP8 *P, ECP8 *Q) -{ - FP8 t0, t1, t2, t3, t4, x3, y3, z3; - int b3 = 3 * CURVE_B_I; - - FP8_mul(&t0, &(P->x), &(Q->x)); //t0.mul(Q.x); // x.Q.x - FP8_mul(&t1, &(P->y), &(Q->y)); //t1.mul(Q.y); // y.Q.y - - FP8_mul(&t2, &(P->z), &(Q->z)); //t2.mul(Q.z); - FP8_add(&t3, &(P->x), &(P->y)); //t3.add(y); - FP8_norm(&t3); //t3.norm(); //t3=X1+Y1 - FP8_add(&t4, &(Q->x), &(Q->y)); //t4.add(Q.y); - FP8_norm(&t4); //t4.norm(); //t4=X2+Y2 - FP8_mul(&t3, &t3, &t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2) - FP8_add(&t4, &t0, &t1); //t4.add(t1); //t4=X1.X2+Y1.Y2 - - FP8_sub(&t3, &t3, &t4); //t3.sub(t4); - FP8_norm(&t3); //t3.norm(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_times_i(&t3); //t3.mul_ip(); -#endif - - FP8_add(&t4, &(P->y), &(P->z)); //t4.add(z); - FP8_norm(&t4); //t4.norm(); //t4=Y1+Z1 - - FP8_add(&x3, &(Q->y), &(Q->z)); //x3.add(Q.z); - FP8_norm(&x3); //x3.norm(); //x3=Y2+Z2 - - FP8_mul(&t4, &t4, &x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2) - - FP8_add(&x3, &t1, &t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2 - - FP8_sub(&t4, &t4, &x3); //t4.sub(x3); - FP8_norm(&t4); //t4.norm(); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_times_i(&t4); //t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1 -#endif - - FP8_add(&x3, &(P->x), &(P->z)); //x3.add(z); - FP8_norm(&x3); //x3.norm(); // x3=X1+Z1 - - FP8_add(&y3, &(Q->x), &(Q->z)); //y3.add(Q.z); - FP8_norm(&y3); //y3.norm(); // y3=X2+Z2 - FP8_mul(&x3, &x3, &y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2) - - FP8_add(&y3, &t0, &t2); //y3.add(t2); // y3=X1.X2+Z1+Z2 - FP8_sub(&y3, &x3, &y3); //y3.rsub(x3); - FP8_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1 -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_times_i(&t0); //t0.mul_ip(); - FP8_times_i(&t1); //t1.mul_ip(); -#endif - - FP8_add(&x3, &t0, &t0); //x3.add(t0); - FP8_add(&t0, &t0, &x3); //t0.add(x3); - FP8_norm(&t0); //t0.norm(); - FP8_imul(&t2, &t2, b3); //t2.imul(b); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_times_i(&t2); -#endif - - FP8_add(&z3, &t1, &t2); //z3.add(t2); - FP8_norm(&z3); //z3.norm(); - FP8_sub(&t1, &t1, &t2); //t1.sub(t2); - FP8_norm(&t1); //t1.norm(); - FP8_imul(&y3, &y3, b3); //y3.imul(b); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_times_i(&y3); -#endif - - FP8_mul(&x3, &y3, &t4); //x3.mul(t4); - - FP8_mul(&t2, &t3, &t1); //t2.mul(t1); - FP8_sub(&(P->x), &t2, &x3); //x3.rsub(t2); - FP8_mul(&y3, &y3, &t0); //y3.mul(t0); - FP8_mul(&t1, &t1, &z3); //t1.mul(z3); - FP8_add(&(P->y), &y3, &t1); //y3.add(t1); - FP8_mul(&t0, &t0, &t3); //t0.mul(t3); - FP8_mul(&z3, &z3, &t4); //z3.mul(t4); - FP8_add(&(P->z), &z3, &t0); //z3.add(t0); - - - FP8_norm(&(P->x)); //x.norm(); - FP8_norm(&(P->y)); //y.norm(); - FP8_norm(&(P->z)); //z.norm(); - - return 0; -} - -/* Set P-=Q */ -/* SU= 16 */ -void ZZZ::ECP8_sub(ECP8 *P, ECP8 *Q) -{ - ECP8 NQ; - ECP8_copy(&NQ, Q); - ECP8_neg(&NQ); - ECP8_add(P, &NQ); -} - - -void ZZZ::ECP8_reduce(ECP8 *P) -{ - FP8_reduce(&(P->x)); - FP8_reduce(&(P->y)); -} - -/* P*=e */ -/* SU= 280 */ -void ZZZ::ECP8_mul(ECP8 *P, BIG e) -{ - /* fixed size windows */ - int i, nb, s, ns; - BIG mt, t; - ECP8 Q, W[8], C; - sign8 w[1 + (NLEN_XXX * BASEBITS_XXX + 3) / 4]; - - if (ECP8_isinf(P)) return; - - /* precompute table */ - - ECP8_copy(&Q, P); - ECP8_dbl(&Q); - ECP8_copy(&W[0], P); - - for (i = 1; i < 8; i++) - { - ECP8_copy(&W[i], &W[i - 1]); - ECP8_add(&W[i], &Q); - } - - /* make exponent odd - add 2P if even, P if odd */ - BIG_copy(t, e); - s = BIG_parity(t); - BIG_inc(t, 1); - BIG_norm(t); - ns = BIG_parity(t); - BIG_copy(mt, t); - BIG_inc(mt, 1); - BIG_norm(mt); - BIG_cmove(t, mt, s); - ECP8_cmove(&Q, P, ns); - ECP8_copy(&C, &Q); - - nb = 1 + (BIG_nbits(t) + 3) / 4; - - /* convert exponent to signed 4-bit window */ - for (i = 0; i < nb; i++) - { - w[i] = BIG_lastbits(t, 5) - 16; - BIG_dec(t, w[i]); - BIG_norm(t); - BIG_fshr(t, 4); - } - w[nb] = BIG_lastbits(t, 5); - - //ECP8_copy(P, &W[(w[nb] - 1) / 2]); - ECP8_select(P, W, w[nb]); - for (i = nb - 1; i >= 0; i--) - { - ECP8_select(&Q, W, w[i]); - ECP8_dbl(P); - ECP8_dbl(P); - ECP8_dbl(P); - ECP8_dbl(P); - ECP8_add(P, &Q); - } - ECP8_sub(P, &C); /* apply correction */ - ECP8_affine(P); -} - -void ZZZ::ECP8_frob_constants(FP2 F[3]) -{ - FP fx, fy; - FP2 X; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); // u^(p-19)/24 - - FP2_sqr(&F[0], &X); // F[0]=u^(p-19)/12 - FP2_copy(&F[2], &F[0]); - FP2_mul_ip(&F[2]); // W=u^12/12.u^(p-19)/12 = u^(p-7)/12 - FP2_norm(&F[2]); - FP2_sqr(&F[1], &F[2]); - FP2_mul(&F[2], &F[2], &F[1]); // W=u^(p-7)/4 - - FP2_mul_ip(&F[2]); // W=u^4/4.W=u^(p-7)/4 = u^(p-3)/4 - FP2_norm(&F[2]); - - FP2_copy(&F[1], &X); - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP2_mul_ip(&F[1]); // u^24/24.u^(p-19)/24 = u^(p+5)/24 - FP2_norm(&F[1]); - FP2_inv(&F[1], &F[1], NULL); // u^-(p+5)/24 - FP2_sqr(&F[0], &F[1]); // u^-(p+5)/12 - *** - FP2_mul(&F[1], &F[1], &F[0]); // u^-(p+5)/8 - *** -#endif - -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP2_sqr(&F[0], &F[1]); // u^(p-19)/12 - FP2_mul(&F[1], &F[1], &F[0]); // u^(p-19)/8 - FP2_mul_ip(&F[0]); // u^(p-7)/12 - *** - FP2_norm(&F[0]); - FP2_mul_ip(&F[1]); // u^(p-11)/8 - FP2_norm(&F[1]); - FP2_mul_ip(&F[1]); // u^(p-3)/8 - *** - FP2_norm(&F[1]); -#endif - -} - -/* Calculates q^n.P using Frobenius constant X */ -void ZZZ::ECP8_frob(ECP8 *P, FP2 F[3], int n) -{ - int i; - FP8 X, Y, Z; -// F=u^(p-19)/24 - - FP8_copy(&X, &(P->x)); - FP8_copy(&Y, &(P->y)); - FP8_copy(&Z, &(P->z)); - - for (i = 0; i < n; i++) - { - FP8_frob(&X, &F[2]); // X^p - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP8_qmul(&X, &X, &F[0]); // X^p.u^-(p+5)/12 - FP8_times_i2(&X); // X^p.u^{1/2}.u^-(p+5)/12 = X^p.u^-(p-1)/12 -#endif -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP8_qmul(&X, &X, &F[0]); // X^p.u^(p-7)/12 - FP8_times_i2(&X); // X^p.u^{1/2}.u^(p-7)/12 = X^p.u^(p-1)/12 -#endif - - FP8_frob(&Y, &F[2]); // Y^p - - -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP8_qmul(&Y, &Y, &F[1]); // Y^p.u^-(p+5)/8 - FP8_times_i2(&Y); - FP8_times_i(&Y); // Y^p.u^(3/4}.u^-(p+5)/8 = Y.p.u^(p-1)/8 - -#endif -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP8_qmul(&Y, &Y, &F[1]); // Y^p.u^(p-3)/8 - FP8_times_i(&Y); // Y^p.u^(1/4}.u^(p-3)/8 = Y^p.u^(p-1)/8 -#endif - FP8_frob(&Z, &F[2]); - } - - FP8_copy(&(P->x), &X); - FP8_copy(&(P->y), &Y); - FP8_copy(&(P->z), &Z); - -} - -/* Side channel attack secure */ -// Bos & Costello https://eprint.iacr.org/2013/458.pdf -// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf - -void ZZZ::ECP8_mul16(ECP8 *P, ECP8 Q[16], BIG u[16]) -{ - int i, j, k, nb, pb1, pb2, pb3, pb4, bt; - ECP8 T1[8], T2[8], T3[8], T4[8], W; - BIG mt, t[16]; - sign8 w1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w2[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s2[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w3[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s3[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w4[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s4[NLEN_XXX * BASEBITS_XXX + 1]; - - for (i = 0; i < 16; i++) - { - BIG_copy(t[i], u[i]); - } -// Precomputed tables - ECP8_copy(&T1[0], &Q[0]); // Q[0] - ECP8_copy(&T1[1], &T1[0]); - ECP8_add(&T1[1], &Q[1]); // Q[0]+Q[1] - ECP8_copy(&T1[2], &T1[0]); - ECP8_add(&T1[2], &Q[2]); // Q[0]+Q[2] - ECP8_copy(&T1[3], &T1[1]); - ECP8_add(&T1[3], &Q[2]); // Q[0]+Q[1]+Q[2] - ECP8_copy(&T1[4], &T1[0]); - ECP8_add(&T1[4], &Q[3]); // Q[0]+Q[3] - ECP8_copy(&T1[5], &T1[1]); - ECP8_add(&T1[5], &Q[3]); // Q[0]+Q[1]+Q[3] - ECP8_copy(&T1[6], &T1[2]); - ECP8_add(&T1[6], &Q[3]); // Q[0]+Q[2]+Q[3] - ECP8_copy(&T1[7], &T1[3]); - ECP8_add(&T1[7], &Q[3]); // Q[0]+Q[1]+Q[2]+Q[3] - - ECP8_copy(&T2[0], &Q[4]); // Q[0] - ECP8_copy(&T2[1], &T2[0]); - ECP8_add(&T2[1], &Q[5]); // Q[0]+Q[1] - ECP8_copy(&T2[2], &T2[0]); - ECP8_add(&T2[2], &Q[6]); // Q[0]+Q[2] - ECP8_copy(&T2[3], &T2[1]); - ECP8_add(&T2[3], &Q[6]); // Q[0]+Q[1]+Q[2] - ECP8_copy(&T2[4], &T2[0]); - ECP8_add(&T2[4], &Q[7]); // Q[0]+Q[3] - ECP8_copy(&T2[5], &T2[1]); - ECP8_add(&T2[5], &Q[7]); // Q[0]+Q[1]+Q[3] - ECP8_copy(&T2[6], &T2[2]); - ECP8_add(&T2[6], &Q[7]); // Q[0]+Q[2]+Q[3] - ECP8_copy(&T2[7], &T2[3]); - ECP8_add(&T2[7], &Q[7]); // Q[0]+Q[1]+Q[2]+Q[3] - - ECP8_copy(&T3[0], &Q[8]); // Q[0] - ECP8_copy(&T3[1], &T3[0]); - ECP8_add(&T3[1], &Q[9]); // Q[0]+Q[1] - ECP8_copy(&T3[2], &T3[0]); - ECP8_add(&T3[2], &Q[10]); // Q[0]+Q[2] - ECP8_copy(&T3[3], &T3[1]); - ECP8_add(&T3[3], &Q[10]); // Q[0]+Q[1]+Q[2] - ECP8_copy(&T3[4], &T3[0]); - ECP8_add(&T3[4], &Q[11]); // Q[0]+Q[3] - ECP8_copy(&T3[5], &T3[1]); - ECP8_add(&T3[5], &Q[11]); // Q[0]+Q[1]+Q[3] - ECP8_copy(&T3[6], &T3[2]); - ECP8_add(&T3[6], &Q[11]); // Q[0]+Q[2]+Q[3] - ECP8_copy(&T3[7], &T3[3]); - ECP8_add(&T3[7], &Q[11]); // Q[0]+Q[1]+Q[2]+Q[3] - - ECP8_copy(&T4[0], &Q[12]); // Q[0] - ECP8_copy(&T4[1], &T4[0]); - ECP8_add(&T4[1], &Q[13]); // Q[0]+Q[1] - ECP8_copy(&T4[2], &T4[0]); - ECP8_add(&T4[2], &Q[14]); // Q[0]+Q[2] - ECP8_copy(&T4[3], &T4[1]); - ECP8_add(&T4[3], &Q[14]); // Q[0]+Q[1]+Q[2] - ECP8_copy(&T4[4], &T4[0]); - ECP8_add(&T4[4], &Q[15]); // Q[0]+Q[3] - ECP8_copy(&T4[5], &T4[1]); - ECP8_add(&T4[5], &Q[15]); // Q[0]+Q[1]+Q[3] - ECP8_copy(&T4[6], &T4[2]); - ECP8_add(&T4[6], &Q[15]); // Q[0]+Q[2]+Q[3] - ECP8_copy(&T4[7], &T4[3]); - ECP8_add(&T4[7], &Q[15]); // Q[0]+Q[1]+Q[2]+Q[3] - -// Make them odd - pb1 = 1 - BIG_parity(t[0]); - BIG_inc(t[0], pb1); - BIG_norm(t[0]); - - pb2 = 1 - BIG_parity(t[4]); - BIG_inc(t[4], pb2); - BIG_norm(t[4]); - - pb3 = 1 - BIG_parity(t[8]); - BIG_inc(t[8], pb3); - BIG_norm(t[8]); - - pb4 = 1 - BIG_parity(t[12]); - BIG_inc(t[12], pb4); - BIG_norm(t[12]); - -// Number of bits - BIG_zero(mt); - for (i = 0; i < 16; i++) - { - BIG_or(mt, mt, t[i]); - } - nb = 1 + BIG_nbits(mt); - -// Sign pivot - s1[nb - 1] = 1; - s2[nb - 1] = 1; - s3[nb - 1] = 1; - s4[nb - 1] = 1; - for (i = 0; i < nb - 1; i++) - { - BIG_fshr(t[0], 1); - s1[i] = 2 * BIG_parity(t[0]) - 1; - BIG_fshr(t[4], 1); - s2[i] = 2 * BIG_parity(t[4]) - 1; - BIG_fshr(t[8], 1); - s3[i] = 2 * BIG_parity(t[8]) - 1; - BIG_fshr(t[12], 1); - s4[i] = 2 * BIG_parity(t[12]) - 1; - } - -// Recoded exponents - for (i = 0; i < nb; i++) - { - w1[i] = 0; - k = 1; - for (j = 1; j < 4; j++) - { - bt = s1[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w1[i] += bt * k; - k *= 2; - } - - w2[i] = 0; - k = 1; - for (j = 5; j < 8; j++) - { - bt = s2[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w2[i] += bt * k; - k *= 2; - } - - w3[i] = 0; - k = 1; - for (j = 9; j < 12; j++) - { - bt = s3[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w3[i] += bt * k; - k *= 2; - } - - w4[i] = 0; - k = 1; - for (j = 13; j < 16; j++) - { - bt = s4[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w4[i] += bt * k; - k *= 2; - } - } - -// Main loop - - ECP8_select(P, T1, 2 * w1[nb - 1] + 1); - ECP8_select(&W, T2, 2 * w2[nb - 1] + 1); - ECP8_add(P, &W); - ECP8_select(&W, T3, 2 * w3[nb - 1] + 1); - ECP8_add(P, &W); - ECP8_select(&W, T4, 2 * w4[nb - 1] + 1); - ECP8_add(P, &W); - - for (i = nb - 2; i >= 0; i--) - { - ECP8_dbl(P); - ECP8_select(&W, T1, 2 * w1[i] + s1[i]); - ECP8_add(P, &W); - ECP8_select(&W, T2, 2 * w2[i] + s2[i]); - ECP8_add(P, &W); - ECP8_select(&W, T3, 2 * w3[i] + s3[i]); - ECP8_add(P, &W); - ECP8_select(&W, T4, 2 * w4[i] + s4[i]); - ECP8_add(P, &W); - } - -// apply corrections - ECP8_copy(&W, P); - ECP8_sub(&W, &Q[0]); - ECP8_cmove(P, &W, pb1); - ECP8_copy(&W, P); - ECP8_sub(&W, &Q[4]); - ECP8_cmove(P, &W, pb2); - - ECP8_copy(&W, P); - ECP8_sub(&W, &Q[8]); - ECP8_cmove(P, &W, pb3); - ECP8_copy(&W, P); - ECP8_sub(&W, &Q[12]); - ECP8_cmove(P, &W, pb4); - - ECP8_affine(P); -} - -/* Hunt and Peck a BIG to G2 curve point */ -/* -void ZZZ::ECP8_hap2point(ECP8 *Q,BIG h) -{ - BIG one,hv; - FP2 X2; - FP4 X4; - FP8 X8; - BIG_one(one); - BIG_copy(hv,h); - - for (;;) - { - FP2_from_BIGs(&X2,one,hv); - FP4_from_FP2(&X4,&X2); - FP8_from_FP4(&X8,&X4); - if (ECP8_setx(Q,&X8,0)) break; - BIG_inc(hv,1); - BIG_norm(hv); - } -} -*/ -/* Constant time Map BIG to Point in G2 */ -void ZZZ::ECP8_map2point(ECP8 *Q,FP8 *H) -{ - int sgn,ne; - FP8 X1,X2,X3,W,Y,T,A,NY; - FP Z,s; - - FP8_one(&NY); - FP8_copy(&T,H); - sgn=FP8_sign(&T); - - FP_from_int(&Z,RIADZG2A_YYY); - FP8_from_FP(&A,&Z); - ECP8_rhs(&A,&A); // A=g(Z) - - FP8_sqrt(&W,&A,NULL); - FP_rcopy(&s,SQRTm3); - - FP_mul(&Z,&Z,&s); - - FP8_sqr(&T,&T); - FP8_mul(&Y,&A,&T); // tv1=u^2*g(Z) - FP8_add(&T,&NY,&Y); FP8_norm(&T); // tv2=1+tv1 - FP8_sub(&Y,&NY,&Y); FP8_norm(&Y); // tv1=1-tv1 - FP8_mul(&NY,&T,&Y); - - FP8_tmul(&NY,&NY,&Z); - - FP8_inv(&NY,&NY,NULL); // tv3=inv0(tv1*tv2*Z*sqrt(-3)) - FP8_tmul(&W,&W,&Z); // tv4=Z*sqrt(-3).sqrt(g(Z)) - if (FP8_sign(&W)==1) - { - FP8_neg(&W,&W); - FP8_norm(&W); - } - FP8_tmul(&W,&W,&Z); - FP8_mul(&W,&W,H); - FP8_mul(&W,&W,&Y); - FP8_mul(&W,&W,&NY); // tv5=u*tv1*tv3*tv4 - - FP_from_int(&s,RIADZG2A_YYY); - FP8_from_FP(&X1,&s); - - FP8_copy(&X3,&X1); - FP8_neg(&X1,&X1); FP8_norm(&X1); FP8_div2(&X1,&X1); // -Z/2 - FP8_copy(&X2,&X1); - FP8_sub(&X1,&X1,&W); FP8_norm(&X1); - FP8_add(&X2,&X2,&W); FP8_norm(&X2); - FP8_add(&A,&A,&A); - FP8_add(&A,&A,&A); - FP8_norm(&A); // 4*g(Z) - FP8_sqr(&T,&T); - FP8_mul(&T,&T,&NY); - FP8_sqr(&T,&T); // (tv2^2*tv3)^2 - FP8_mul(&A,&A,&T); // -4*g(Z)*(tv2^2*tv3)^2 - - FP8_add(&X3,&X3,&A); FP8_norm(&X3); - - ECP8_rhs(&W,&X2); - FP8_cmove(&X3,&X2,FP8_qr(&W,NULL)); - ECP8_rhs(&W,&X1); - FP8_cmove(&X3,&X1,FP8_qr(&W,NULL)); - ECP8_rhs(&W,&X3); - FP8_sqrt(&Y,&W,NULL); - - ne=FP8_sign(&Y)^sgn; - FP8_neg(&W,&Y); FP8_norm(&W); - FP8_cmove(&Y,&W,ne); - - ECP8_set(Q,&X3,&Y); -} - -/* Map octet to point on G2 */ -/* -void ZZZ::ECP8_mapit(ECP8 *Q, octet *W) -{ - BIG q, x; - DBIG dx; - BIG_rcopy(q, Modulus); - - BIG_dfromBytesLen(dx,W->val,W->len); - BIG_dmod(x,dx,q); - - ECP8_hap2point(Q,x); - ECP8_cfp(Q); -} -*/ -/* cofactor product */ -void ZZZ::ECP8_cfp(ECP8 *Q) -{ - FP2 X[3]; - ECP8 xQ, x2Q, x3Q, x4Q , x5Q, x6Q, x7Q, x8Q; - BIG x; - - ECP8_frob_constants(X); - - BIG_rcopy(x, CURVE_Bnx); - - // Efficient hash maps to G2 on BLS48 curves - Budroni, Pintore - // Q -> x8Q -x7Q -Q + F(x7Q-x6Q) + F(F(x6Q-x5Q)) +F(F(F(x5Q-x4Q))) +F(F(F(F(x4Q-x3Q)))) + F(F(F(F(F(x3Q-x2Q))))) + F(F(F(F(F(F(x2Q-xQ)))))) + F(F(F(F(F(F(F(xQ-Q))))))) +F(F(F(F(F(F(F(F(2Q)))))))) - - ECP8_copy(&xQ, Q); - ECP8_mul(&xQ, x); - ECP8_copy(&x2Q, &xQ); - ECP8_mul(&x2Q, x); - ECP8_copy(&x3Q, &x2Q); - ECP8_mul(&x3Q, x); - ECP8_copy(&x4Q, &x3Q); - - ECP8_mul(&x4Q, x); - ECP8_copy(&x5Q, &x4Q); - ECP8_mul(&x5Q, x); - ECP8_copy(&x6Q, &x5Q); - ECP8_mul(&x6Q, x); - ECP8_copy(&x7Q, &x6Q); - ECP8_mul(&x7Q, x); - ECP8_copy(&x8Q, &x7Q); - ECP8_mul(&x8Q, x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP8_neg(&xQ); - ECP8_neg(&x3Q); - ECP8_neg(&x5Q); - ECP8_neg(&x7Q); -#endif - - ECP8_sub(&x8Q, &x7Q); - ECP8_sub(&x8Q, Q); - - ECP8_sub(&x7Q, &x6Q); - ECP8_frob(&x7Q, X, 1); - - ECP8_sub(&x6Q, &x5Q); - ECP8_frob(&x6Q, X, 2); - - ECP8_sub(&x5Q, &x4Q); - ECP8_frob(&x5Q, X, 3); - - ECP8_sub(&x4Q, &x3Q); - ECP8_frob(&x4Q, X, 4); - - ECP8_sub(&x3Q, &x2Q); - ECP8_frob(&x3Q, X, 5); - - ECP8_sub(&x2Q, &xQ); - ECP8_frob(&x2Q, X, 6); - - ECP8_sub(&xQ, Q); - ECP8_frob(&xQ, X, 7); - - ECP8_dbl(Q); - ECP8_frob(Q, X, 8); - - - ECP8_add(Q, &x8Q); - ECP8_add(Q, &x7Q); - ECP8_add(Q, &x6Q); - ECP8_add(Q, &x5Q); - - ECP8_add(Q, &x4Q); - ECP8_add(Q, &x3Q); - ECP8_add(Q, &x2Q); - ECP8_add(Q, &xQ); - - ECP8_affine(Q); - -} - -// ECP$ Get Group Generator - -int ZZZ::ECP8_generator(ECP8 *G) -{ - BIG a, b; - FP2 Aa, Bb; - FP4 A, B; - FP8 X, Y; - - BIG_rcopy(a, CURVE_Pxaaa); - BIG_rcopy(b, CURVE_Pxaab); - FP2_from_BIGs(&Aa, a, b); - - BIG_rcopy(a, CURVE_Pxaba); - BIG_rcopy(b, CURVE_Pxabb); - FP2_from_BIGs(&Bb, a, b); - - FP4_from_FP2s(&A, &Aa, &Bb); - - BIG_rcopy(a, CURVE_Pxbaa); - BIG_rcopy(b, CURVE_Pxbab); - FP2_from_BIGs(&Aa, a, b); - - BIG_rcopy(a, CURVE_Pxbba); - BIG_rcopy(b, CURVE_Pxbbb); - FP2_from_BIGs(&Bb, a, b); - - FP4_from_FP2s(&B, &Aa, &Bb); - - FP8_from_FP4s(&X, &A, &B); - - BIG_rcopy(a, CURVE_Pyaaa); - BIG_rcopy(b, CURVE_Pyaab); - FP2_from_BIGs(&Aa, a, b); - - BIG_rcopy(a, CURVE_Pyaba); - BIG_rcopy(b, CURVE_Pyabb); - FP2_from_BIGs(&Bb, a, b); - - FP4_from_FP2s(&A, &Aa, &Bb); - - BIG_rcopy(a, CURVE_Pybaa); - BIG_rcopy(b, CURVE_Pybab); - FP2_from_BIGs(&Aa, a, b); - - BIG_rcopy(a, CURVE_Pybba); - BIG_rcopy(b, CURVE_Pybbb); - FP2_from_BIGs(&Bb, a, b); - - FP4_from_FP2s(&B, &Aa, &Bb); - - FP8_from_FP4s(&Y, &A, &B); - - return ECP8_set(G, &X, &Y); -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/eddsa.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/eddsa.cpp deleted file mode 100644 index 22b890b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/eddsa.cpp +++ /dev/null @@ -1,409 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// EDDSA API functions - -// see https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf - -#include -#include -#include - -#include "eddsa_ZZZ.h" - -#if CURVETYPE_ZZZ == EDWARDS - -using namespace XXX; -using namespace YYY; - -// Process a random BIG r by RFC7748 (for Montgomery & Edwards curves only) -static void RFC7748(BIG r) -{ - int c,lg=0; - BIG t; - c=ZZZ::CURVE_Cof_I; - while (c!=1) - { - lg++; - c/=2; - } - int n=8*MODBYTES_XXX-lg+1; - BIG_mod2m(r,n); - BIG_zero(t); BIG_inc(t,1); BIG_shl(t,n); - BIG_add(r,r,t); - c=BIG_lastbits(r,lg); - BIG_dec(r,c); -// printf("lg= %d n=%d\n",lg,n); -} - -// reverse first n bytes of buff - for little endian -static void reverse(int n,char *buff) { - for (int i = 0; i < n/2; i++) { - char ch = buff[i]; - buff[i] = buff[n - i - 1]; - buff[n - i - 1] = ch; - } -} - -// dom2 - context still needs to be appended -static void dom2(bool ph,int cl,octet *DOM) { - OCT_jstring(DOM,(char *)"SigZZZ no ZZZ collisions"); - if (ph) - OCT_jbyte(DOM,1,1); - else - OCT_jbyte(DOM,0,1); - OCT_jbyte(DOM,cl,1); // context length -} - -// dom4 - context still needs to be appended -static void dom4(bool ph,int cl,octet *DOM) { - OCT_jstring(DOM,(char *)"SigZZZ"); - if (ph) - OCT_jbyte(DOM,1,1); - else - OCT_jbyte(DOM,0,1); - OCT_jbyte(DOM,cl,1); // context length -} - -static void H(octet *S,char *digest) -{ -#if CURVE_SECURITY_ZZZ <= 128 // for ed25519? - hash512 sh512; - HASH512_init(&sh512); - for (int i=0;ilen;i++ ) - HASH512_process(&sh512,S->val[i]); - HASH512_hash(&sh512,digest); -#else // for ed448? - sha3 SHA3; - SHA3_init(&SHA3,SHAKE256); - for (int i=0;ilen;i++) - SHA3_process(&SHA3,S->val[i]); - SHA3_shake(&SHA3,digest,2*S->len); -#endif -} - -static int H2(bool ph,octet *context,octet *R,octet *Q,octet *M,DBIG dr) -{ - char h[128]; - int b=Q->len; - char dom[64]; - octet DOM={0,sizeof(dom),dom}; - int cl; - if (context==NULL) cl=0; - else cl=context->len&0xff; -#if CURVE_SECURITY_ZZZ <= 128 // for ed25519? - hash512 sh512; - HASH512_init(&sh512); - if (ph || cl>0) - { // if not prehash and no context, omit dom2() - dom2(ph,cl,&DOM); - for (int i=0;ival[i]); - } - for (int i=0;ival[i]); - for (int i=0;ival[i]); - for (int i=0;ilen;i++ ) - HASH512_process(&sh512,M->val[i]); - HASH512_hash(&sh512,h); -#else // for ed448? - dom4(ph,cl,&DOM); - sha3 SHA3; - SHA3_init(&SHA3,SHAKE256); - for (int i=0;ival[i]); - for (int i=0;ival[i]); - for (int i=0;ival[i]); - for (int i=0;ilen;i++) - SHA3_process(&SHA3,M->val[i]); - SHA3_shake(&SHA3,h,2*b); -#endif - reverse(2*b,h); - BIG_dfromBytesLen(dr,h,2*b); - return 2*b; -} - -static void getR(bool ph,int b,char *digest,octet *context,octet *M,DBIG dr) { - char h[128]; - char dom[64]; - octet DOM={0,sizeof(dom),dom}; - int cl; - if (context==NULL) cl=0; - else cl=context->len&0xff; - -#if CURVE_SECURITY_ZZZ <= 128 // for ed25519? - hash512 sh512; - HASH512_init(&sh512); - if (ph || cl>0) - { // if not prehash and no context, omit dom2() - dom2(ph,cl,&DOM); - for (int i=0;ival[i]); - } - for (int i=b;i<2*b;i++ ) - HASH512_process(&sh512,digest[i]); - for (int i=0;ilen;i++) - HASH512_process(&sh512,M->val[i]); - HASH512_hash(&sh512,h); - -#else // for ed448? - dom4(ph,cl,&DOM); - sha3 SHA3; - SHA3_init(&SHA3,SHAKE256); - for (int i=0;ival[i]); - for (int i=b;i<2*b;i++ ) - SHA3_process(&SHA3,digest[i]); - for (int i=0;ilen;i++) - SHA3_process(&SHA3,M->val[i]); - SHA3_shake(&SHA3,h,2*b); -#endif - - reverse(2*b,h); - BIG_dfromBytesLen(dr,h,2*b); -} -// encode integer (little endian) -static int encode_int(XXX::BIG x,char *ei) { - int b,index=0; - - if (8*MODBYTES_XXX==MBITS_YYY) index=1; // extra byte needed for compression - b=MODBYTES_XXX+index; - - ei[0]=0; - BIG_toBytes(&ei[index],x); - reverse(b,ei); - return b; -} - -// encode point -static void encode(ZZZ::ECP *P,octet *W) { - BIG x,y; - int b,index=0; - - if (8*MODBYTES_XXX==MBITS_YYY) index=1; // extra byte needed for compression - b=MODBYTES_XXX+index; - - ECP_get(x, y, P); - b=encode_int(y,W->val); - W->val[b-1]|=BIG_parity(x)<<7; - W->len=b; -} - -// decode integer (little endian) -static int decode_int(bool strip_sign,char *ei,XXX::BIG x) { - int b,index=0; - int sign=0; - char r[MODBYTES_XXX+1]; - - if (8*MODBYTES_XXX==MBITS_YYY) index=1; // extra byte needed for compression - b=MODBYTES_XXX+index; - - for (int i=0;ival,Y); // LSB of x - FP_nres(&x,Y); - FP_sqr(&x,&x); - FP_copy(&d,&x); FP_one(&one); - FP_sub(&x,&x,&one); - FP_norm(&x); - FP_rcopy(&t, ZZZ::CURVE_B); - - FP_mul(&d,&d,&t); -#if CURVE_A_ZZZ == 1 - FP_sub(&d,&d,&one); -#else - FP_add(&d,&d,&one); -#endif - FP_norm(&d); -// inverse square root trick for sqrt(x/d) - FP_sqr(&t,&x); - FP_mul(&x,&x,&t); - FP_mul(&x,&x,&d); - if (!FP_qr(&x,&hint)) - { - ECP_inf(P); - return; - } - FP_sqrt(&d,&x,&hint); - FP_inv(&x,&x,&hint); - FP_mul(&x,&x,&d); - FP_mul(&x,&x,&t); - - FP_reduce(&x); - FP_redc(X,&x); - if (BIG_parity(X)!=sign) - FP_neg(&x,&x); - FP_norm(&x); - FP_redc(X,&x); - ECP_set(P,X,Y); -} - -/* Calculate a public/private EC GF(p) key pair. Q=D.G mod EC(p), - * where D is the secret key and Q is the public key - * and G is fixed generator. - * RNG is a cryptographically strong RNG - * If RNG==NULL, D is generated externally - */ -int ZZZ::EDDSA_KEY_PAIR_GENERATE(csprng *RNG,octet* D,octet *Q) -{ - BIG r, x, y, s; - ECP G; - char digest[128]; - int res = EDDSA_OK; - int b,index=0; - - if (8*MODBYTES_XXX==MBITS_YYY) index=1; // extra byte needed for compression - b=MODBYTES_XXX+index; - - ECP_generator(&G); - - if (RNG != NULL) - OCT_rand(D, RNG, b); // create random private key - - H(D,digest); - -// reverse bytes for little endian - reverse(b,digest); - BIG_fromBytes(s,&digest[index]); - RFC7748(s); - ECP_mul(&G, s); - - encode(&G,Q); - return res; -} - -// Generate a signature using key pair (D,Q) on message M -// Set ph=true if message has already been pre-hashed -// if ph=false, then context should be NULL for ed25519. However RFC8032 mode ed25519ctx is supported by supplying a non-NULL or non-empty context -int ZZZ::EDDSA_SIGNATURE(bool ph,octet *D, octet *context,octet *M,octet *SIG) -{ - DBIG dr; - BIG s,sr,sd,q; - ECP R; - char digest[128]; - char pq[MODBYTES_XXX+1]; - octet Q={0,sizeof(pq),pq}; - H(D,digest); // hash of private key - int res = EDDSA_OK; - int b,index=0; - if (8*MODBYTES_XXX==MBITS_YYY) index=1; // extra byte needed for compression - b=MODBYTES_XXX+index; - - EDDSA_KEY_PAIR_GENERATE(NULL,D,&Q); - - BIG_rcopy(q, CURVE_Order); - ECP_generator(&R); - - if (D->len!=Q.len || D->len!=b) - res=EDDSA_INVALID_PUBLIC_KEY; - if (res==EDDSA_OK) - { - getR(ph,b,digest,context,M,dr); - BIG_dmod(sr,dr,q); - ECP_mul(&R,sr); - encode(&R,SIG); -// reverse bytes for little endian - reverse(b,digest); - BIG_fromBytes(s,&digest[index]); - RFC7748(s); - H2(ph,context,SIG,&Q,M,dr); - BIG_dmod(sd,dr,q); - BIG_modmul(s,s,sd,q); - BIG_modadd(s,s,sr,q); - encode_int(s,&SIG->val[b]); - SIG->len=2*b; - } - return res; -} - -// verify a signature using public key Q -// same context (if any) as used for signature -bool ZZZ::EDDSA_VERIFY(bool ph,octet *Q,octet *context,octet *M,octet *SIG) -{ - DBIG du; - BIG q,t,su; - ECP R,QD,G; - int res = EDDSA_OK; - bool dr,dq; - int lg=0; - int c,b,index=0; - if (8*MODBYTES_XXX==MBITS_YYY) index=1; // extra byte needed for compression - b=MODBYTES_XXX+index; - - c=ZZZ::CURVE_Cof_I; - while (c!=1) - { - lg++; - c/=2; - } - BIG_rcopy(q, CURVE_Order); - - decode(SIG,&R); - if (ECP_isinf(&R)) return false; - decode_int(false,&SIG->val[b],t); - if (BIG_comp(t,q)>=0) return false; - decode(Q,&QD); - if (ECP_isinf(&QD)) return false; - - H2(ph,context,SIG,Q,M,du); - BIG_dmod(su,du,q); - ECP_generator(&G); - for (int i=0;i>n */ -static void WWW::FF_sducopy(BIG x[], BIG y[], int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_copy(x[i], y[n + i]); -} - -/* set to zero */ -void WWW::FF_zero(BIG x[], int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_zero(x[i]); -} - -/* test equals 0 */ -int WWW::FF_iszilch(BIG x[], int n) -{ - int i; - for (i = 0; i < n; i++) - if (!BIG_iszilch(x[i])) return 0; - return 1; -} - -/* shift right by BIGBITS_XXX-bit words */ -static void WWW::FF_shrw(BIG a[], int n) -{ - int i; - for (i = 0; i < n; i++) - { - BIG_copy(a[i], a[i + n]); - BIG_zero(a[i + n]); - } -} - -/* shift left by BIGBITS_XXX-bit words */ -static void WWW::FF_shlw(BIG a[], int n) -{ - int i; - for (i = 0; i < n; i++) - { - BIG_copy(a[i + n], a[i]); - BIG_zero(a[i]); - } -} - -/* extract last bit */ -int WWW::FF_parity(BIG x[]) -{ - return BIG_parity(x[0]); -} - -/* extract last m bits */ -int WWW::FF_lastbits(BIG x[], int m) -{ - return BIG_lastbits(x[0], m); -} - -/* x=1 */ -void WWW::FF_one(BIG x[], int n) -{ - int i; - BIG_one(x[0]); - for (i = 1; i < n; i++) - BIG_zero(x[i]); -} - -/* x=m, where m is 32-bit int */ -void WWW::FF_init(BIG x[], sign32 m, int n) -{ - int i; - BIG_zero(x[0]); -#if CHUNK<64 - x[0][0] = (chunk)(m & BMASK_XXX); - x[0][1] = (chunk)(m >> BASEBITS_XXX); -#else - x[0][0] = (chunk)m; -#endif - for (i = 1; i < n; i++) - BIG_zero(x[i]); -} - -/* compare x and y - must be normalised */ -int WWW::FF_comp(BIG x[], BIG y[], int n) -{ - int i, j; - for (i = n - 1; i >= 0; i--) - { - j = BIG_comp(x[i], y[i]); - if (j != 0) return j; - } - return 0; -} - -/* recursive add */ -static void WWW::FF_radd(BIG z[], int zp, BIG x[], int xp, BIG y[], int yp, int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_add(z[zp + i], x[xp + i], y[yp + i]); -} - -/* recursive inc */ -static void WWW::FF_rinc(BIG z[], int zp, BIG y[], int yp, int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_add(z[zp + i], z[zp + i], y[yp + i]); -} - -/* recursive dec */ -static void WWW::FF_rdec(BIG z[], int zp, BIG y[], int yp, int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_sub(z[zp + i], z[zp + i], y[yp + i]); -} - -/* simple add */ -void WWW::FF_add(BIG z[], BIG x[], BIG y[], int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_add(z[i], x[i], y[i]); -} - -/* simple sub */ -void WWW::FF_sub(BIG z[], BIG x[], BIG y[], int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_sub(z[i], x[i], y[i]); -} - -/* increment/decrement by a small integer */ -void WWW::FF_inc(BIG x[], int m, int n) -{ - BIG_inc(x[0], m); - FF_norm(x, n); -} - -void WWW::FF_dec(BIG x[], int m, int n) -{ - BIG_dec(x[0], m); - FF_norm(x, n); -} - -/* normalise - but hold any overflow in top part unless n<0 */ -static void WWW::FF_rnorm(BIG z[], int zp, int n) -{ - int i, trunc = 0; - chunk carry; - if (n < 0) - { - /* -v n signals to do truncation */ - n = -n; - trunc = 1; - } - for (i = 0; i < n - 1; i++) - { - carry = BIG_norm(z[zp + i]); - - z[zp + i][NLEN_XXX - 1] ^= carry << P_TBITS_WWW; /* remove it */ - z[zp + i + 1][0] += carry; - } - carry = BIG_norm(z[zp + n - 1]); - if (trunc) z[zp + n - 1][NLEN_XXX - 1] ^= carry << P_TBITS_WWW; -} - -void WWW::FF_norm(BIG z[], int n) -{ - FF_rnorm(z, 0, n); -} - -/* shift left by one bit */ -void WWW::FF_shl(BIG x[], int n) -{ - int i; - int carry, delay_carry = 0; - for (i = 0; i < n - 1; i++) - { - carry = BIG_fshl(x[i], 1); - x[i][0] |= delay_carry; - x[i][NLEN_XXX - 1] ^= (chunk)carry << P_TBITS_WWW; - delay_carry = carry; - } - BIG_fshl(x[n - 1], 1); - x[n - 1][0] |= delay_carry; -} - -/* shift right by one bit */ -void WWW::FF_shr(BIG x[], int n) -{ - int i; - int carry; - for (i = n - 1; i > 0; i--) - { - carry = BIG_fshr(x[i], 1); - x[i - 1][NLEN_XXX - 1] |= (chunk)carry << P_TBITS_WWW; - } - BIG_fshr(x[0], 1); -} - -void WWW::FF_output(BIG x[], int n) -{ - int i; - FF_norm(x, n); - for (i = n - 1; i >= 0; i--) - { - BIG_output(x[i]); - printf(" "); - } -} - -void WWW::FF_rawoutput(BIG x[], int n) -{ - int i; - for (i = n - 1; i >= 0; i--) - { - BIG_rawoutput(x[i]); - printf(" "); - } -} - -/* Convert FFs to/from octet strings */ -void WWW::FF_toOctet(octet *w, BIG x[], int n) -{ - int i; - w->len = n * MODBYTES_XXX; - for (i = 0; i < n; i++) - { - BIG_toBytes(&(w->val[(n - i - 1)*MODBYTES_XXX]), x[i]); - } -} - -void WWW::FF_fromOctet(BIG x[], octet *w, int n) -{ - int i; - for (i = 0; i < n; i++) - { - BIG_fromBytes(x[i], &(w->val[(n - i - 1)*MODBYTES_XXX])); - } -} - -/* in-place swapping using xor - side channel resistant */ -static void WWW::FF_cswap(BIG a[], BIG b[], int d, int n) -{ - int i; - for (i = 0; i < n; i++) - BIG_cswap(a[i], b[i], d); - return; -} - -/* z=x*y, t is workspace */ -static void WWW::FF_karmul(BIG z[], int zp, BIG x[], int xp, BIG y[], int yp, BIG t[], int tp, int n) -{ - int nd2; - if (n == 1) - { - BIG_norm(x[xp]); - BIG_norm(y[yp]); - BIG_mul(t[tp], x[xp], y[yp]); - BIG_split(z[zp + 1], z[zp], t[tp], BIGBITS_XXX); - return; - } - - nd2 = n / 2; - FF_radd(z, zp, x, xp, x, xp + nd2, nd2); - FF_rnorm(z, zp, nd2); /* needs this if recursion level too deep */ - - FF_radd(z, zp + nd2, y, yp, y, yp + nd2, nd2); - FF_rnorm(z, zp + nd2, nd2); - FF_karmul(t, tp, z, zp, z, zp + nd2, t, tp + n, nd2); - FF_karmul(z, zp, x, xp, y, yp, t, tp + n, nd2); - FF_karmul(z, zp + n, x, xp + nd2, y, yp + nd2, t, tp + n, nd2); - FF_rdec(t, tp, z, zp, n); - FF_rdec(t, tp, z, zp + n, n); - FF_rinc(z, zp + nd2, t, tp, n); - FF_rnorm(z, zp, 2 * n); -} - -static void WWW::FF_karsqr(BIG z[], int zp, BIG x[], int xp, BIG t[], int tp, int n) -{ - int nd2; - if (n == 1) - { - BIG_norm(x[xp]); - BIG_sqr(t[tp], x[xp]); - BIG_split(z[zp + 1], z[zp], t[tp], BIGBITS_XXX); - return; - } - nd2 = n / 2; - FF_karsqr(z, zp, x, xp, t, tp + n, nd2); - FF_karsqr(z, zp + n, x, xp + nd2, t, tp + n, nd2); - FF_karmul(t, tp, x, xp, x, xp + nd2, t, tp + n, nd2); - FF_rinc(z, zp + nd2, t, tp, n); - FF_rinc(z, zp + nd2, t, tp, n); - - FF_rnorm(z, zp + nd2, n); /* was FF_rnorm(z,zp,2*n) */ -} - -static void WWW::FF_karmul_lower(BIG z[], int zp, BIG x[], int xp, BIG y[], int yp, BIG t[], int tp, int n) -{ - /* Calculates Least Significant bottom half of x*y */ - int nd2; - if (n == 1) - { - /* only calculate bottom half of product */ - BIG_norm(x[xp]); - BIG_norm(y[yp]); - BIG_smul(z[zp], x[xp], y[yp]); - return; - } - nd2 = n / 2; - FF_karmul(z, zp, x, xp, y, yp, t, tp + n, nd2); - FF_karmul_lower(t, tp, x, xp + nd2, y, yp, t, tp + n, nd2); - FF_rinc(z, zp + nd2, t, tp, nd2); - FF_karmul_lower(t, tp, x, xp, y, yp + nd2, t, tp + n, nd2); - FF_rinc(z, zp + nd2, t, tp, nd2); - FF_rnorm(z, zp + nd2, -nd2); /* truncate it */ -} - -static void WWW::FF_karmul_upper(BIG z[], BIG x[], BIG y[], BIG t[], int n) -{ - /* Calculates Most Significant upper half of x*y, given lower part */ - int nd2; - - nd2 = n / 2; - FF_radd(z, n, x, 0, x, nd2, nd2); - FF_radd(z, n + nd2, y, 0, y, nd2, nd2); - FF_rnorm(z, n, nd2); - FF_rnorm(z, n + nd2, nd2); - - FF_karmul(t, 0, z, n + nd2, z, n, t, n, nd2); /* t = (a0+a1)(b0+b1) */ - FF_karmul(z, n, x, nd2, y, nd2, t, n, nd2); /* z[n]= a1*b1 */ - /* z[0-nd2]=l(a0b0) z[nd2-n]= h(a0b0)+l(t)-l(a0b0)-l(a1b1) */ - FF_rdec(t, 0, z, n, n); /* t=t-a1b1 */ - FF_rinc(z, nd2, z, 0, nd2); /* z[nd2-n]+=l(a0b0) = h(a0b0)+l(t)-l(a1b1) */ - FF_rdec(z, nd2, t, 0, nd2); /* z[nd2-n]=h(a0b0)+l(t)-l(a1b1)-l(t-a1b1)=h(a0b0) */ - FF_rnorm(z, 0, -n); /* a0b0 now in z - truncate it */ - FF_rdec(t, 0, z, 0, n); /* (a0+a1)(b0+b1) - a0b0 */ - FF_rinc(z, nd2, t, 0, n); - - FF_rnorm(z, nd2, n); -} - -/* z=x*y */ -void WWW::FF_mul(BIG z[], BIG x[], BIG y[], int n) -{ -#ifndef USE_VLAS - BIG t[2 * FFLEN_WWW]; -#else - BIG t[2 * n]; -#endif - FF_karmul(z, 0, x, 0, y, 0, t, 0, n); -} - -/* return low part of product */ -static void WWW::FF_lmul(BIG z[], BIG x[], BIG y[], int n) -{ -#ifndef USE_VLAS - BIG t[2 * FFLEN_WWW]; -#else - BIG t[2 * n]; -#endif - FF_karmul_lower(z, 0, x, 0, y, 0, t, 0, n); -} - -/* Set b=b mod c */ -void WWW::FF_mod(BIG b[], BIG c[], int n) -{ - int k = 0; - - FF_norm(b, n); - if (FF_comp(b, c, n) < 0) - return; - do - { - FF_shl(c, n); - k++; - } - while (FF_comp(b, c, n) >= 0); - - while (k > 0) - { - FF_shr(c, n); - if (FF_comp(b, c, n) >= 0) - { - FF_sub(b, b, c, n); - FF_norm(b, n); - } - k--; - } -} - -/* z=x^2 */ -void WWW::FF_sqr(BIG z[], BIG x[], int n) -{ -#ifndef USE_VLAS - BIG t[2 * FFLEN_WWW]; -#else - BIG t[2 * n]; -#endif - FF_karsqr(z, 0, x, 0, t, 0, n); -} - -/* r=t mod modulus, N is modulus, ND is Montgomery Constant */ -static void WWW::FF_reduce(BIG r[], BIG T[], BIG N[], BIG ND[], int n) -{ - /* fast karatsuba Montgomery reduction */ -#ifndef USE_VLAS - BIG t[2 * FFLEN_WWW]; - BIG m[FFLEN_WWW]; -#else - BIG t[2 * n]; - BIG m[n]; -#endif - WWW::FF_sducopy(r, T, n); /* keep top half of T */ - FF_karmul_lower(m, 0, T, 0, ND, 0, t, 0, n); /* m=T.(1/N) mod R */ - - FF_karmul_upper(T, N, m, t, n); /* T=mN */ - FF_sducopy(m, T, n); - - FF_add(r, r, N, n); - FF_sub(r, r, m, n); - FF_norm(r, n); -} - - -/* Set r=a mod b */ -/* a is of length - 2*n */ -/* r,b is of length - n */ -void WWW::FF_dmod(BIG r[], BIG a[], BIG b[], int n) -{ - int k; -#ifndef USE_VLAS - BIG m[2 * FFLEN_WWW]; - BIG x[2 * FFLEN_WWW]; -#else - BIG m[2 * n]; - BIG x[2 * n]; -#endif - FF_copy(x, a, 2 * n); - FF_norm(x, 2 * n); - FF_dsucopy(m, b, n); - k = BIGBITS_XXX * n; - - while (FF_comp(x, m, 2 * n) >= 0) - { - FF_sub(x, x, m, 2 * n); - FF_norm(x, 2 * n); - } - - while (k > 0) - { - FF_shr(m, 2 * n); - - if (FF_comp(x, m, 2 * n) >= 0) - { - FF_sub(x, x, m, 2 * n); - FF_norm(x, 2 * n); - } - - k--; - } - FF_copy(r, x, n); - FF_mod(r, b, n); -} - -/* Set r=1/a mod p. Binary method - a

= 0) - { - - FF_sub(u, u, v, n); - FF_norm(u, n); - if (FF_comp(x1, x2, n) >= 0) FF_sub(x1, x1, x2, n); - else - { - FF_sub(t, p, x2, n); - FF_add(x1, x1, t, n); - } - FF_norm(x1, n); - } - else - { - FF_sub(v, v, u, n); - FF_norm(v, n); - if (FF_comp(x2, x1, n) >= 0) FF_sub(x2, x2, x1, n); - else - { - FF_sub(t, p, x1, n); - FF_add(x2, x2, t, n); - } - FF_norm(x2, n); - } - } - if (FF_comp(u, one, n) == 0) - FF_copy(r, x1, n); - else - FF_copy(r, x2, n); -} - -/* nesidue mod m */ -static void WWW::FF_nres(BIG a[], BIG m[], int n) -{ -#ifndef USE_VLAS - BIG d[2 * FFLEN_WWW]; -#else - BIG d[2 * n]; -#endif - if (n == 1) - { - BIG_dscopy(d[0], a[0]); - BIG_dshl(d[0], NLEN_XXX * BASEBITS_XXX); - BIG_dmod(a[0], d[0], m[0]); - } - else - { - FF_dsucopy(d, a, n); - FF_dmod(a, d, m, n); - } -} - -static void WWW::FF_redc(BIG a[], BIG m[], BIG ND[], int n) -{ -#ifndef USE_VLAS - BIG d[2 * FFLEN_WWW]; -#else - BIG d[2 * n]; -#endif - if (n == 1) - { - BIG_dzero(d[0]); - BIG_dscopy(d[0], a[0]); - BIG_monty(a[0], m[0], ((chunk)1 << BASEBITS_XXX) - ND[0][0], d[0]); - } - else - { - FF_mod(a, m, n); - FF_dscopy(d, a, n); - FF_reduce(a, d, m, ND, n); - FF_mod(a, m, n); - } -} - -/* U=1/a mod 2^m - Arazi & Qi */ -static void WWW::FF_invmod2m(BIG U[], BIG a[], int n) -{ - int i; -#ifndef USE_VLAS - BIG t1[2*FFLEN_WWW], b[FFLEN_WWW], c[FFLEN_WWW]; -#else - BIG t1[2 * n], b[n], c[n]; -#endif - - FF_zero(U, n); - FF_zero(b, n); - FF_zero(c, n); - FF_zero(t1, 2 * n); - - BIG_copy(U[0], a[0]); - BIG_invmod2m(U[0]); - for (i = 1; i < n; i <<= 1) - { - FF_copy(b, a, i); - FF_mul(t1, U, b, i); - FF_shrw(t1, i); // top half to bottom half, top half=0 - - FF_copy(c, a, 2 * i); - FF_shrw(c, i); // top half of c - FF_lmul(b, U, c, i); // should set top half of b=0 - FF_add(t1, t1, b, i); - FF_norm(t1, 2 * i); - FF_lmul(b, t1, U, i); - FF_copy(t1, b, i); - FF_one(b, i); - FF_shlw(b, i); - FF_sub(t1, b, t1, 2 * i); - FF_norm(t1, 2 * i); - FF_shlw(t1, i); - FF_add(U, U, t1, 2 * i); - } - - FF_norm(U, n); -} - -void WWW::FF_random(BIG x[], csprng *rng, int n) -{ - int i; - for (i = 0; i < n; i++) - { - BIG_random(x[i], rng); - } - /* make sure top bit is 1 */ - while (BIG_nbits(x[n - 1]) < MODBYTES_XXX * 8) BIG_random(x[n - 1], rng); -} - -/* generate random x mod p */ -void WWW::FF_randomnum(BIG x[], BIG p[], csprng *rng, int n) -{ - int i; -#ifndef USE_VLAS - BIG d[2 * FFLEN_WWW]; -#else - BIG d[2 * n]; -#endif - for (i = 0; i < 2 * n; i++) - { - BIG_random(d[i], rng); - } - FF_dmod(x, d, p, n); -} - -static void WWW::FF_modmul(BIG z[], BIG x[], BIG y[], BIG p[], BIG ND[], int n) -{ -#ifndef USE_VLAS - BIG d[2 * FFLEN_WWW]; -#else - BIG d[2 * n]; -#endif - chunk ex = P_EXCESS_WWW(x[n - 1]); - chunk ey = P_EXCESS_WWW(y[n - 1]); -#ifdef dchunk - if ((dchunk)(ex + 1) * (ey + 1) > (dchunk)P_FEXCESS_WWW) -#else - if ((ex + 1) > P_FEXCESS_WWW / (ey + 1)) -#endif - { -#ifdef DEBUG_REDUCE - printf("Product too large - reducing it %d %d\n", ex, ey); -#endif - FF_mod(x, p, n); - } - - if (n == 1) - { - BIG_mul(d[0], x[0], y[0]); - BIG_monty(z[0], p[0], ((chunk)1 << BASEBITS_XXX) - ND[0][0], d[0]); - } - else - { - FF_mul(d, x, y, n); - FF_reduce(z, d, p, ND, n); - } -} - -static void WWW::FF_modsqr(BIG z[], BIG x[], BIG p[], BIG ND[], int n) -{ -#ifndef USE_VLAS - BIG d[2 * FFLEN_WWW]; -#else - BIG d[2 * n]; -#endif - chunk ex = P_EXCESS_WWW(x[n - 1]); -#ifdef dchunk - if ((dchunk)(ex + 1) * (ex + 1) > (dchunk)P_FEXCESS_WWW) -#else - if ((ex + 1) > P_FEXCESS_WWW / (ex + 1)) -#endif - { -#ifdef DEBUG_REDUCE - printf("Product too large - reducing it %d\n", ex); -#endif - FF_mod(x, p, n); - } - if (n == 1) - { - BIG_sqr(d[0], x[0]); - BIG_monty(z[0], p[0], ((chunk)1 << BASEBITS_XXX) - ND[0][0], d[0]); - } - else - { - FF_sqr(d, x, n); - FF_reduce(z, d, p, ND, n); - } -} - -/* r=x^e mod p using side-channel resistant Montgomery Ladder, for large e */ -void WWW::FF_skpow(BIG r[], BIG x[], BIG e[], BIG p[], int n) -{ - int i, b; -#ifndef USE_VLAS - BIG R0[FFLEN_WWW], R1[FFLEN_WWW], ND[FFLEN_WWW]; -#else - BIG R0[n], R1[n], ND[n]; -#endif - FF_invmod2m(ND, p, n); - - FF_one(R0, n); - FF_copy(R1, x, n); - FF_nres(R0, p, n); - FF_nres(R1, p, n); - - for (i = 8 * MODBYTES_XXX * n - 1; i >= 0; i--) - { - b = BIG_bit(e[i / BIGBITS_XXX], i % BIGBITS_XXX); - FF_modmul(r, R0, R1, p, ND, n); - - FF_cswap(R0, R1, b, n); - FF_modsqr(R0, R0, p, ND, n); - - FF_copy(R1, r, n); - FF_cswap(R0, R1, b, n); - } - FF_copy(r, R0, n); - FF_redc(r, p, ND, n); -} - -/* r=x^e mod p using side-channel resistant Montgomery Ladder, for short e */ -void WWW::FF_skspow(BIG r[], BIG x[], BIG e, BIG p[], int n) -{ - int i, b; -#ifndef USE_VLAS - BIG R0[FFLEN_WWW], R1[FFLEN_WWW], ND[FFLEN_WWW]; -#else - BIG R0[n], R1[n], ND[n]; -#endif - FF_invmod2m(ND, p, n); - FF_one(R0, n); - FF_copy(R1, x, n); - FF_nres(R0, p, n); - FF_nres(R1, p, n); - for (i = 8 * MODBYTES_XXX - 1; i >= 0; i--) - { - b = BIG_bit(e, i); - FF_modmul(r, R0, R1, p, ND, n); - FF_cswap(R0, R1, b, n); - FF_modsqr(R0, R0, p, ND, n); - FF_copy(R1, r, n); - FF_cswap(R0, R1, b, n); - } - FF_copy(r, R0, n); - FF_redc(r, p, ND, n); -} - -/* raise to an integer power - right-to-left method */ -void WWW::FF_power(BIG r[], BIG x[], int e, BIG p[], int n) -{ - int f = 1; -#ifndef USE_VLAS - BIG w[FFLEN_WWW], ND[FFLEN_WWW]; -#else - BIG w[n], ND[n]; -#endif - FF_invmod2m(ND, p, n); - - FF_copy(w, x, n); - FF_nres(w, p, n); - - if (e == 2) - { - FF_modsqr(r, w, p, ND, n); - } - else for (;;) - { - if (e % 2 == 1) - { - if (f) FF_copy(r, w, n); - else FF_modmul(r, r, w, p, ND, n); - f = 0; - } - e >>= 1; - if (e == 0) break; - FF_modsqr(w, w, p, ND, n); - } - - FF_redc(r, p, ND, n); -} - -/* r=x^e mod p, faster but not side channel resistant */ -void WWW::FF_pow(BIG r[], BIG x[], BIG e[], BIG p[], int n) -{ - int i, b; -#ifndef USE_VLAS - BIG w[FFLEN_WWW], ND[FFLEN_WWW]; -#else - BIG w[n], ND[n]; -#endif - FF_invmod2m(ND, p, n); - - FF_copy(w, x, n); - FF_one(r, n); - FF_nres(r, p, n); - FF_nres(w, p, n); - - for (i = 8 * MODBYTES_XXX * n - 1; i >= 0; i--) - { - FF_modsqr(r, r, p, ND, n); - b = BIG_bit(e[i / BIGBITS_XXX], i % BIGBITS_XXX); - if (b == 1) FF_modmul(r, r, w, p, ND, n); - } - FF_redc(r, p, ND, n); -} - -/* double exponentiation r=x^e.y^f mod p */ -void WWW::FF_pow2(BIG r[], BIG x[], BIG e, BIG y[], BIG f, BIG p[], int n) -{ - int i, eb, fb; -#ifndef USE_VLAS - BIG xn[FFLEN_WWW], yn[FFLEN_WWW], xy[FFLEN_WWW], ND[FFLEN_WWW]; -#else - BIG xn[n], yn[n], xy[n], ND[n]; -#endif - - FF_invmod2m(ND, p, n); - - FF_copy(xn, x, n); - FF_copy(yn, y, n); - FF_nres(xn, p, n); - FF_nres(yn, p, n); - FF_modmul(xy, xn, yn, p, ND, n); - FF_one(r, n); - FF_nres(r, p, n); - - for (i = 8 * MODBYTES_XXX - 1; i >= 0; i--) - { - eb = BIG_bit(e, i); - fb = BIG_bit(f, i); - FF_modsqr(r, r, p, ND, n); - if (eb == 1) - { - if (fb == 1) FF_modmul(r, r, xy, p, ND, n); - else FF_modmul(r, r, xn, p, ND, n); - } - else - { - if (fb == 1) FF_modmul(r, r, yn, p, ND, n); - } - } - FF_redc(r, p, ND, n); -} - -static sign32 igcd(sign32 x, sign32 y) -{ - /* integer GCD, returns GCD of x and y */ - sign32 r; - if (y == 0) return x; - while ((r = x % y) != 0) - x = y, y = r; - return y; -} - -/* quick and dirty check for common factor with s */ -int WWW::FF_cfactor(BIG w[], sign32 s, int n) -{ - int r; - sign32 g; -#ifndef USE_VLAS - BIG x[FFLEN_WWW], y[FFLEN_WWW]; -#else - BIG x[n], y[n]; -#endif - FF_init(y, s, n); - FF_copy(x, w, n); - FF_norm(x, n); - - do - { - FF_sub(x, x, y, n); - FF_norm(x, n); - while (!FF_iszilch(x, n) && FF_parity(x) == 0) FF_shr(x, n); - } - while (FF_comp(x, y, n) > 0); -#if CHUNK<32 - g = x[0][0] + ((sign32)(x[0][1]) << BASEBITS_XXX); -#else - g = (sign32)x[0][0]; -#endif - r = igcd(s, g); - if (r > 1) return 1; - return 0; -} - -/* Miller-Rabin test for primality. Slow. */ -int WWW::FF_prime(BIG p[], csprng *rng, int n) -{ - int i, j, loop, s = 0; -#ifndef USE_VLAS - BIG d[FFLEN_WWW], x[FFLEN_WWW], unity[FFLEN_WWW], nm1[FFLEN_WWW]; -#else - BIG d[n], x[n], unity[n], nm1[n]; -#endif - sign32 sf = 4849845; /* 3*5*.. *19 */ - - FF_norm(p, n); - - if (FF_cfactor(p, sf, n)) return 0; - - FF_one(unity, n); - FF_sub(nm1, p, unity, n); - FF_norm(nm1, n); - FF_copy(d, nm1, n); - while (FF_parity(d) == 0) - { - FF_shr(d, n); - s++; - } - if (s == 0) return 0; - - for (i = 0; i < 10; i++) - { - FF_randomnum(x, p, rng, n); - FF_pow(x, x, d, p, n); - if (FF_comp(x, unity, n) == 0 || FF_comp(x, nm1, n) == 0) continue; - loop = 0; - for (j = 1; j < s; j++) - { - FF_power(x, x, 2, p, n); - if (FF_comp(x, unity, n) == 0) return 0; - if (FF_comp(x, nm1, n) == 0 ) - { - loop = 1; - break; - } - } - if (loop) continue; - return 0; - } - - return 1; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp.cpp deleted file mode 100644 index a646c57..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp.cpp +++ /dev/null @@ -1,940 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE mod p functions */ -/* Small Finite Field arithmetic */ -/* SU=m, SU is Stack Usage (NOT_SPECIAL Modulus) */ - -#include "fp_YYY.h" - -using namespace XXX; - -/* Fast Modular Reduction Methods */ - -/* r=d mod m */ -/* d MUST be normalised */ -/* Products must be less than pR in all cases !!! */ -/* So when multiplying two numbers, their product *must* be less than MODBITS_YYY+BASEBITS_XXX*NLEN_XXX */ -/* Results *may* be one bit bigger than MODBITS_YYY */ - -#if MODTYPE_YYY == PSEUDO_MERSENNE -/* r=d mod m */ - -/* Converts from BIG integer to residue form mod Modulus */ -void YYY::FP_nres(FP *y, BIG x) -{ - BIG mdls; - BIG_rcopy(mdls, Modulus); - BIG_copy(y->g, x); - BIG_mod(y->g,mdls); - y->XES = 1; -} - -/* Converts from residue form back to BIG integer form */ -void YYY::FP_redc(BIG x, FP *y) -{ - BIG_copy(x, y->g); -} - -/* reduce a DBIG to a BIG exploiting the special form of the modulus */ -void YYY::FP_mod(BIG r, DBIG d) -{ - BIG t, b; - chunk v, tw; - BIG_split(t, b, d, MODBITS_YYY); - - /* Note that all of the excess gets pushed into t. So if squaring a value with a 4-bit excess, this results in - t getting all 8 bits of the excess product! So products must be less than pR which is Montgomery compatible */ - - if (MConst < NEXCESS_XXX) - { - BIG_imul(t, t, MConst); - BIG_norm(t); - BIG_add(r, t, b); - BIG_norm(r); - tw = r[NLEN_XXX - 1]; - r[NLEN_XXX - 1] &= TMASK_YYY; - r[0] += MConst * ((tw >> TBITS_YYY)); - } - else - { - v = BIG_pmul(t, t, MConst); - BIG_add(r, t, b); - BIG_norm(r); - tw = r[NLEN_XXX - 1]; - r[NLEN_XXX - 1] &= TMASK_YYY; -#if CHUNK == 16 - r[1] += muladd(MConst, ((tw >> TBITS_YYY) + (v << (BASEBITS_XXX - TBITS_YYY))), 0, &r[0]); -#else - r[0] += MConst * ((tw >> TBITS_YYY) + (v << (BASEBITS_XXX - TBITS_YYY))); -#endif - } - BIG_norm(r); -} -#endif - -/* This only applies to Curve C448, so specialised (for now) */ -#if MODTYPE_YYY == GENERALISED_MERSENNE - -void YYY::FP_nres(FP *y, BIG x) -{ - BIG mdls; - BIG_rcopy(mdls, Modulus); - BIG_copy(y->g, x); - BIG_mod(y->g,mdls); - y->XES = 1; -} - -/* Converts from residue form back to BIG integer form */ -void YYY::FP_redc(BIG x, FP *y) -{ - BIG_copy(x, y->g); -} - -/* reduce a DBIG to a BIG exploiting the special form of a modulus 2^m - 2^n -c */ -void YYY::FP_mod(BIG r, DBIG d) -{ - - BIG t, b; - chunk carry; - BIG_split(t, b, d, MBITS_YYY); - - BIG_add(r, t, b); - - BIG_dscopy(d, t); - BIG_dshl(d, MBITS_YYY / 2); - - BIG_split(t, b, d, MBITS_YYY); - - BIG_add(r, r, t); - BIG_add(r, r, b); - BIG_norm(r); - BIG_shl(t, MBITS_YYY / 2); - - BIG_add(r, r, t); - - carry = r[NLEN_XXX - 1] >> TBITS_YYY; - - r[NLEN_XXX - 1] &= TMASK_YYY; - r[0] += carry; - - r[224 / BASEBITS_XXX] += carry << (224 % BASEBITS_XXX); /* need to check that this falls mid-word */ - BIG_norm(r); - -/* - - BIG t, b, t2, b2; - int BTset = MBITS_YYY / 2; - chunk carry; - BIG_split(t, b, d, MBITS_YYY); - - BIG_dscopy(d, t); - BIG_dshl(d, BTset); - - BIG_split(t2, b2, d, MBITS_YYY); - - BIG_add(b, b, b2); // 2 - BIG_add(t, t, t2); // 2 - - BIG_shl(t2, BTset); - - BIG_add(b, b, t2); // 3 - BIG_norm(t); - -// carry=0; -// Now multiply t by MConst..(?) and extract carry -// if (MConst!=1) -// carry=BIG_pmul(t,t,MConst); - - BIG_add(r, t, b); - BIG_norm(r); - - carry = r[NLEN_XXX - 1] >> TBITS_YYY; // + (carry<<(BASEBITS_XXX-TBITS_YYY)); - r[NLEN_XXX - 1] &= TMASK_YYY; - - r[BTset / BASEBITS_XXX] += carry << (BTset % BASEBITS_XXX); // need to check that this falls mid-word -// if (MConst!=1) carry*=MConst; - r[0] += carry; - - BIG_norm(r); -*/ -} - -#endif - -#if MODTYPE_YYY == MONTGOMERY_FRIENDLY - -/* convert to Montgomery n-residue form */ -void YYY::FP_nres(FP *y, BIG x) -{ - DBIG d; - BIG r; - BIG_rcopy(r, R2modp); - BIG_mul(d, x, r); - FP_mod(y->g, d); - y->XES = 2; -} - -/* convert back to regular form */ -void YYY::FP_redc(BIG x, FP *y) -{ - DBIG d; - BIG_dzero(d); - BIG_dscopy(d, y->g); - FP_mod(x, d); -} - -/* fast modular reduction from DBIG to BIG exploiting special form of the modulus */ -void YYY::FP_mod(BIG a, DBIG d) -{ - int i; - - for (i = 0; i < NLEN_XXX; i++) - d[NLEN_XXX + i] += muladd(d[i], MConst - 1, d[i], &d[NLEN_XXX + i - 1]); - - BIG_sducopy(a, d); - BIG_norm(a); -} - -#endif - -#if MODTYPE_YYY == NOT_SPECIAL - -/* convert to Montgomery n-residue form */ -void YYY::FP_nres(FP *y, BIG x) -{ - DBIG d; - BIG r; - BIG_rcopy(r, R2modp); - BIG_mul(d, x, r); - FP_mod(y->g, d); - y->XES = 2; -} - -/* convert back to regular form */ -void YYY::FP_redc(BIG x, FP *y) -{ - DBIG d; - BIG_dzero(d); - BIG_dscopy(d, y->g); - FP_mod(x, d); -} - - -/* reduce a DBIG to a BIG using Montgomery's no trial division method */ -/* d is expected to be dnormed before entry */ -/* SU= 112 */ -void YYY::FP_mod(BIG a, DBIG d) -{ - BIG mdls; - BIG_rcopy(mdls, Modulus); - BIG_monty(a, mdls, MConst, d); -} - -#endif - -void YYY::FP_from_int(FP *x,int a) -{ - BIG w; - if (a<0) BIG_rcopy(w, Modulus); - else BIG_zero(w); - BIG_inc(w,a); BIG_norm(w); - FP_nres(x,w); -} - -/* test x==0 ? */ -/* SU= 48 */ -int YYY::FP_iszilch(FP *x) -{ - BIG m; - FP y; - FP_copy(&y,x); - FP_reduce(&y); - FP_redc(m,&y); - return BIG_iszilch(m); -} - -/* input must be reduced */ -int YYY::FP_isunity(FP *x) -{ - BIG m; - FP y; - FP_copy(&y,x); - FP_reduce(&y); - FP_redc(m,&y); - return BIG_isunity(m); -} - -void YYY::FP_copy(FP *y, FP *x) -{ - BIG_copy(y->g, x->g); - y->XES = x->XES; -} - -void YYY::FP_rcopy(FP *y, const BIG c) -{ - BIG b; - BIG_rcopy(b, c); - FP_nres(y, b); -} - -/* Swap a and b if d=1 */ -void YYY::FP_cswap(FP *a, FP *b, int d) -{ - sign32 t, c = d; - BIG_cswap(a->g, b->g, d); - - c = ~(c - 1); - t = c & ((a->XES) ^ (b->XES)); - a->XES ^= t; - b->XES ^= t; - -} - -/* Move b to a if d=1 */ -void YYY::FP_cmove(FP *a, FP *b, int d) -{ - sign32 c = -d; - - BIG_cmove(a->g, b->g, d); - a->XES ^= (a->XES ^ b->XES)&c; -} - -void YYY::FP_zero(FP *x) -{ - BIG_zero(x->g); - x->XES = 1; -} - -int YYY::FP_equals(FP *x, FP *y) -{ - FP xg, yg; - FP_copy(&xg, x); - FP_copy(&yg, y); - FP_reduce(&xg); FP_reduce(&yg); - - if (BIG_comp(xg.g, yg.g) == 0) return 1; - return 0; -} - -// Is x lexically larger than p-x? -// return -1 for no, 0 if x=0, 1 for yes -int YYY::FP_islarger(FP *x) -{ - BIG p,fx,sx; - if (FP_iszilch(x)) return 0; - BIG_rcopy(p,Modulus); - FP_redc(fx,x); - BIG_sub(sx,p,fx); BIG_norm(sx); - return BIG_comp(fx,sx); -} - -void YYY::FP_toBytes(char *b,FP *x) -{ - BIG t; - FP_redc(t, x); - BIG_toBytes(b, t); -} - -void YYY::FP_fromBytes(FP *x,char *b) -{ - BIG t; - BIG_fromBytes(t, b); - FP_nres(x, t); -} - -/* output FP */ -/* SU= 48 */ -void YYY::FP_output(FP *r) -{ - BIG c; - FP_reduce(r); - FP_redc(c, r); - BIG_output(c); -} - -void YYY::FP_rawoutput(FP *r) -{ - BIG_rawoutput(r->g); -} - -#ifdef GET_STATS -int tsqr = 0, rsqr = 0, tmul = 0, rmul = 0; -int tadd = 0, radd = 0, tneg = 0, rneg = 0; -int tdadd = 0, rdadd = 0, tdneg = 0, rdneg = 0; -#endif - -#ifdef FUSED_MODMUL - -/* Insert fastest code here */ - -#endif - -/* r=a*b mod Modulus */ -/* product must be less that p.R - and we need to know this in advance! */ -/* SU= 88 */ -void YYY::FP_mul(FP *r, FP *a, FP *b) -{ - DBIG d; - - if ((sign64)a->XES * b->XES > (sign64)FEXCESS_YYY) - { -#ifdef DEBUG_REDUCE - printf("Product too large - reducing it\n"); -#endif - FP_reduce(a); /* it is sufficient to fully reduce just one of them < p */ - } - -#ifdef FUSED_MODMUL - FP_modmul(r->g, a->g, b->g); -#else - BIG_mul(d, a->g, b->g); - FP_mod(r->g, d); -#endif - r->XES = 2; -} - - -/* multiplication by an integer, r=a*c */ -/* SU= 136 */ -void YYY::FP_imul(FP *r, FP *a, int c) -{ - DBIG d; - BIG k; - FP f; - - int s = 0; - - if (c < 0) - { - c = -c; - s = 1; - } - -#if MODTYPE_YYY==PSEUDO_MERSENNE || MODTYPE_YYY==GENERALISED_MERSENNE - - BIG_pxmul(d, a->g, c); - FP_mod(r->g, d); - r->XES = 2; - -#else - //Montgomery - if (a->XES * c <= FEXCESS_YYY) - { - BIG_pmul(r->g, a->g, c); - r->XES = a->XES * c; // careful here - XES jumps! - } - else - { // don't want to do this - only a problem for Montgomery modulus and larger constants - BIG_zero(k); - BIG_inc(k, c); - BIG_norm(k); - FP_nres(&f, k); - FP_mul(r, a, &f); - } -#endif - - if (s) - { - FP_neg(r, r); - FP_norm(r); - } -} - -/* Set r=a^2 mod m */ -/* SU= 88 */ -void YYY::FP_sqr(FP *r, FP *a) -{ - DBIG d; - - if ((sign64)a->XES * a->XES > (sign64)FEXCESS_YYY) - { -#ifdef DEBUG_REDUCE - printf("Product too large - reducing it\n"); -#endif - FP_reduce(a); - } - - BIG_sqr(d, a->g); - FP_mod(r->g, d); - r->XES = 2; -} - -/* SU= 16 */ -/* Set r=a+b */ -void YYY::FP_add(FP *r, FP *a, FP *b) -{ - BIG_add(r->g, a->g, b->g); - r->XES = a->XES + b->XES; - if (r->XES > FEXCESS_YYY) - { -#ifdef DEBUG_REDUCE - printf("Sum too large - reducing it \n"); -#endif - FP_reduce(r); - } -} - -/* Set r=a-b mod m */ -/* SU= 56 */ -void YYY::FP_sub(FP *r, FP *a, FP *b) -{ - FP n; - FP_neg(&n, b); - FP_add(r, a, &n); -} - -// https://graphics.stanford.edu/~seander/bithacks.html -// constant time log to base 2 (or number of bits in) - -static int logb2(unsign32 v) -{ - int r; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - - v = v - ((v >> 1) & 0x55555555); - v = (v & 0x33333333) + ((v >> 2) & 0x33333333); - r = (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; - return r; -} - -// find appoximation to quotient of a/m -// Out by at most 2. -// Note that MAXXES is bounded to be 2-bits less than half a word -static int quo(BIG n, BIG m) -{ - int sh; - chunk num, den; - int hb = CHUNK / 2; - if (TBITS_YYY < hb) - { - sh = hb - TBITS_YYY; - num = (n[NLEN_XXX - 1] << sh) | (n[NLEN_XXX - 2] >> (BASEBITS_XXX - sh)); - den = (m[NLEN_XXX - 1] << sh) | (m[NLEN_XXX - 2] >> (BASEBITS_XXX - sh)); - } - else - { - num = n[NLEN_XXX - 1]; - den = m[NLEN_XXX - 1]; - } - return (int)(num / (den + 1)); -} - -/* SU= 48 */ -/* Fully reduce a mod Modulus */ -void YYY::FP_reduce(FP *a) -{ - BIG m, r; - int sr, sb, q; - chunk carry; - - BIG_rcopy(m, Modulus); - BIG_norm(a->g); - - if (a->XES > 16) - { - q = quo(a->g, m); - carry = BIG_pmul(r, m, q); - r[NLEN_XXX - 1] += (carry << BASEBITS_XXX); // correction - put any carry out back in again - BIG_sub(a->g, a->g, r); - BIG_norm(a->g); - sb = 2; - } - else sb = logb2(a->XES - 1); // sb does not depend on the actual data - - BIG_fshl(m, sb); - while (sb > 0) - { -// constant time... - sr = BIG_ssn(r, a->g, m); // optimized combined shift, subtract and norm - BIG_cmove(a->g, r, 1 - sr); - sb--; - } - - a->XES = 1; -} - -void YYY::FP_norm(FP *x) -{ - BIG_norm(x->g); -} - -/* Set r=-a mod Modulus */ -/* SU= 64 */ -void YYY::FP_neg(FP *r, FP *a) -{ - int sb; - BIG m; - - BIG_rcopy(m, Modulus); - - sb = logb2(a->XES - 1); - BIG_fshl(m, sb); - BIG_sub(r->g, m, a->g); - r->XES = ((sign32)1 << sb) + 1; // +1 to cover case where a is zero ? - - if (r->XES > FEXCESS_YYY) - { -#ifdef DEBUG_REDUCE - printf("Negation too large - reducing it \n"); -#endif - FP_reduce(r); - } - -} - -/* Set r=a/2. */ -/* SU= 56 */ -void YYY::FP_div2(FP *r, FP *a) -{ - BIG m; - BIG w; - BIG_rcopy(m, Modulus); - int pr=BIG_parity(a->g); - - FP_copy(r, a); - BIG_copy(w,r->g); - BIG_fshr(r->g,1); - BIG_add(w, w, m); - BIG_norm(w); - BIG_fshr(w, 1); - - BIG_cmove(r->g,w,pr); -} - -// Could leak size of b -// but not used here with secret exponent b -void YYY::FP_pow(FP *r, FP *a, BIG b) -{ - sign8 w[1 + (NLEN_XXX * BASEBITS_XXX + 3) / 4]; - FP tb[16]; - BIG t; - int i, nb; - - FP_copy(r,a); - FP_norm(r); - BIG_copy(t, b); - BIG_norm(t); - nb = 1 + (BIG_nbits(t) + 3) / 4; - // convert exponent to 4-bit window - for (i = 0; i < nb; i++) - { - w[i] = BIG_lastbits(t, 4); - BIG_dec(t, w[i]); - BIG_norm(t); - BIG_fshr(t, 4); - } - - FP_one(&tb[0]); - FP_copy(&tb[1], r); - for (i = 2; i < 16; i++) - FP_mul(&tb[i], &tb[i - 1], r); - - FP_copy(r, &tb[w[nb - 1]]); - for (i = nb - 2; i >= 0; i--) - { - FP_sqr(r, r); - FP_sqr(r, r); - FP_sqr(r, r); - FP_sqr(r, r); - FP_mul(r, r, &tb[w[i]]); - } - FP_reduce(r); -} - -#if MODTYPE_YYY==PSEUDO_MERSENNE || MODTYPE_YYY==GENERALISED_MERSENNE - -// See eprint paper https://eprint.iacr.org/2018/1038 -// e.g. If p=3 mod 4 r= x^{(p-3)/4}, if p=5 mod 8 r=x^{(p-5)/8} - -void YYY::FP_fpow(FP *r, FP *x) -{ - int i, j, k, bw, w, nw, lo, m, n, c, nd, e=PM1D2_YYY; - FP xp[11], t, key; - const int ac[] = {1, 2, 3, 6, 12, 15, 30, 60, 120, 240, 255}; -// phase 1 - FP_copy(&xp[0], x); // 1 - FP_sqr(&xp[1], x); // 2 - FP_mul(&xp[2], &xp[1], x); //3 - FP_sqr(&xp[3], &xp[2]); // 6 - FP_sqr(&xp[4], &xp[3]); // 12 - FP_mul(&xp[5], &xp[4], &xp[2]); // 15 - FP_sqr(&xp[6], &xp[5]); // 30 - FP_sqr(&xp[7], &xp[6]); // 60 - FP_sqr(&xp[8], &xp[7]); // 120 - FP_sqr(&xp[9], &xp[8]); // 240 - FP_mul(&xp[10], &xp[9], &xp[5]); // 255 - -#if MODTYPE_YYY==PSEUDO_MERSENNE - n = MODBITS_YYY; -#endif -#if MODTYPE_YYY==GENERALISED_MERSENNE // Ed448 ONLY - n = MODBITS_YYY / 2; -#endif - - n-=(e+1); - c=(MConst+(1< k) i--; - FP_copy(&key, &xp[i]); - k -= ac[i]; - } - while (k != 0) - { - i--; - if (ac[i] > k) continue; - FP_mul(&key, &key, &xp[i]); - k -= ac[i]; - } - -// phase 2 - FP_copy(&xp[1], &xp[2]); - FP_copy(&xp[2], &xp[5]); - FP_copy(&xp[3], &xp[10]); - - j = 3; m = 8; - nw = n - bw; - while (2 * m < nw) - { - FP_copy(&t, &xp[j++]); - for (i = 0; i < m; i++) - FP_sqr(&t, &t); - FP_mul(&xp[j], &xp[j - 1], &t); - m *= 2; - } - - lo = nw - m; - FP_copy(r, &xp[j]); - - while (lo != 0) - { - m /= 2; j--; - if (lo < m) continue; - lo -= m; - FP_copy(&t, r); - for (i = 0; i < m; i++) - FP_sqr(&t, &t); - FP_mul(r, &t, &xp[j]); - } -// phase 3 - - if (bw != 0) - { - for (i = 0; i < bw; i++ ) - FP_sqr(r, r); - FP_mul(r, r, &key); - } - -#if MODTYPE_YYY==GENERALISED_MERSENNE // Ed448 ONLY - FP_copy(&key, r); - FP_sqr(&t, &key); - FP_mul(r, &t, &xp[0]); - for (i = 0; i < n + 1; i++) - FP_sqr(r, r); - FP_mul(r, r, &key); -#endif - - for (i=0;i1;k--) - { - for (j=1;j>1; - -#else - BIG m; - FP y; - FP_copy(&y,x); - FP_reduce(&y); - FP_redc(m,&y); - return BIG_parity(m); -#endif -} - -void YYY::FP_rand(FP *x,csprng *rng) -{ - BIG w,m; - BIG_rcopy(m,Modulus); - BIG_randomnum(w,m,rng); - FP_nres(x,w); -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12.cpp deleted file mode 100644 index 61ac4f3..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12.cpp +++ /dev/null @@ -1,952 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^12 functions */ -/* SU=m, m is Stack Usage (no lazy )*/ -/* FP12 elements are of the form a+i.b+i^2.c */ - -#include "fp12_YYY.h" -#include "config_curve_ZZZ.h" - -using namespace XXX; - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} - - -/* Constant time select from pre-computed table */ -static void FP12_select(YYY::FP12 *f, YYY::FP12 g[], sign32 b) -{ - YYY::FP12 invf; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - FP12_cmove(f, &g[0], teq(babs, 0)); // conditional move - FP12_cmove(f, &g[1], teq(babs, 1)); - FP12_cmove(f, &g[2], teq(babs, 2)); - FP12_cmove(f, &g[3], teq(babs, 3)); - FP12_cmove(f, &g[4], teq(babs, 4)); - FP12_cmove(f, &g[5], teq(babs, 5)); - FP12_cmove(f, &g[6], teq(babs, 6)); - FP12_cmove(f, &g[7], teq(babs, 7)); - - FP12_copy(&invf, f); - FP12_conj(&invf, &invf); // 1/f - FP12_cmove(f, &invf, (int)(m & 1)); -} - -/* test x==0 ? */ -/* SU= 8 */ -int YYY::FP12_iszilch(FP12 *x) -{ - if (FP4_iszilch(&(x->a)) && FP4_iszilch(&(x->b)) && FP4_iszilch(&(x->c))) return 1; - return 0; -} - -/* test x==1 ? */ -/* SU= 8 */ -int YYY::FP12_isunity(FP12 *x) -{ - if (FP4_isunity(&(x->a)) && FP4_iszilch(&(x->b)) && FP4_iszilch(&(x->c))) return 1; - return 0; -} - -/* FP12 copy w=x */ -/* SU= 16 */ -void YYY::FP12_copy(FP12 *w, FP12 *x) -{ - if (x == w) return; - FP4_copy(&(w->a), &(x->a)); - FP4_copy(&(w->b), &(x->b)); - FP4_copy(&(w->c), &(x->c)); - w->type = x->type; -} - -/* FP12 w=1 */ -/* SU= 8 */ -void YYY::FP12_one(FP12 *w) -{ - FP4_one(&(w->a)); - FP4_zero(&(w->b)); - FP4_zero(&(w->c)); - w->type = FP_UNITY; -} - -void YYY::FP12_zero(FP12 *w) -{ - FP4_zero(&(w->a)); - FP4_zero(&(w->b)); - FP4_zero(&(w->c)); - w->type = FP_ZILCH; -} - -/* return 1 if x==y, else 0 */ -/* SU= 16 */ -int YYY::FP12_equals(FP12 *x, FP12 *y) -{ - if (FP4_equals(&(x->a), &(y->a)) && FP4_equals(&(x->b), &(y->b)) && FP4_equals(&(x->c), &(y->c))) - return 1; - return 0; -} - -/* Set w=conj(x) */ -/* SU= 8 */ -void YYY::FP12_conj(FP12 *w, FP12 *x) -{ - FP12_copy(w, x); - FP4_conj(&(w->a), &(w->a)); - FP4_nconj(&(w->b), &(w->b)); - FP4_conj(&(w->c), &(w->c)); -} - -/* Create FP12 from FP4 */ -/* SU= 8 */ -void YYY::FP12_from_FP4(FP12 *w, FP4 *a) -{ - FP4_copy(&(w->a), a); - FP4_zero(&(w->b)); - FP4_zero(&(w->c)); - w->type = FP_SPARSEST; -} - -/* Create FP12 from 3 FP4's */ -/* SU= 16 */ -void YYY::FP12_from_FP4s(FP12 *w, FP4 *a, FP4 *b, FP4 *c) -{ - FP4_copy(&(w->a), a); - FP4_copy(&(w->b), b); - FP4_copy(&(w->c), c); - w->type = FP_DENSE; -} - -/* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */ -/* SU= 600 */ -void YYY::FP12_usqr(FP12 *w, FP12 *x) -{ - FP4 A, B, C, D; - - FP4_copy(&A, &(x->a)); - - FP4_sqr(&(w->a), &(x->a)); // Wa XES=2 - FP4_add(&D, &(w->a), &(w->a)); // Wa XES=4 - FP4_add(&(w->a), &D, &(w->a)); // Wa XES=6 - - FP4_norm(&(w->a)); - FP4_nconj(&A, &A); - - FP4_add(&A, &A, &A); - FP4_add(&(w->a), &(w->a), &A); // Wa XES=8 - FP4_sqr(&B, &(x->c)); - FP4_times_i(&B); - - FP4_add(&D, &B, &B); - FP4_add(&B, &B, &D); - FP4_norm(&B); - - FP4_sqr(&C, &(x->b)); - - FP4_add(&D, &C, &C); - FP4_add(&C, &C, &D); - - FP4_norm(&C); - FP4_conj(&(w->b), &(x->b)); - FP4_add(&(w->b), &(w->b), &(w->b)); - FP4_nconj(&(w->c), &(x->c)); - - FP4_add(&(w->c), &(w->c), &(w->c)); - FP4_add(&(w->b), &B, &(w->b)); - FP4_add(&(w->c), &C, &(w->c)); - - w->type = FP_DENSE; - //FP12_norm(w); - FP12_reduce(w); /* reduce here as in pow function repeated squarings would trigger multiple reductions */ -} - -/* FP12 squaring w=x^2 */ -/* SU= 600 */ -void YYY::FP12_sqr(FP12 *w, FP12 *x) -{ - /* Use Chung-Hasan SQR2 method from http://cacr.uwaterloo.ca/techreports/2006/cacr2006-24.pdf */ - - FP4 A, B, C, D; - - if (x->type <= FP_UNITY) - { - FP12_copy(w, x); - return; - } - - FP4_sqr(&A, &(x->a)); - FP4_mul(&B, &(x->b), &(x->c)); - FP4_add(&B, &B, &B); - FP4_norm(&B); - FP4_sqr(&C, &(x->c)); - - FP4_mul(&D, &(x->a), &(x->b)); - FP4_add(&D, &D, &D); - FP4_add(&(w->c), &(x->a), &(x->c)); - FP4_add(&(w->c), &(x->b), &(w->c)); - FP4_norm(&(w->c)); - - FP4_sqr(&(w->c), &(w->c)); - - FP4_copy(&(w->a), &A); - FP4_add(&A, &A, &B); - - FP4_norm(&A); - - FP4_add(&A, &A, &C); - FP4_add(&A, &A, &D); - - FP4_norm(&A); - FP4_neg(&A, &A); - FP4_times_i(&B); - FP4_times_i(&C); - - FP4_add(&(w->a), &(w->a), &B); - FP4_add(&(w->b), &C, &D); - FP4_add(&(w->c), &(w->c), &A); - - if (x->type == FP_SPARSER || x->type == FP_SPARSEST) - w->type = FP_SPARSE; - else - w->type = FP_DENSE; - FP12_norm(w); -} - -// Use FP12_mul when both multiplicands are dense -// Use FP12smul when it is known that both multiplicands are line functions -// Use FP12ssmul when it is suspected that one or both multiplicands could have some sparsity - - -/* FP12 full multiplication w=w*y */ -void YYY::FP12_mul(FP12 *w, FP12 *y) -{ - FP4 z0, z1, z2, z3, t0, t1; - - FP4_mul(&z0, &(w->a), &(y->a)); // xa.ya always 11x11 - - FP4_mul(&z2, &(w->b), &(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 - - FP4_add(&t0, &(w->a), &(w->b)); // (xa+xb) - FP4_add(&t1, &(y->a), &(y->b)); // (ya+yb) - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&z1, &t0, &t1); // (xa+xb)(ya+yb) always 11x11 - FP4_add(&t0, &(w->b), &(w->c)); // (xb+xc) - FP4_add(&t1, &(y->b), &(y->c)); // (yb+yc) - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&z3, &t0, &t1); // (xb+xc)(yb+yc) could be anything... - FP4_neg(&t0, &z0); // -(xa.ya) - FP4_neg(&t1, &z2); // -(xb.yb) - - FP4_add(&z1, &z1, &t0); - FP4_add(&(w->b), &z1, &t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya - - FP4_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - FP4_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) - - FP4_add(&t0, &(w->a), &(w->c)); // (xa+xc) - FP4_add(&t1, &(y->a), &(y->c)); // (ya+yc) - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&t0, &t1, &t0); // (xa+xc)(ya+yc) always 11x11 - FP4_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - - FP4_mul(&t0, &(w->c), &(y->c)); // (xc.yc) could be anything - FP4_neg(&t1, &t0); // -(xc.yc) - - FP4_add(&(w->c), &z2, &t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc - FP4_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb - FP4_times_i(&t0); // i.(xc.yc) - FP4_add(&(w->b), &(w->b), &t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc) - FP4_norm(&z3); - FP4_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb) - FP4_add(&(w->a), &z0, &z3); // wa = xa.ya + i(xb.yc + xc.yb) - - FP12_norm(w); - w->type = FP_DENSE; -} - -/* FP12 full multiplication w=w*y */ -/* Supports sparse multiplicands */ -/* Usually w is denser than y */ -void YYY::FP12_ssmul(FP12 *w, FP12 *y) -{ - FP4 z0, z1, z2, z3, t0, t1; - if (w->type == FP_UNITY) - { - FP12_copy(w, y); - return; - } - if (y->type == FP_UNITY) - return; - - if (y->type >= FP_SPARSE) - { - FP4_mul(&z0, &(w->a), &(y->a)); // xa.ya always 11x11 - -#if SEXTIC_TWIST_ZZZ == M_TYPE - if (y->type == FP_SPARSE || w->type == FP_SPARSE) - { - FP2_mul(&z2.b, &(w->b).b, &(y->b).b); - FP2_zero(&z2.a); - if (y->type != FP_SPARSE) - FP2_mul(&z2.a, &(w->b).b, &(y->b).a); - if (w->type != FP_SPARSE) - FP2_mul(&z2.a, &(w->b).a, &(y->b).b); - FP4_times_i(&z2); - } - else -#endif - FP4_mul(&z2, &(w->b), &(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 - - FP4_add(&t0, &(w->a), &(w->b)); // (xa+xb) - FP4_add(&t1, &(y->a), &(y->b)); // (ya+yb) - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&z1, &t0, &t1); // (xa+xb)(ya+yb) always 11x11 - FP4_add(&t0, &(w->b), &(w->c)); // (xb+xc) - FP4_add(&t1, &(y->b), &(y->c)); // (yb+yc) - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&z3, &t0, &t1); // (xb+xc)(yb+yc) could be anything... - FP4_neg(&t0, &z0); // -(xa.ya) - FP4_neg(&t1, &z2); // -(xb.yb) - - FP4_add(&z1, &z1, &t0); - FP4_add(&(w->b), &z1, &t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya - - FP4_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - FP4_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) - - FP4_add(&t0, &(w->a), &(w->c)); // (xa+xc) - FP4_add(&t1, &(y->a), &(y->c)); // (ya+yc) - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&t0, &t1, &t0); // (xa+xc)(ya+yc) always 11x11 - FP4_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - -#if SEXTIC_TWIST_ZZZ == D_TYPE - if (y->type == FP_SPARSE || w->type == FP_SPARSE) - { - FP2_mul(&t0.a, &(w->c).a, &(y->c).a); - FP2_zero(&t0.b); - if (y->type != FP_SPARSE) - FP2_mul(&t0.b, &(w->c).a, &(y->c).b); - if (w->type != FP_SPARSE) - FP2_mul(&t0.b, &(w->c).b, &(y->c).a); - } - else -#endif - FP4_mul(&t0, &(w->c), &(y->c)); // (xc.yc) could be anything - - FP4_neg(&t1, &t0); // -(xc.yc) - - FP4_add(&(w->c), &z2, &t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc - FP4_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb - FP4_times_i(&t0); // i.(xc.yc) - FP4_add(&(w->b), &(w->b), &t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc) - FP4_norm(&z3); - FP4_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb) - FP4_add(&(w->a), &z0, &z3); // wa = xa.ya + i(xb.yc + xc.yb) - } else { - if (w->type == FP_SPARSER || w->type == FP_SPARSEST) - { - FP12_smul(w, y); - return; - } -// dense by sparser or sparsest - 13m -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP4_copy(&z3, &(w->b)); - FP4_mul(&z0, &(w->a), &(y->a)); - - if (y->type == FP_SPARSEST) - FP4_qmul(&z2, &(w->b), &(y->b).a.a); - else - FP4_pmul(&z2, &(w->b), &(y->b).a); - - FP4_add(&(w->b), &(w->a), &(w->b)); - FP4_copy(&t1, &(y->a)); - FP2_add(&t1.a, &t1.a, &(y->b).a); - - FP4_norm(&t1); - FP4_norm(&(w->b)); - - FP4_mul(&(w->b), &(w->b), &t1); - FP4_add(&z3, &z3, &(w->c)); - FP4_norm(&z3); - - if (y->type == FP_SPARSEST) - FP4_qmul(&z3, &z3, &(y->b).a.a); - else - FP4_pmul(&z3, &z3, &(y->b).a); - - FP4_neg(&t0, &z0); - FP4_neg(&t1, &z2); - - FP4_add(&(w->b), &(w->b), &t0); // z1=z1-z0 - FP4_add(&(w->b), &(w->b), &t1); // z1=z1-z2 - - FP4_add(&z3, &z3, &t1); // z3=z3-z2 - FP4_add(&z2, &z2, &t0); // z2=z2-z0 - - FP4_add(&t0, &(w->a), &(w->c)); - FP4_norm(&t0); - FP4_norm(&z3); - - FP4_mul(&t0, &(y->a), &t0); - FP4_add(&(w->c), &z2, &t0); - - FP4_times_i(&z3); - FP4_add(&(w->a), &z0, &z3); -#endif -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP4_mul(&z0, &(w->a), &(y->a)); - FP4_add(&t0, &(w->a), &(w->b)); - FP4_norm(&t0); - - FP4_mul(&z1, &t0, &(y->a)); - FP4_add(&t0, &(w->b), &(w->c)); - FP4_norm(&t0); - - if (y->type == FP_SPARSEST) - FP4_qmul(&z3, &t0, &(y->c).b.a); - else - FP4_pmul(&z3, &t0, &(y->c).b); - - FP4_times_i(&z3); - - FP4_neg(&t0, &z0); - FP4_add(&z1, &z1, &t0); // z1=z1-z0 - - FP4_copy(&(w->b), &z1); - FP4_copy(&z2, &t0); - - FP4_add(&t0, &(w->a), &(w->c)); - FP4_add(&t1, &(y->a), &(y->c)); - - FP4_norm(&t0); - FP4_norm(&t1); - - FP4_mul(&t0, &t1, &t0); - FP4_add(&z2, &z2, &t0); - - if (y->type == FP_SPARSEST) - FP4_qmul(&t0, &(w->c), &(y->c).b.a); - else - FP4_pmul(&t0, &(w->c), &(y->c).b); - - FP4_times_i(&t0); - FP4_neg(&t1, &t0); - FP4_times_i(&t0); - - FP4_add(&(w->c), &z2, &t1); - FP4_add(&z3, &z3, &t1); - - FP4_add(&(w->b), &(w->b), &t0); - FP4_norm(&z3); - FP4_times_i(&z3); - FP4_add(&(w->a), &z0, &z3); - -#endif - } - w->type = FP_DENSE; - FP12_norm(w); -} - -/* FP12 multiplication w=w*y */ -/* catering for special case that arises from special form of ATE pairing line function */ -/* w and y are both sparser or sparsest line functions - cost = 6m */ -void YYY::FP12_smul(FP12 *w, FP12 *y) -{ - FP2 w1, w2, w3, ta, tb, tc, td, te, t; - -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP2_mul(&w1, &(w->a).a, &(y->a).a); // A1.A2 - FP2_mul(&w2, &(w->a).b, &(y->a).b); // B1.B2 - - if (y->type == FP_SPARSEST || w->type == FP_SPARSEST) - { - if (y->type == FP_SPARSEST && w->type == FP_SPARSEST) - { - FP_mul(&w3.a, &(w->b).a.a, &(y->b).a.a); - FP_zero(&w3.b); - } else { - if (y->type != FP_SPARSEST) - FP2_pmul(&w3, &(y->b).a, &(w->b).a.a); - if (w->type != FP_SPARSEST) - FP2_pmul(&w3, &(w->b).a, &(y->b).a.a); - } - } - else - FP2_mul(&w3, &(w->b).a, &(y->b).a); // C1.C2 - - FP2_add(&ta, &(w->a).a, &(w->a).b); // A1+B1 - FP2_add(&tb, &(y->a).a, &(y->a).b); // A2+B2 - FP2_norm(&ta); - FP2_norm(&tb); - FP2_mul(&tc, &ta, &tb); // (A1+B1)(A2+B2) - FP2_add(&t, &w1, &w2); - FP2_neg(&t, &t); - FP2_add(&tc, &tc, &t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1) - - FP2_add(&ta, &(w->a).a, &(w->b).a); // A1+C1 - FP2_add(&tb, &(y->a).a, &(y->b).a); // A2+C2 - FP2_norm(&ta); - FP2_norm(&tb); - FP2_mul(&td, &ta, &tb); // (A1+C1)(A2+C2) - FP2_add(&t, &w1, &w3); - FP2_neg(&t, &t); - FP2_add(&td, &td, &t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1) - - FP2_add(&ta, &(w->a).b, &(w->b).a); // B1+C1 - FP2_add(&tb, &(y->a).b, &(y->b).a); // B2+C2 - FP2_norm(&ta); - FP2_norm(&tb); - FP2_mul(&te, &ta, &tb); // (B1+C1)(B2+C2) - FP2_add(&t, &w2, &w3); - FP2_neg(&t, &t); - FP2_add(&te, &te, &t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1) - - FP2_mul_ip(&w2); - FP2_add(&w1, &w1, &w2); - FP4_from_FP2s(&(w->a), &w1, &tc); - FP4_from_FP2s(&(w->b), &td, &te); // only norm these 2 - FP4_from_FP2(&(w->c), &w3); - - FP4_norm(&(w->a)); - FP4_norm(&(w->b)); -#endif -// } else { -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP2_mul(&w1, &(w->a).a, &(y->a).a); // A1.A2 - FP2_mul(&w2, &(w->a).b, &(y->a).b); // B1.B2 - - if (y->type == FP_SPARSEST || w->type == FP_SPARSEST) - { - if (y->type == FP_SPARSEST && w->type == FP_SPARSEST) - { - FP_mul(&w3.a, &(w->c).b.a, &(y->c).b.a); - FP_zero(&w3.b); - } else { - if (y->type != FP_SPARSEST) - FP2_pmul(&w3, &(y->c).b, &(w->c).b.a); - if (w->type != FP_SPARSEST) - FP2_pmul(&w3, &(w->c).b, &(y->c).b.a); - } - } - else - FP2_mul(&w3, &(w->c).b, &(y->c).b); // F1.F2 - - FP2_add(&ta, &(w->a).a, &(w->a).b); // A1+B1 - FP2_add(&tb, &(y->a).a, &(y->a).b); // A2+B2 - FP2_norm(&ta); - FP2_norm(&tb); - FP2_mul(&tc, &ta, &tb); // (A1+B1)(A2+B2) - FP2_add(&t, &w1, &w2); - FP2_neg(&t, &t); - FP2_add(&tc, &tc, &t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1) - - FP2_add(&ta, &(w->a).a, &(w->c).b); // A1+F1 - FP2_add(&tb, &(y->a).a, &(y->c).b); // A2+F2 - FP2_norm(&ta); - FP2_norm(&tb); - FP2_mul(&td, &ta, &tb); // (A1+F1)(A2+F2) - FP2_add(&t, &w1, &w3); - FP2_neg(&t, &t); - FP2_add(&td, &td, &t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1) - - FP2_add(&ta, &(w->a).b, &(w->c).b); // B1+F1 - FP2_add(&tb, &(y->a).b, &(y->c).b); // B2+F2 - FP2_norm(&ta); - FP2_norm(&tb); - FP2_mul(&te, &ta, &tb); // (B1+F1)(B2+F2) - FP2_add(&t, &w2, &w3); - FP2_neg(&t, &t); - FP2_add(&te, &te, &t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1) - - FP2_mul_ip(&w2); - FP2_add(&w1, &w1, &w2); - FP4_from_FP2s(&(w->a), &w1, &tc); - - FP2_mul_ip(&w3); - FP2_norm(&w3); - FP4_from_FP2H(&(w->b), &w3); - - FP2_norm(&te); - FP2_mul_ip(&te); - FP4_from_FP2s(&(w->c), &te, &td); - - FP4_norm(&(w->a)); - FP4_norm(&(w->c)); -#endif - -// } - w->type = FP_SPARSE; -} - -/* Set w=1/x */ -/* SU= 600 */ -void YYY::FP12_inv(FP12 *w, FP12 *x) -{ - FP4 f0, f1, f2, f3; - - FP4_sqr(&f0, &(x->a)); - FP4_mul(&f1, &(x->b), &(x->c)); - FP4_times_i(&f1); - FP4_sub(&f0, &f0, &f1); /* y.a */ - FP4_norm(&f0); - - FP4_sqr(&f1, &(x->c)); - FP4_times_i(&f1); - FP4_mul(&f2, &(x->a), &(x->b)); - FP4_sub(&f1, &f1, &f2); /* y.b */ - FP4_norm(&f1); - - FP4_sqr(&f2, &(x->b)); - FP4_mul(&f3, &(x->a), &(x->c)); - FP4_sub(&f2, &f2, &f3); /* y.c */ - FP4_norm(&f2); - - FP4_mul(&f3, &(x->b), &f2); - FP4_times_i(&f3); - FP4_mul(&(w->a), &f0, &(x->a)); - FP4_add(&f3, &(w->a), &f3); - FP4_mul(&(w->c), &f1, &(x->c)); - FP4_times_i(&(w->c)); - - FP4_add(&f3, &(w->c), &f3); - FP4_norm(&f3); - - FP4_inv(&f3, &f3, NULL); - - FP4_mul(&(w->a), &f0, &f3); - FP4_mul(&(w->b), &f1, &f3); - FP4_mul(&(w->c), &f2, &f3); - w->type = FP_DENSE; -} - -/* constant time powering by small integer of max length bts */ - -void YYY::FP12_pinpow(FP12 *r, int e, int bts) -{ - int i, b; - FP12 R[2]; - - FP12_one(&R[0]); - FP12_copy(&R[1], r); - - for (i = bts - 1; i >= 0; i--) - { - b = (e >> i) & 1; - FP12_mul(&R[1 - b], &R[b]); - FP12_usqr(&R[b], &R[b]); - } - FP12_copy(r, &R[0]); -} - -/* Compressed powering of unitary elements y=x^(e mod r) */ - -void YYY::FP12_compow(FP4 *c, FP12 *x, BIG e, BIG r) -{ - FP12 g1, g2; - FP4 cp, cpm1, cpm2; - FP2 f; - BIG q, a, b, m; - - BIG_rcopy(a, Fra); - BIG_rcopy(b, Frb); - FP2_from_BIGs(&f, a, b); - - BIG_rcopy(q, Modulus); - - FP12_copy(&g1, x); - FP12_copy(&g2, x); - - BIG_copy(m, q); - BIG_mod(m, r); - - BIG_copy(a, e); - BIG_mod(a, m); - - BIG_copy(b, e); - BIG_sdiv(b, m); - - FP12_trace(c, &g1); - - if (BIG_iszilch(b)) - { - FP4_xtr_pow(c, c, e); - return; - } - - FP12_frob(&g2, &f); - FP12_trace(&cp, &g2); - - FP12_conj(&g1, &g1); - FP12_mul(&g2, &g1); - FP12_trace(&cpm1, &g2); - FP12_mul(&g2, &g1); - FP12_trace(&cpm2, &g2); - - FP4_xtr_pow2(c, &cp, c, &cpm1, &cpm2, a, b); - -} - -/* Note this is simple square and multiply, so not side-channel safe */ -/* But fast for final exponentiation where exponent is not a secret */ - -void YYY::FP12_pow(FP12 *r, FP12 *a, BIG b) -{ - FP12 w, sf; - BIG b1, b3; - int i, nb, bt; - BIG_copy(b1, b); - BIG_norm(b1); - BIG_pmul(b3, b1, 3); - BIG_norm(b3); - FP12_copy(&sf, a); - FP12_norm(&sf); - FP12_copy(&w, &sf); - - if (BIG_iszilch(b3)) - { - FP12_one(r); - return; - } - - nb = BIG_nbits(b3); - for (i = nb - 2; i >= 1; i--) - { - FP12_usqr(&w, &w); - bt = BIG_bit(b3, i) - BIG_bit(b1, i); - if (bt == 1) - FP12_mul(&w, &sf); - if (bt == -1) - { - FP12_conj(&sf, &sf); - FP12_mul(&w, &sf); - FP12_conj(&sf, &sf); - } - } - - FP12_copy(r, &w); - FP12_reduce(r); - - -} - - -/* p=q0^u0.q1^u1.q2^u2.q3^u3 */ -/* Side channel attack secure */ -// Bos & Costello https://eprint.iacr.org/2013/458.pdf -// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf - -void YYY::FP12_pow4(FP12 *p, FP12 *q, BIG u[4]) -{ - int i, j, k, nb, pb, bt; - FP12 g[8], r; - BIG t[4], mt; - sign8 w[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s[NLEN_XXX * BASEBITS_XXX + 1]; - - for (i = 0; i < 4; i++) - BIG_copy(t[i], u[i]); - - -// Precomputed table - FP12_copy(&g[0], &q[0]); // q[0] - FP12_copy(&g[1], &g[0]); - FP12_mul(&g[1], &q[1]); // q[0].q[1] - FP12_copy(&g[2], &g[0]); - FP12_mul(&g[2], &q[2]); // q[0].q[2] - FP12_copy(&g[3], &g[1]); - FP12_mul(&g[3], &q[2]); // q[0].q[1].q[2] - FP12_copy(&g[4], &g[0]); - FP12_mul(&g[4], &q[3]); // q[0].q[3] - FP12_copy(&g[5], &g[1]); - FP12_mul(&g[5], &q[3]); // q[0].q[1].q[3] - FP12_copy(&g[6], &g[2]); - FP12_mul(&g[6], &q[3]); // q[0].q[2].q[3] - FP12_copy(&g[7], &g[3]); - FP12_mul(&g[7], &q[3]); // q[0].q[1].q[2].q[3] - -// Make it odd - pb = 1 - BIG_parity(t[0]); - BIG_inc(t[0], pb); - BIG_norm(t[0]); - -// Number of bits - BIG_zero(mt); - for (i = 0; i < 4; i++) - { - BIG_or(mt, mt, t[i]); - } - nb = 1 + BIG_nbits(mt); - -// Sign pivot - s[nb - 1] = 1; - for (i = 0; i < nb - 1; i++) - { - BIG_fshr(t[0], 1); - s[i] = 2 * BIG_parity(t[0]) - 1; - } - -// Recoded exponent - for (i = 0; i < nb; i++) - { - w[i] = 0; - k = 1; - for (j = 1; j < 4; j++) - { - bt = s[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w[i] += bt * k; - k *= 2; - } - } - -// Main loop - FP12_select(p, g, 2 * w[nb - 1] + 1); - for (i = nb - 2; i >= 0; i--) - { - FP12_select(&r, g, 2 * w[i] + s[i]); - FP12_usqr(p, p); - FP12_mul(p, &r); - } -// apply correction - FP12_conj(&r, &q[0]); - FP12_mul(&r, p); - FP12_cmove(p, &r, pb); - - FP12_reduce(p); -} - -/* Set w=w^p using Frobenius */ -/* SU= 160 */ -void YYY::FP12_frob(FP12 *w, FP2 *f) -{ - FP2 f2, f3; - FP2_sqr(&f2, f); /* f2=f^2 */ - FP2_mul(&f3, &f2, f); /* f3=f^3 */ - - FP4_frob(&(w->a), &f3); - FP4_frob(&(w->b), &f3); - FP4_frob(&(w->c), &f3); - - FP4_pmul(&(w->b), &(w->b), f); - FP4_pmul(&(w->c), &(w->c), &f2); - w->type = FP_DENSE; -} - -/* SU= 8 */ -/* normalise all components of w */ -void YYY::FP12_norm(FP12 *w) -{ - FP4_norm(&(w->a)); - FP4_norm(&(w->b)); - FP4_norm(&(w->c)); -} - -/* SU= 8 */ -/* reduce all components of w */ -void YYY::FP12_reduce(FP12 *w) -{ - FP4_reduce(&(w->a)); - FP4_reduce(&(w->b)); - FP4_reduce(&(w->c)); -} - -/* trace function w=trace(x) */ -/* SU= 8 */ -void YYY::FP12_trace(FP4 *w, FP12 *x) -{ - FP4_imul(w, &(x->a), 3); - FP4_reduce(w); -} - -/* SU= 8 */ -/* Output w in hex */ -void YYY::FP12_output(FP12 *w) -{ - printf("["); - FP4_output(&(w->a)); - printf(","); - FP4_output(&(w->b)); - printf(","); - FP4_output(&(w->c)); - printf("]"); -} - -/* SU= 64 */ -/* Convert g to octet string w */ -void YYY::FP12_toOctet(octet *W, FP12 *g) -{ - W->len = 12 * MODBYTES_XXX; - FP4_toBytes(&(W->val[0]),&(g->c)); - FP4_toBytes(&(W->val[4 * MODBYTES_XXX]),&(g->b)); - FP4_toBytes(&(W->val[8 * MODBYTES_XXX]),&(g->a)); -} - -/* SU= 24 */ -/* Restore g from octet string w */ -void YYY::FP12_fromOctet(FP12 *g, octet *W) -{ - FP4_fromBytes(&(g->c),&(W->val[0])); - FP4_fromBytes(&(g->b),&(W->val[4 * MODBYTES_XXX])); - FP4_fromBytes(&(g->a),&(W->val[8 * MODBYTES_XXX])); - -} - -/* Move g to f -if d=1 */ -void YYY::FP12_cmove(FP12 *f, FP12 *g, int d) -{ - FP4_cmove(&(f->a), &(g->a), d); - FP4_cmove(&(f->b), &(g->b), d); - FP4_cmove(&(f->c), &(g->c), d); - d = ~(d - 1); - f->type ^= (f->type ^ g->type)&d; -} - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16.cpp deleted file mode 100644 index cb257aa..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16.cpp +++ /dev/null @@ -1,610 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^8 functions */ - -/* FP16 elements are of the form a+ib, where i is sqrt(sqrt(-1+sqrt(-1))) */ - -#include "fp16_YYY.h" - -using namespace XXX; - -/* test x==0 ? */ -int YYY::FP16_iszilch(FP16 *x) -{ - if (FP8_iszilch(&(x->a)) && FP8_iszilch(&(x->b))) return 1; - return 0; -} - -/* test x==1 ? */ -int YYY::FP16_isunity(FP16 *x) -{ - if (FP8_isunity(&(x->a)) && FP8_iszilch(&(x->b))) return 1; - return 0; -} - -/* test is w real? That is in a+ib test b is zero */ -int YYY::FP16_isreal(FP16 *w) -{ - return FP8_iszilch(&(w->b)); -} - -/* return 1 if x==y, else 0 */ -int YYY::FP16_equals(FP16 *x, FP16 *y) -{ - if (FP8_equals(&(x->a), &(y->a)) && FP8_equals(&(x->b), &(y->b))) - return 1; - return 0; -} - - -void YYY::FP16_toBytes(char *b,FP16 *x) -{ - FP8_toBytes(b,&(x->b)); - FP8_toBytes(&b[8*MODBYTES_XXX],&(x->a)); -} - -void YYY::FP16_fromBytes(FP16 *x,char *b) -{ - FP8_fromBytes(&(x->b),b); - FP8_fromBytes(&(x->a),&b[8*MODBYTES_XXX]); -} - - -/* set FP16 from two FP8s */ -void YYY::FP16_from_FP8s(FP16 *w, FP8 * x, FP8* y) -{ - FP8_copy(&(w->a), x); - FP8_copy(&(w->b), y); -} - -/* set FP16 from FP8 */ -void YYY::FP16_from_FP8(FP16 *w, FP8 *x) -{ - FP8_copy(&(w->a), x); - FP8_zero(&(w->b)); -} - -/* set high part of FP16 from FP8 */ -void YYY::FP16_from_FP8H(FP16 *w, FP8 *x) -{ - FP8_copy(&(w->b), x); - FP8_zero(&(w->a)); -} - -/* FP16 copy w=x */ -void YYY::FP16_copy(FP16 *w, FP16 *x) -{ - if (w == x) return; - FP8_copy(&(w->a), &(x->a)); - FP8_copy(&(w->b), &(x->b)); -} - -/* FP16 w=0 */ -void YYY::FP16_zero(FP16 *w) -{ - FP8_zero(&(w->a)); - FP8_zero(&(w->b)); -} - -/* FP16 w=1 */ -void YYY::FP16_one(FP16 *w) -{ - FP8_one(&(w->a)); - FP8_zero(&(w->b)); -} - -/* Set w=-x */ -void YYY::FP16_neg(FP16 *w, FP16 *x) -{ - /* Just one field neg */ - FP8 m, t; - FP16_norm(x); - FP8_add(&m, &(x->a), &(x->b)); - FP8_norm(&m); - FP8_neg(&m, &m); - FP8_add(&t, &m, &(x->b)); - FP8_add(&(w->b), &m, &(x->a)); - FP8_copy(&(w->a), &t); - FP16_norm(w); -} - -/* Set w=conj(x) */ -void YYY::FP16_conj(FP16 *w, FP16 *x) -{ - FP8_copy(&(w->a), &(x->a)); - FP8_neg(&(w->b), &(x->b)); - FP16_norm(w); -} - -/* Set w=-conj(x) */ -void YYY::FP16_nconj(FP16 *w, FP16 *x) -{ - FP8_copy(&(w->b), &(x->b)); - FP8_neg(&(w->a), &(x->a)); - FP16_norm(w); -} - -/* Set w=x+y */ -void YYY::FP16_add(FP16 *w, FP16 *x, FP16 *y) -{ - FP8_add(&(w->a), &(x->a), &(y->a)); - FP8_add(&(w->b), &(x->b), &(y->b)); -} - -/* Set w=x-y */ -/* Input y MUST be normed */ -void YYY::FP16_sub(FP16 *w, FP16 *x, FP16 *y) -{ - FP16 my; - - FP16_neg(&my, y); - FP16_add(w, x, &my); - -} - -/* reduce all components of w mod Modulus */ -void YYY::FP16_reduce(FP16 *w) -{ - FP8_reduce(&(w->a)); - FP8_reduce(&(w->b)); -} - -/* normalise all elements of w */ -void YYY::FP16_norm(FP16 *w) -{ - FP8_norm(&(w->a)); - FP8_norm(&(w->b)); -} - -/* Set w=s*x, where s is FP8 */ -void YYY::FP16_pmul(FP16 *w, FP16 *x, FP8 *s) -{ - FP8_mul(&(w->a), &(x->a), s); - FP8_mul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is FP2 */ -void YYY::FP16_qmul(FP16 *w, FP16 *x, FP2 *s) -{ - FP8_qmul(&(w->a), &(x->a), s); - FP8_qmul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is FP */ -void YYY::FP16_tmul(FP16 *w, FP16 *x, FP *s) -{ - FP8_tmul(&(w->a), &(x->a), s); - FP8_tmul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is int */ -void YYY::FP16_imul(FP16 *w, FP16 *x, int s) -{ - FP8_imul(&(w->a), &(x->a), s); - FP8_imul(&(w->b), &(x->b), s); -} - -/* Set w=x^2 */ -/* Input MUST be normed */ -void YYY::FP16_sqr(FP16 *w, FP16 *x) -{ - FP8 t1, t2, t3; - - FP8_mul(&t3, &(x->a), &(x->b)); /* norms x */ - FP8_copy(&t2, &(x->b)); - FP8_add(&t1, &(x->a), &(x->b)); - FP8_times_i(&t2); - - FP8_add(&t2, &(x->a), &t2); - - FP8_norm(&t1); // 2 - FP8_norm(&t2); // 2 - - FP8_mul(&(w->a), &t1, &t2); - - FP8_copy(&t2, &t3); - FP8_times_i(&t2); - - FP8_add(&t2, &t2, &t3); - - FP8_norm(&t2); // 2 - FP8_neg(&t2, &t2); - FP8_add(&(w->a), &(w->a), &t2); /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */ - FP8_add(&(w->b), &t3, &t3); /* b=2ab */ - - FP16_norm(w); -} - -/* Set w=x*y */ -/* Inputs MUST be normed */ -void YYY::FP16_mul(FP16 *w, FP16 *x, FP16 *y) -{ - - FP8 t1, t2, t3, t4; - FP8_mul(&t1, &(x->a), &(y->a)); - FP8_mul(&t2, &(x->b), &(y->b)); - - FP8_add(&t3, &(y->b), &(y->a)); - FP8_add(&t4, &(x->b), &(x->a)); - - FP8_norm(&t4); // 2 - FP8_norm(&t3); // 2 - - FP8_mul(&t4, &t4, &t3); /* (xa+xb)(ya+yb) */ - FP8_neg(&t3, &t1); // 1 - FP8_add(&t4, &t4, &t3); //t4E=3 - FP8_norm(&t4); - - FP8_neg(&t3, &t2); // 1 - FP8_add(&(w->b), &t4, &t3); //wbE=3 - - FP8_times_i(&t2); - FP8_add(&(w->a), &t2, &t1); - - FP16_norm(w); -} - -/* output FP16 in format [a,b] */ -void YYY::FP16_output(FP16 *w) -{ - printf("["); - FP8_output(&(w->a)); - printf(","); - FP8_output(&(w->b)); - printf("]"); -} - -void YYY::FP16_rawoutput(FP16 *w) -{ - printf("["); - FP8_rawoutput(&(w->a)); - printf(","); - FP8_rawoutput(&(w->b)); - printf("]"); -} - -/* Set w=1/x */ -void YYY::FP16_inv(FP16 *w, FP16 *x) -{ - FP8 t1, t2; - FP8_sqr(&t1, &(x->a)); - FP8_sqr(&t2, &(x->b)); - FP8_times_i(&t2); - FP8_norm(&t2); - - FP8_sub(&t1, &t1, &t2); - FP8_norm(&t1); - - FP8_inv(&t1, &t1, NULL); - - FP8_mul(&(w->a), &t1, &(x->a)); - FP8_neg(&t1, &t1); - FP8_norm(&t1); - FP8_mul(&(w->b), &t1, &(x->b)); -} - -/* w*=i where i = sqrt(sqrt(-1+sqrt(-1))) */ -void YYY::FP16_times_i(FP16 *w) -{ - FP8 s, t; - FP8_copy(&s, &(w->b)); - FP8_copy(&t, &(w->a)); - FP8_times_i(&s); - FP8_copy(&(w->a), &s); - FP8_copy(&(w->b), &t); - FP16_norm(w); - - //FP16_neg(w,w); // *** - //FP16_norm(w); -} - -void YYY::FP16_times_i2(FP16 *w) -{ - FP8_times_i(&(w->a)); - FP8_times_i(&(w->b)); -} - -void YYY::FP16_times_i4(FP16 *w) -{ - FP8_times_i2(&(w->a)); - FP8_times_i2(&(w->b)); -} - -/* Set w=w^p using Frobenius */ -void YYY::FP16_frob(FP16 *w, FP2 *f) -{ // f=(i+1)^(p-3)/8 - FP2 ff; - FP2_sqr(&ff, f); // (i+1)^(p-3)/4 - FP2_norm(&ff); - - FP8_frob(&(w->a), &ff); - FP8_frob(&(w->b), &ff); - - FP8_qmul(&(w->b), &(w->b), f); // times (1+i)^(p-3)/8 - FP8_times_i(&(w->b)); // (i+1)^(p-1)/8 -} - -/* Set r=a^b mod m */ -void YYY::FP16_pow(FP16 *r, FP16* a, BIG b) -{ - FP16 w; - BIG z, zilch; - int bt; - - BIG_zero(zilch); - - BIG_copy(z, b); - FP16_copy(&w, a); - FP16_one(r); - BIG_norm(z); - while (1) - { - bt = BIG_parity(z); - BIG_shr(z, 1); - if (bt) FP16_mul(r, r, &w); - if (BIG_comp(z, zilch) == 0) break; - FP16_sqr(&w, &w); - } - FP16_reduce(r); -} - -/* Move b to a if d=1 */ -void YYY::FP16_cmove(FP16 *f, FP16 *g, int d) -{ - FP8_cmove(&(f->a), &(g->a), d); - FP8_cmove(&(f->b), &(g->b), d); -} - -//#if CURVE_SECURITY_ZZZ == 256 - -/* XTR xtr_a function */ -/* -void YYY::FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z) -{ - FP16 t1, t2; - - FP16_copy(r, x); - FP16_sub(&t1, w, y); - FP16_norm(&t1); - FP16_pmul(&t1, &t1, &(r->a)); - FP16_add(&t2, w, y); - FP16_norm(&t2); - FP16_pmul(&t2, &t2, &(r->b)); - FP16_times_i(&t2); - - FP16_add(r, &t1, &t2); - FP16_add(r, r, z); - - FP16_reduce(r); -} -*/ -/* XTR xtr_d function */ -/* -void YYY::FP16_xtr_D(FP16 *r, FP16 *x) -{ - FP16 w; - FP16_copy(r, x); - FP16_conj(&w, r); - FP16_add(&w, &w, &w); - FP16_sqr(r, r); - FP16_norm(&w); - FP16_sub(r, r, &w); - FP16_reduce(r); // reduce here as multiple calls trigger automatic reductions -} -*/ - -/* r=x^n using XTR method on traces of FP48s */ -/* -void YYY::FP16_xtr_pow(FP16 *r, FP16 *x, BIG n) -{ - int i, par, nb; - BIG v; - FP2 w2; - FP4 w4; - FP8 w8; - FP16 t, a, b, c, sf; - - FP16_copy(&sf, x); - FP16_norm(&sf); - BIG_zero(v); - BIG_inc(v, 3); - BIG_norm(v); - FP2_from_BIG(&w2, v); - FP4_from_FP2(&w4, &w2); - FP8_from_FP4(&w8, &w4); - FP16_from_FP8(&a, &w8); - - FP16_copy(&b, &sf); - FP16_xtr_D(&c, &sf); - - - par = BIG_parity(n); - BIG_copy(v, n); - BIG_norm(v); - BIG_shr(v, 1); - if (par == 0) - { - BIG_dec(v, 1); - BIG_norm(v); - } - - nb = BIG_nbits(v); - for (i = nb - 1; i >= 0; i--) - { - if (!BIG_bit(v, i)) - { - FP16_copy(&t, &b); - FP16_conj(&sf, &sf); - FP16_conj(&c, &c); - FP16_xtr_A(&b, &a, &b, &sf, &c); - FP16_conj(&sf, &sf); - FP16_xtr_D(&c, &t); - FP16_xtr_D(&a, &a); - } - else - { - FP16_conj(&t, &a); - FP16_xtr_D(&a, &b); - FP16_xtr_A(&b, &c, &b, &sf, &t); - FP16_xtr_D(&c, &c); - } - } - - if (par == 0) FP16_copy(r, &c); - else FP16_copy(r, &b); - FP16_reduce(r); -} -*/ -/* r=ck^a.cl^n using XTR double exponentiation method on traces of FP48s. See Stam thesis. */ -/* -void YYY::FP16_xtr_pow2(FP16 *r, FP16 *ck, FP16 *cl, FP16 *ckml, FP16 *ckm2l, BIG a, BIG b) -{ - int i, f2; - BIG d, e, w; - FP16 t, cu, cv, cumv, cum2v; - - - BIG_copy(e, a); - BIG_copy(d, b); - BIG_norm(d); - BIG_norm(e); - FP16_copy(&cu, ck); - FP16_copy(&cv, cl); - FP16_copy(&cumv, ckml); - FP16_copy(&cum2v, ckm2l); - - f2 = 0; - while (BIG_parity(d) == 0 && BIG_parity(e) == 0) - { - BIG_shr(d, 1); - BIG_shr(e, 1); - f2++; - } - while (BIG_comp(d, e) != 0) - { - if (BIG_comp(d, e) > 0) - { - BIG_imul(w, e, 4); - BIG_norm(w); - if (BIG_comp(d, w) <= 0) - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_sub(e, w, e); - BIG_norm(e); - FP16_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP16_conj(&cum2v, &cumv); - FP16_copy(&cumv, &cv); - FP16_copy(&cv, &cu); - FP16_copy(&cu, &t); - } - else if (BIG_parity(d) == 0) - { - BIG_shr(d, 1); - FP16_conj(r, &cum2v); - FP16_xtr_A(&t, &cu, &cumv, &cv, r); - FP16_xtr_D(&cum2v, &cumv); - FP16_copy(&cumv, &t); - FP16_xtr_D(&cu, &cu); - } - else if (BIG_parity(e) == 1) - { - BIG_sub(d, d, e); - BIG_norm(d); - BIG_shr(d, 1); - FP16_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP16_xtr_D(&cu, &cu); - FP16_xtr_D(&cum2v, &cv); - FP16_conj(&cum2v, &cum2v); - FP16_copy(&cv, &t); - } - else - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_shr(d, 1); - BIG_copy(e, w); - FP16_xtr_D(&t, &cumv); - FP16_conj(&cumv, &cum2v); - FP16_conj(&cum2v, &t); - FP16_xtr_D(&t, &cv); - FP16_copy(&cv, &cu); - FP16_copy(&cu, &t); - } - } - if (BIG_comp(d, e) < 0) - { - BIG_imul(w, d, 4); - BIG_norm(w); - if (BIG_comp(e, w) <= 0) - { - BIG_sub(e, e, d); - BIG_norm(e); - FP16_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP16_copy(&cum2v, &cumv); - FP16_copy(&cumv, &cu); - FP16_copy(&cu, &t); - } - else if (BIG_parity(e) == 0) - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_shr(d, 1); - BIG_copy(e, w); - FP16_xtr_D(&t, &cumv); - FP16_conj(&cumv, &cum2v); - FP16_conj(&cum2v, &t); - FP16_xtr_D(&t, &cv); - FP16_copy(&cv, &cu); - FP16_copy(&cu, &t); - } - else if (BIG_parity(d) == 1) - { - BIG_copy(w, e); - BIG_copy(e, d); - BIG_sub(w, w, d); - BIG_norm(w); - BIG_copy(d, w); - BIG_shr(d, 1); - FP16_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP16_conj(&cumv, &cumv); - FP16_xtr_D(&cum2v, &cu); - FP16_conj(&cum2v, &cum2v); - FP16_xtr_D(&cu, &cv); - FP16_copy(&cv, &t); - } - else - { - BIG_shr(d, 1); - FP16_conj(r, &cum2v); - FP16_xtr_A(&t, &cu, &cumv, &cv, r); - FP16_xtr_D(&cum2v, &cumv); - FP16_copy(&cumv, &t); - FP16_xtr_D(&cu, &cu); - } - } - } - FP16_xtr_A(r, &cu, &cv, &cumv, &cum2v); - for (i = 0; i < f2; i++) FP16_xtr_D(r, r); - FP16_xtr_pow(r, r, d); -} - -#endif -*/ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2.cpp deleted file mode 100644 index 4c8fc67..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2.cpp +++ /dev/null @@ -1,527 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^2 functions */ -/* SU=m, m is Stack Usage (no lazy )*/ - -/* FP2 elements are of the form a+ib, where i is sqrt(-1) */ - -#include "fp2_YYY.h" - -//namespace YYY { -//extern int fp2muls; -//extern int fp2sqrs; -//} - -using namespace XXX; - -/* test x==0 ? */ -/* SU= 8 */ -int YYY::FP2_iszilch(FP2 *x) -{ - return (FP_iszilch(&(x->a)) & FP_iszilch(&(x->b))); -} - -/* Move g to f if d=1 */ -void YYY::FP2_cmove(FP2 *f, FP2 *g, int d) -{ - FP_cmove(&(f->a), &(g->a), d); - FP_cmove(&(f->b), &(g->b), d); -} - -/* test x==1 ? */ -/* SU= 48 */ -int YYY::FP2_isunity(FP2 *x) -{ - FP one; - FP_one(&one); - return (FP_equals(&(x->a), &one) & FP_iszilch(&(x->b))); -} - -/* SU= 8 */ -/* Fully reduce a and b mod Modulus */ -void YYY::FP2_reduce(FP2 *w) -{ - FP_reduce(&(w->a)); - FP_reduce(&(w->b)); -} - -/* return 1 if x==y, else 0 */ -/* SU= 16 */ -int YYY::FP2_equals(FP2 *x, FP2 *y) -{ - return (FP_equals(&(x->a), &(y->a)) & FP_equals(&(x->b), &(y->b))); -} - -// Is x lexically larger than p-x? -// return -1 for no, 0 if x=0, 1 for yes -int YYY::FP2_islarger(FP2 *x) -{ - int cmp; - if (FP2_iszilch(x)) return 0; - cmp=FP_islarger(&(x->b)); - if (cmp!=0) return cmp; - return FP_islarger(&(x->a)); -} - -void YYY::FP2_toBytes(char *b,FP2 *x) -{ - FP_toBytes(b,&(x->b)); - FP_toBytes(&b[MODBYTES_XXX],&(x->a)); -} - -void YYY::FP2_fromBytes(FP2 *x,char *b) -{ - FP_fromBytes(&(x->b),b); - FP_fromBytes(&(x->a),&b[MODBYTES_XXX]); -} - -/* Create FP2 from two FPs */ -/* SU= 16 */ -void YYY::FP2_from_FPs(FP2 *w, FP *x, FP *y) -{ - FP_copy(&(w->a), x); - FP_copy(&(w->b), y); -} - -/* Create FP2 from two BIGS */ -/* SU= 16 */ -void YYY::FP2_from_BIGs(FP2 *w, BIG x, BIG y) -{ - FP_nres(&(w->a), x); - FP_nres(&(w->b), y); -} - -/* Create FP2 from two ints */ -void YYY::FP2_from_ints(FP2 *w, int xa, int xb) -{ - FP a,b; - FP_from_int(&a,xa); - FP_from_int(&b,xb); - FP2_from_FPs(w,&a,&b); -} - -/* Create FP2 from FP */ -/* SU= 8 */ -void YYY::FP2_from_FP(FP2 *w, FP *x) -{ - FP_copy(&(w->a), x); - FP_zero(&(w->b)); -} - -/* Create FP2 from BIG */ -/* SU= 8 */ -void YYY::FP2_from_BIG(FP2 *w, BIG x) -{ - FP_nres(&(w->a), x); - FP_zero(&(w->b)); -} - -/* FP2 copy w=x */ -/* SU= 16 */ -void YYY::FP2_copy(FP2 *w, FP2 *x) -{ - if (w == x) return; - FP_copy(&(w->a), &(x->a)); - FP_copy(&(w->b), &(x->b)); -} - -/* FP2 set w=0 */ -/* SU= 8 */ -void YYY::FP2_zero(FP2 *w) -{ - FP_zero(&(w->a)); - FP_zero(&(w->b)); -} - -/* FP2 set w=1 */ -/* SU= 48 */ -void YYY::FP2_one(FP2 *w) -{ - FP one; - FP_one(&one); - FP2_from_FP(w, &one); -} - -void YYY::FP2_rcopy(FP2 *w,const BIG a,const BIG b) -{ - FP_rcopy(&(w->a),a); - FP_rcopy(&(w->b),b); -} - -int YYY::FP2_sign(FP2 *w) -{ - int p1,p2; - p1=FP_sign(&(w->a)); - p2=FP_sign(&(w->b)); -#ifdef BIG_ENDIAN_SIGN_YYY - p2 ^= (p1 ^ p2)&FP_iszilch(&(w->b)); - return p2; -#else - p1 ^= (p1 ^ p2)&FP_iszilch(&(w->a)); - return p1; -#endif - -} - -/* Set w=-x */ -/* SU= 88 */ -void YYY::FP2_neg(FP2 *w, FP2 *x) -{ - /* Just one neg! */ - FP m, t; - FP_add(&m, &(x->a), &(x->b)); - FP_neg(&m, &m); - FP_add(&t, &m, &(x->b)); - FP_add(&(w->b), &m, &(x->a)); - FP_copy(&(w->a), &t); - -} - -/* Set w=conj(x) */ -/* SU= 16 */ -void YYY::FP2_conj(FP2 *w, FP2 *x) -{ - FP_copy(&(w->a), &(x->a)); - FP_neg(&(w->b), &(x->b)); - FP_norm(&(w->b)); -} - -/* Set w=x+y */ -/* SU= 16 */ -void YYY::FP2_add(FP2 *w, FP2 *x, FP2 *y) -{ - FP_add(&(w->a), &(x->a), &(y->a)); - FP_add(&(w->b), &(x->b), &(y->b)); -} - -/* Set w=x-y */ -/* Input y MUST be normed */ -void YYY::FP2_sub(FP2 *w, FP2 *x, FP2 *y) -{ - FP2 m; - FP2_neg(&m, y); - FP2_add(w, x, &m); -} - -/* Set w=s*x, where s is FP */ -/* SU= 16 */ -void YYY::FP2_pmul(FP2 *w, FP2 *x, FP *s) -{ - FP_mul(&(w->a), &(x->a), s); - FP_mul(&(w->b), &(x->b), s); -} - -/* SU= 16 */ -/* Set w=s*x, where s is int */ -void YYY::FP2_imul(FP2 *w, FP2 *x, int s) -{ - FP_imul(&(w->a), &(x->a), s); - FP_imul(&(w->b), &(x->b), s); -} - -/* Set w=x^2 */ -/* SU= 128 */ -void YYY::FP2_sqr(FP2 *w, FP2 *x) -{ - FP w1, w3, mb; - - FP_add(&w1, &(x->a), &(x->b)); - FP_neg(&mb, &(x->b)); - - FP_add(&w3, &(x->a), &(x->a)); - FP_norm(&w3); - FP_mul(&(w->b), &w3, &(x->b)); - - FP_add(&(w->a), &(x->a), &mb); - - FP_norm(&w1); - FP_norm(&(w->a)); - - FP_mul(&(w->a), &w1, &(w->a)); /* w->a#2 w->a=1 w1&w2=6 w1*w2=2 */ - -// YYY::fp2sqrs++; -} - - -/* Set w=x*y */ -/* Inputs MUST be normed */ -/* Now uses Lazy reduction */ -void YYY::FP2_mul(FP2 *w, FP2 *x, FP2 *y) -{ - DBIG A, B, E, F, pR; - BIG C, D, p; - - BIG_rcopy(p, Modulus); - BIG_dsucopy(pR, p); - -// reduce excesses of a and b as required (so product < pR) - - if ((sign64)(x->a.XES + x->b.XES) * (y->a.XES + y->b.XES) > (sign64)FEXCESS_YYY) - { -#ifdef DEBUG_REDUCE - printf("FP2 Product too large - reducing it\n"); -#endif - if (x->a.XES > 1) FP_reduce(&(x->a)); - if (x->b.XES > 1) FP_reduce(&(x->b)); - } - - BIG_mul(A, x->a.g, y->a.g); - BIG_mul(B, x->b.g, y->b.g); - - BIG_add(C, x->a.g, x->b.g); BIG_norm(C); - BIG_add(D, y->a.g, y->b.g); BIG_norm(D); - - BIG_mul(E, C, D); - BIG_dadd(F, A, B); - BIG_dsub(B, pR, B); // - - BIG_dadd(A, A, B); // Aa.g, A); w->a.XES = 3; // may drift above 2p... - BIG_dnorm(E); FP_mod(w->b.g, E); w->b.XES = 2; - -// YYY::fp2muls++; -} - -/* output FP2 in hex format [a,b] */ -/* SU= 16 */ -void YYY::FP2_output(FP2 *w) -{ - BIG bx, by; - FP2_reduce(w); - FP_redc(bx, &(w->a)); - FP_redc(by, &(w->b)); - printf("["); - BIG_output(bx); - printf(","); - BIG_output(by); - printf("]"); - FP_nres(&(w->a), bx); - FP_nres(&(w->b), by); -} - -/* SU= 8 */ -void YYY::FP2_rawoutput(FP2 *w) -{ - printf("["); - BIG_rawoutput(w->a.g); - printf(","); - BIG_rawoutput(w->b.g); - printf("]"); -} - - -/* Set w=1/x */ -/* SU= 128 */ -void YYY::FP2_inv(FP2 *w, FP2 *x, FP *h) -{ - FP w1, w2; - - FP2_norm(x); - FP_sqr(&w1, &(x->a)); - FP_sqr(&w2, &(x->b)); - FP_add(&w1, &w1, &w2); - FP_inv(&w1, &w1, h); - FP_mul(&(w->a), &(x->a), &w1); - FP_neg(&w1, &w1); - FP_norm(&w1); - FP_mul(&(w->b), &(x->b), &w1); -} - - -/* Set w=x/2 */ -/* SU= 16 */ -void YYY::FP2_div2(FP2 *w, FP2 *x) -{ - FP_div2(&(w->a), &(x->a)); - FP_div2(&(w->b), &(x->b)); -} - -/* Input MUST be normed */ -void YYY::FP2_times_i(FP2 *w) -{ - FP z; - FP_copy(&z, &(w->a)); - FP_neg(&(w->a), &(w->b)); - FP_copy(&(w->b), &z); - -// Output NOT normed, so use with care -} - -/* Set w*=(2^i+sqrt(-1)) */ -/* where X^2-(2^i+sqrt(-1)) is irreducible for FP4 */ - -/* Input MUST be normed */ -void YYY::FP2_mul_ip(FP2 *w) -{ - FP2 t; - int i = QNRI_YYY; - - FP2_copy(&t, w); - FP2_times_i(w); - -// add 2^i.t - while (i > 0) - { - FP2_add(&t, &t, &t); - FP2_norm(&t); - i--; - } - FP2_add(w, &t, w); - -#if TOWER_YYY == POSITOWER - FP2_norm(w); - FP2_neg(w, w); // *** -#endif - -// Output NOT normed, so use with care -} - -/* Set w/=(2^i+sqrt(-1)) */ -/* Slow */ -void YYY::FP2_div_ip(FP2 *w) -{ - FP2 z; - FP2_norm(w); - FP2_from_ints(&z, (1 << QNRI_YYY), 1); - FP2_inv(&z, &z, NULL); - FP2_mul(w, &z, w); -#if TOWER_YYY == POSITOWER - FP2_neg(w, w); // *** -#endif -} - -/* SU= 8 */ -/* normalise a and b components of w */ -void YYY::FP2_norm(FP2 *w) -{ - FP_norm(&(w->a)); - FP_norm(&(w->b)); -} - -/* Set w=a^b mod m */ -/* SU= 208 */ -/* -void YYY::FP2_pow(FP2 *r, FP2* a, BIG b) -{ - FP2 w; - FP one; - BIG z, zilch; - int bt; - - BIG_norm(b); - BIG_copy(z, b); - FP2_copy(&w, a); - FP_one(&one); - BIG_zero(zilch); - FP2_from_FP(r, &one); - while (1) - { - bt = BIG_parity(z); - BIG_shr(z, 1); - if (bt) FP2_mul(r, r, &w); - if (BIG_comp(z, zilch) == 0) break; - FP2_sqr(&w, &w); - } - FP2_reduce(r); -} */ - -/* test for x a QR */ -int YYY::FP2_qr(FP2 *x,FP *h) -{ /* test x^(p^2-1)/2 = 1 */ - - FP2 c; - FP2_conj(&c,x); - FP2_mul(&c,&c,x); - - return FP_qr(&(c.a),h); -} - -/* sqrt(a+ib) = sqrt(a+sqrt(a*a-n*b*b))/2+ib/(2*sqrt(a+sqrt(a*a-n*b*b))/2) */ - -void YYY::FP2_sqrt(FP2 *w, FP2 *u, FP *h) -{ - FP w1, w2, w3, w4, hint; - FP2 nw; - int sgn,qr; - FP2_copy(w, u); - if (FP2_iszilch(w)) return; - - FP_sqr(&w1, &(w->b)); // b^2 - FP_sqr(&w2, &(w->a)); // a^2 - FP_add(&w1, &w1, &w2); FP_norm(&w1); // a^2+b^2 - - FP_sqrt(&w1, &w1, h); // sqrt(a^2+b^2) - could use an input hint to avoid exp! - - FP_add(&w2, &(w->a), &w1); // a+sqrt(a^2+b^2) - FP_norm(&w2); - FP_div2(&w2, &w2); // w2=(a+sqrt(a^2+b^2))/2 -// ** - FP_div2(&w1,&(w->b)); // w1=b/2 - qr=FP_qr(&w2,&hint); // only exp! - -// tweak hint - FP_neg(&w3,&hint); FP_norm(&w3); // QNR = -1 - FP_neg(&w4,&w2); FP_norm(&w4); - - FP_cmove(&w2,&w4,1-qr); - FP_cmove(&hint,&w3,1-qr); - - FP_sqrt(&(w->a),&w2,&hint); // a=sqrt(w2) - FP_inv(&w3,&w2,&hint); // w3=1/w2 - FP_mul(&w3,&w3,&(w->a)); // w3=1/sqrt(w2) - FP_mul(&(w->b),&w3,&w1); // b=(b/2)*1/sqrt(w2) - FP_copy(&w4,&(w->a)); - - FP_cmove(&(w->a),&(w->b),1-qr); - FP_cmove(&(w->b),&w4,1-qr); - - -/* - - FP_sqrt(&(w->a),&w2,&hint); // a=sqrt(w2) - FP_inv(&w3,&w2,&hint); // w3=1/w2 - FP_mul(&w3,&w3,&(w->a)); // w3=1/sqrt(w2) - FP_mul(&(w->b),&w3,&w1); // b=(b/2)*1/sqrt(w2) - -// tweak hint - FP_neg(&hint,&hint); FP_norm(&hint); // QNR = -1 - FP_neg(&w2,&w2); FP_norm(&w2); - - FP_sqrt(&w4,&w2,&hint); // w4=sqrt(w2) - FP_inv(&w3,&w2,&hint); // w3=1/w2 - FP_mul(&w3,&w3,&w4); // w3=1/sqrt(w2) - FP_mul(&w3,&w3,&w1); // w3=(b/2)*1/sqrt(w2) - - FP_cmove(&(w->a),&w3,1-qr); - FP_cmove(&(w->b),&w4,1-qr); -*/ -// return +ve root - sgn=FP2_sign(w); - FP2_neg(&nw,w); FP2_norm(&nw); - FP2_cmove(w,&nw,sgn); -} - -void YYY::FP2_rand(FP2 *x,csprng *rng) -{ - FP_rand(&(x->a),rng); - FP_rand(&(x->b),rng); -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24.cpp deleted file mode 100644 index 5c821dc..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24.cpp +++ /dev/null @@ -1,1018 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^24 functions */ -/* SU=m, m is Stack Usage (no lazy )*/ -/* FP24 elements are of the form a+i.b+i^2.c */ - -#include "fp24_YYY.h" -#include "config_curve_ZZZ.h" - -using namespace XXX; - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} - - -/* Constant time select from pre-computed table */ -static void FP24_select(YYY::FP24 *f, YYY::FP24 g[], sign32 b) -{ - YYY::FP24 invf; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - FP24_cmove(f, &g[0], teq(babs, 0)); // conditional move - FP24_cmove(f, &g[1], teq(babs, 1)); - FP24_cmove(f, &g[2], teq(babs, 2)); - FP24_cmove(f, &g[3], teq(babs, 3)); - FP24_cmove(f, &g[4], teq(babs, 4)); - FP24_cmove(f, &g[5], teq(babs, 5)); - FP24_cmove(f, &g[6], teq(babs, 6)); - FP24_cmove(f, &g[7], teq(babs, 7)); - - FP24_copy(&invf, f); - FP24_conj(&invf, &invf); // 1/f - FP24_cmove(f, &invf, (int)(m & 1)); -} - -/* test x==0 ? */ -/* SU= 8 */ -int YYY::FP24_iszilch(FP24 *x) -{ - if (FP8_iszilch(&(x->a)) && FP8_iszilch(&(x->b)) && FP8_iszilch(&(x->c))) return 1; - return 0; -} - -/* test x==1 ? */ -/* SU= 8 */ -int YYY::FP24_isunity(FP24 *x) -{ - if (FP8_isunity(&(x->a)) && FP8_iszilch(&(x->b)) && FP8_iszilch(&(x->c))) return 1; - return 0; -} - -/* FP24 copy w=x */ -/* SU= 16 */ -void YYY::FP24_copy(FP24 *w, FP24 *x) -{ - if (x == w) return; - FP8_copy(&(w->a), &(x->a)); - FP8_copy(&(w->b), &(x->b)); - FP8_copy(&(w->c), &(x->c)); - w->type = x->type; -} - -/* FP24 w=1 */ -/* SU= 8 */ -void YYY::FP24_one(FP24 *w) -{ - FP8_one(&(w->a)); - FP8_zero(&(w->b)); - FP8_zero(&(w->c)); - w->type = FP_UNITY; - -} - -void YYY::FP24_zero(FP24 *w) -{ - FP8_zero(&(w->a)); - FP8_zero(&(w->b)); - FP8_zero(&(w->c)); - w->type = FP_ZILCH; - -} - -/* return 1 if x==y, else 0 */ -/* SU= 16 */ -int YYY::FP24_equals(FP24 *x, FP24 *y) -{ - if (FP8_equals(&(x->a), &(y->a)) && FP8_equals(&(x->b), &(y->b)) && FP8_equals(&(x->c), &(y->c))) - return 1; - return 0; -} - -/* Set w=conj(x) */ -/* SU= 8 */ -void YYY::FP24_conj(FP24 *w, FP24 *x) -{ - FP24_copy(w, x); - FP8_conj(&(w->a), &(w->a)); - FP8_nconj(&(w->b), &(w->b)); - FP8_conj(&(w->c), &(w->c)); -} - -/* Create FP24 from FP8 */ -/* SU= 8 */ -void YYY::FP24_from_FP8(FP24 *w, FP8 *a) -{ - FP8_copy(&(w->a), a); - FP8_zero(&(w->b)); - FP8_zero(&(w->c)); - w->type = FP_SPARSEST; -} - -/* Create FP24 from 3 FP8's */ -/* SU= 16 */ -void YYY::FP24_from_FP8s(FP24 *w, FP8 *a, FP8 *b, FP8 *c) -{ - FP8_copy(&(w->a), a); - FP8_copy(&(w->b), b); - FP8_copy(&(w->c), c); - w->type = FP_DENSE; -} - -/* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */ -/* SU= 600 */ -void YYY::FP24_usqr(FP24 *w, FP24 *x) -{ - FP8 A, B, C, D; - - FP8_copy(&A, &(x->a)); - - FP8_sqr(&(w->a), &(x->a)); - FP8_add(&D, &(w->a), &(w->a)); - FP8_add(&(w->a), &D, &(w->a)); - - FP8_norm(&(w->a)); - FP8_nconj(&A, &A); - - FP8_add(&A, &A, &A); - FP8_add(&(w->a), &(w->a), &A); - FP8_sqr(&B, &(x->c)); - FP8_times_i(&B); - - FP8_add(&D, &B, &B); - FP8_add(&B, &B, &D); - FP8_norm(&B); - - FP8_sqr(&C, &(x->b)); - - FP8_add(&D, &C, &C); - FP8_add(&C, &C, &D); - - FP8_norm(&C); - FP8_conj(&(w->b), &(x->b)); - FP8_add(&(w->b), &(w->b), &(w->b)); - FP8_nconj(&(w->c), &(x->c)); - - FP8_add(&(w->c), &(w->c), &(w->c)); - FP8_add(&(w->b), &B, &(w->b)); - FP8_add(&(w->c), &C, &(w->c)); - w->type = FP_DENSE; - - FP24_reduce(w); /* reduce here as in pow function repeated squarings would trigger multiple reductions */ -} - -/* FP24 squaring w=x^2 */ -/* SU= 600 */ -void YYY::FP24_sqr(FP24 *w, FP24 *x) -{ - /* Use Chung-Hasan SQR2 method from http://cacr.uwaterloo.ca/techreports/2006/cacr2006-24.pdf */ - - FP8 A, B, C, D; - - if (x->type <= FP_UNITY) - { - FP24_copy(w, x); - return; - } - - FP8_sqr(&A, &(x->a)); - FP8_mul(&B, &(x->b), &(x->c)); - FP8_add(&B, &B, &B); - FP8_norm(&B); - FP8_sqr(&C, &(x->c)); - - FP8_mul(&D, &(x->a), &(x->b)); - FP8_add(&D, &D, &D); - - FP8_add(&(w->c), &(x->a), &(x->c)); - FP8_add(&(w->c), &(x->b), &(w->c)); - FP8_norm(&(w->c)); - - FP8_sqr(&(w->c), &(w->c)); - - FP8_copy(&(w->a), &A); - FP8_add(&A, &A, &B); - - FP8_norm(&A); - - FP8_add(&A, &A, &C); - FP8_add(&A, &A, &D); - - FP8_norm(&A); - - FP8_neg(&A, &A); - FP8_times_i(&B); - FP8_times_i(&C); - - FP8_add(&(w->a), &(w->a), &B); - FP8_add(&(w->b), &C, &D); - FP8_add(&(w->c), &(w->c), &A); - - if (x->type == FP_SPARSER || x->type == FP_SPARSEST) - w->type = FP_SPARSE; - else - w->type = FP_DENSE; - - FP24_norm(w); -} - -// Use FP24_mul when both multiplicands are dense -// Use FP24smul when it is known that both multiplicands are line functions -// Use FP24ssmul when it is suspected that one or both multiplicands could have some sparsity - - -/* FP24 full multiplication w=w*y */ -void YYY::FP24_mul(FP24 *w, FP24 *y) -{ - FP8 z0, z1, z2, z3, t0, t1; - - FP8_mul(&z0, &(w->a), &(y->a)); - FP8_mul(&z2, &(w->b), &(y->b)); // - - FP8_add(&t0, &(w->a), &(w->b)); - FP8_add(&t1, &(y->a), &(y->b)); // - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&z1, &t0, &t1); - FP8_add(&t0, &(w->b), &(w->c)); - FP8_add(&t1, &(y->b), &(y->c)); // - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&z3, &t0, &t1); - - FP8_neg(&t0, &z0); - FP8_neg(&t1, &z2); - - FP8_add(&z1, &z1, &t0); // z1=z1-z0 - FP8_add(&(w->b), &z1, &t1); // z1=z1-z2 - FP8_add(&z3, &z3, &t1); // z3=z3-z2 - FP8_add(&z2, &z2, &t0); // z2=z2-z0 - - FP8_add(&t0, &(w->a), &(w->c)); - FP8_add(&t1, &(y->a), &(y->c)); - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&t0, &t1, &t0); - FP8_add(&z2, &z2, &t0); - - FP8_mul(&t0, &(w->c), &(y->c)); - FP8_neg(&t1, &t0); - - FP8_add(&(w->c), &z2, &t1); - FP8_add(&z3, &z3, &t1); - FP8_times_i(&t0); - FP8_add(&(w->b), &(w->b), &t0); - FP8_norm(&z3); - FP8_times_i(&z3); - FP8_add(&(w->a), &z0, &z3); - - FP24_norm(w); - w->type = FP_DENSE; -} - -/* FP24 full multiplication w=w*y */ -/* Supports sparse multiplicands */ -/* Usually w is denser than y */ -void YYY::FP24_ssmul(FP24 *w, FP24 *y) -{ - FP8 z0, z1, z2, z3, t0, t1; - if (w->type == FP_UNITY) - { - FP24_copy(w, y); - return; - } - if (y->type == FP_UNITY) - return; - - if (y->type >= FP_SPARSE) - { - FP8_mul(&z0, &(w->a), &(y->a)); // xa.ya always 11x11 - -#if SEXTIC_TWIST_ZZZ == M_TYPE - if (y->type == FP_SPARSE || w->type == FP_SPARSE) - { - FP4_mul(&z2.b, &(w->b).b, &(y->b).b); - FP4_zero(&z2.a); - if (y->type != FP_SPARSE) - FP4_mul(&z2.a, &(w->b).b, &(y->b).a); - if (w->type != FP_SPARSE) - FP4_mul(&z2.a, &(w->b).a, &(y->b).b); - FP8_times_i(&z2); - } - else -#endif - FP8_mul(&z2, &(w->b), &(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 - - FP8_add(&t0, &(w->a), &(w->b)); // (xa+xb) - FP8_add(&t1, &(y->a), &(y->b)); // (ya+yb) - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&z1, &t0, &t1); // (xa+xb)(ya+yb) always 11x11 - FP8_add(&t0, &(w->b), &(w->c)); // (xb+xc) - FP8_add(&t1, &(y->b), &(y->c)); // (yb+yc) - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&z3, &t0, &t1); // (xb+xc)(yb+yc) could be anything... - FP8_neg(&t0, &z0); // -(xa.ya) - FP8_neg(&t1, &z2); // -(xb.yb) - - FP8_add(&z1, &z1, &t0); - FP8_add(&(w->b), &z1, &t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya - - FP8_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - FP8_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) - - FP8_add(&t0, &(w->a), &(w->c)); // (xa+xc) - FP8_add(&t1, &(y->a), &(y->c)); // (ya+yc) - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&t0, &t1, &t0); // (xa+xc)(ya+yc) always 11x11 - FP8_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - -#if SEXTIC_TWIST_ZZZ == D_TYPE - if (y->type == FP_SPARSE || w->type == FP_SPARSE) - { - FP4_mul(&t0.a, &(w->c).a, &(y->c).a); - FP4_zero(&t0.b); - if (y->type != FP_SPARSE) - FP4_mul(&t0.b, &(w->c).a, &(y->c).b); - if (w->type != FP_SPARSE) - FP4_mul(&t0.b, &(w->c).b, &(y->c).a); - } - else -#endif - FP8_mul(&t0, &(w->c), &(y->c)); // (xc.yc) could be anything - - FP8_neg(&t1, &t0); // -(xc.yc) - - FP8_add(&(w->c), &z2, &t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc - FP8_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb - FP8_times_i(&t0); // i.(xc.yc) - FP8_add(&(w->b), &(w->b), &t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc) - FP8_norm(&z3); - FP8_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb) - FP8_add(&(w->a), &z0, &z3); // wa = xa.ya + i(xb.yc + xc.yb) - } else { - if (w->type == FP_SPARSER || w->type == FP_SPARSEST) - { - FP24_smul(w, y); - return; - } -// dense by sparser - 13m -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP8_copy(&z3, &(w->b)); - FP8_mul(&z0, &(w->a), &(y->a)); - - if (y->type == FP_SPARSEST) - FP8_tmul(&z2, &(w->b), &(y->b).a.a.a); - else - FP8_pmul(&z2, &(w->b), &(y->b).a); - - - FP8_add(&(w->b), &(w->a), &(w->b)); - FP8_copy(&t1, &(y->a)); - FP4_add(&t1.a, &t1.a, &(y->b).a); - - FP8_norm(&t1); - FP8_norm(&(w->b)); - - FP8_mul(&(w->b), &(w->b), &t1); - FP8_add(&z3, &z3, &(w->c)); - FP8_norm(&z3); - - if (y->type == FP_SPARSEST) - FP8_tmul(&z3, &z3, &(y->b).a.a.a); - else - FP8_pmul(&z3, &z3, &(y->b).a); - - FP8_neg(&t0, &z0); - FP8_neg(&t1, &z2); - - FP8_add(&(w->b), &(w->b), &t0); // z1=z1-z0 - FP8_add(&(w->b), &(w->b), &t1); // z1=z1-z2 - - FP8_add(&z3, &z3, &t1); // z3=z3-z2 - FP8_add(&z2, &z2, &t0); // z2=z2-z0 - - FP8_add(&t0, &(w->a), &(w->c)); - FP8_norm(&t0); - FP8_norm(&z3); - - FP8_mul(&t0, &(y->a), &t0); - FP8_add(&(w->c), &z2, &t0); - - FP8_times_i(&z3); - FP8_add(&(w->a), &z0, &z3); -#endif -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP8_mul(&z0, &(w->a), &(y->a)); - FP8_add(&t0, &(w->a), &(w->b)); - FP8_norm(&t0); - - FP8_mul(&z1, &t0, &(y->a)); - FP8_add(&t0, &(w->b), &(w->c)); - FP8_norm(&t0); - - - if (y->type == FP_SPARSEST) - FP8_tmul(&z3, &t0, &(y->c).b.a.a); - else - FP8_pmul(&z3, &t0, &(y->c).b); - - - FP8_times_i(&z3); - - FP8_neg(&t0, &z0); - FP8_add(&z1, &z1, &t0); // z1=z1-z0 - - FP8_copy(&(w->b), &z1); - FP8_copy(&z2, &t0); - - FP8_add(&t0, &(w->a), &(w->c)); - FP8_add(&t1, &(y->a), &(y->c)); - - FP8_norm(&t0); - FP8_norm(&t1); - - FP8_mul(&t0, &t1, &t0); - FP8_add(&z2, &z2, &t0); - - if (y->type == FP_SPARSEST) - FP8_tmul(&t0, &(w->c), &(y->c).b.a.a); - else - FP8_pmul(&t0, &(w->c), &(y->c).b); - - - FP8_times_i(&t0); - FP8_neg(&t1, &t0); - FP8_times_i(&t0); - - FP8_add(&(w->c), &z2, &t1); - FP8_add(&z3, &z3, &t1); - - FP8_add(&(w->b), &(w->b), &t0); - FP8_norm(&z3); - FP8_times_i(&z3); - FP8_add(&(w->a), &z0, &z3); -#endif - } - w->type = FP_DENSE; - FP24_norm(w); -} - -/* FP24 multiplication w=w*y */ -/* catering for special case that arises from special form of ATE pairing line function */ -/* w and y are both sparser line functions - cost = 6m */ -void YYY::FP24_smul(FP24 *w, FP24 *y) -{ - FP4 w1, w2, w3, ta, tb, tc, td, te, t; - - -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP4_mul(&w1, &(w->a).a, &(y->a).a); // A1.A2 - FP4_mul(&w2, &(w->a).b, &(y->a).b); // B1.B2 - - if (y->type == FP_SPARSEST || w->type == FP_SPARSEST) - { - if (y->type == FP_SPARSEST && w->type == FP_SPARSEST) - { - FP4_zero(&w3); - FP_mul(&w3.a.a, &(w->b).a.a.a, &(y->b).a.a.a); - } else { - if (y->type != FP_SPARSEST) - FP4_qmul(&w3, &(y->b).a, &(w->b).a.a.a); - if (w->type != FP_SPARSEST) - FP4_qmul(&w3, &(w->b).a, &(y->b).a.a.a); - } - } - else - FP4_mul(&w3, &(w->b).a, &(y->b).a); // C1.C2 - - FP4_add(&ta, &(w->a).a, &(w->a).b); // A1+B1 - FP4_add(&tb, &(y->a).a, &(y->a).b); // A2+B2 - FP4_norm(&ta); - FP4_norm(&tb); - FP4_mul(&tc, &ta, &tb); // (A1+B1)(A2+B2) - FP4_add(&t, &w1, &w2); - FP4_neg(&t, &t); - FP4_add(&tc, &tc, &t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1) - - FP4_add(&ta, &(w->a).a, &(w->b).a); // A1+C1 - FP4_add(&tb, &(y->a).a, &(y->b).a); // A2+C2 - FP4_norm(&ta); - FP4_norm(&tb); - FP4_mul(&td, &ta, &tb); // (A1+C1)(A2+C2) - FP4_add(&t, &w1, &w3); - FP4_neg(&t, &t); - FP4_add(&td, &td, &t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1) - - FP4_add(&ta, &(w->a).b, &(w->b).a); // B1+C1 - FP4_add(&tb, &(y->a).b, &(y->b).a); // B2+C2 - FP4_norm(&ta); - FP4_norm(&tb); - FP4_mul(&te, &ta, &tb); // (B1+C1)(B2+C2) - FP4_add(&t, &w2, &w3); - FP4_neg(&t, &t); - FP4_add(&te, &te, &t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1) - - FP4_times_i(&w2); - FP4_add(&w1, &w1, &w2); - FP8_from_FP4s(&(w->a), &w1, &tc); - FP8_from_FP4s(&(w->b), &td, &te); // only norm these 2 - FP8_from_FP4(&(w->c), &w3); - - FP8_norm(&(w->a)); - FP8_norm(&(w->b)); -#endif -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP4_mul(&w1, &(w->a).a, &(y->a).a); // A1.A2 - FP4_mul(&w2, &(w->a).b, &(y->a).b); // B1.B2 - - if (y->type == FP_SPARSEST || w->type == FP_SPARSEST) - { - if (y->type == FP_SPARSEST && w->type == FP_SPARSEST) - { - FP4_zero(&w3); - FP_mul(&w3.a.a, &(w->c).b.a.a, &(y->c).b.a.a); - } else { - if (y->type != FP_SPARSEST) - FP4_qmul(&w3, &(y->c).b, &(w->c).b.a.a); - if (w->type != FP_SPARSEST) - FP4_qmul(&w3, &(w->c).b, &(y->c).b.a.a); - } - } - else - FP4_mul(&w3, &(w->c).b, &(y->c).b); // F1.F2 - - FP4_add(&ta, &(w->a).a, &(w->a).b); // A1+B1 - FP4_add(&tb, &(y->a).a, &(y->a).b); // A2+B2 - FP4_norm(&ta); - FP4_norm(&tb); - FP4_mul(&tc, &ta, &tb); // (A1+B1)(A2+B2) - FP4_add(&t, &w1, &w2); - FP4_neg(&t, &t); - FP4_add(&tc, &tc, &t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1) - - FP4_add(&ta, &(w->a).a, &(w->c).b); // A1+F1 - FP4_add(&tb, &(y->a).a, &(y->c).b); // A2+F2 - FP4_norm(&ta); - FP4_norm(&tb); - FP4_mul(&td, &ta, &tb); // (A1+F1)(A2+F2) - FP4_add(&t, &w1, &w3); - FP4_neg(&t, &t); - FP4_add(&td, &td, &t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1) - - FP4_add(&ta, &(w->a).b, &(w->c).b); // B1+F1 - FP4_add(&tb, &(y->a).b, &(y->c).b); // B2+F2 - FP4_norm(&ta); - FP4_norm(&tb); - FP4_mul(&te, &ta, &tb); // (B1+F1)(B2+F2) - FP4_add(&t, &w2, &w3); - FP4_neg(&t, &t); - FP4_add(&te, &te, &t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1) - - FP4_times_i(&w2); - FP4_add(&w1, &w1, &w2); - FP8_from_FP4s(&(w->a), &w1, &tc); - - FP4_times_i(&w3); - FP4_norm(&w3); - FP8_from_FP4H(&(w->b), &w3); - - FP4_norm(&te); - FP4_times_i(&te); - FP8_from_FP4s(&(w->c), &te, &td); - - FP8_norm(&(w->a)); - FP8_norm(&(w->c)); -#endif - - w->type = FP_SPARSE; -} - -/* Set w=1/x */ -/* SU= 600 */ -void YYY::FP24_inv(FP24 *w, FP24 *x) -{ - FP8 f0, f1, f2, f3; - - FP8_sqr(&f0, &(x->a)); - FP8_mul(&f1, &(x->b), &(x->c)); - FP8_times_i(&f1); - FP8_sub(&f0, &f0, &f1); /* y.a */ - FP8_norm(&f0); - - FP8_sqr(&f1, &(x->c)); - FP8_times_i(&f1); - FP8_mul(&f2, &(x->a), &(x->b)); - FP8_sub(&f1, &f1, &f2); /* y.b */ - FP8_norm(&f1); - - FP8_sqr(&f2, &(x->b)); - FP8_mul(&f3, &(x->a), &(x->c)); - FP8_sub(&f2, &f2, &f3); /* y.c */ - FP8_norm(&f2); - - FP8_mul(&f3, &(x->b), &f2); - FP8_times_i(&f3); - FP8_mul(&(w->a), &f0, &(x->a)); - FP8_add(&f3, &(w->a), &f3); - FP8_mul(&(w->c), &f1, &(x->c)); - FP8_times_i(&(w->c)); - - FP8_add(&f3, &(w->c), &f3); - FP8_norm(&f3); - - FP8_inv(&f3, &f3, NULL); - FP8_mul(&(w->a), &f0, &f3); - FP8_mul(&(w->b), &f1, &f3); - FP8_mul(&(w->c), &f2, &f3); - w->type = FP_DENSE; -} - -/* constant time powering by small integer of max length bts */ - -void YYY::FP24_pinpow(FP24 *r, int e, int bts) -{ - int i, b; - FP24 R[2]; - - FP24_one(&R[0]); - FP24_copy(&R[1], r); - - for (i = bts - 1; i >= 0; i--) - { - b = (e >> i) & 1; - FP24_mul(&R[1 - b], &R[b]); - FP24_usqr(&R[b], &R[b]); - } - FP24_copy(r, &R[0]); -} - -/* Compressed powering of unitary elements y=x^(e mod r) */ - -/* -void YYY::FP24_compow(FP8 *c, FP24 *x, BIG e, BIG r) -{ - FP24 g1, g2; - FP8 cp, cpm1, cpm2; - FP2 f; - BIG q, a, b, m; - - BIG_rcopy(a, Fra); - BIG_rcopy(b, Frb); - FP2_from_BIGs(&f, a, b); - - BIG_rcopy(q, Modulus); - - FP24_copy(&g1, x); - FP24_copy(&g2, x); - - BIG_copy(m, q); - BIG_mod(m, r); - - BIG_copy(a, e); - BIG_mod(a, m); - - BIG_copy(b, e); - BIG_sdiv(b, m); - - FP24_trace(c, &g1); - - if (BIG_iszilch(b)) - { - FP8_xtr_pow(c, c, e); - return; - } - - FP24_frob(&g2, &f, 1); - FP24_trace(&cp, &g2); - FP24_conj(&g1, &g1); - FP24_mul(&g2, &g1); - FP24_trace(&cpm1, &g2); - FP24_mul(&g2, &g1); - - FP24_trace(&cpm2, &g2); - - FP8_xtr_pow2(c, &cp, c, &cpm1, &cpm2, a, b); - -} -*/ -/* Note this is simple square and multiply, so not side-channel safe */ - -void YYY::FP24_pow(FP24 *r, FP24 *a, BIG b) -{ - FP24 w, sf; - BIG b1, b3; - int i, nb, bt; - BIG_copy(b1, b); - BIG_norm(b1); - BIG_pmul(b3, b1, 3); - BIG_norm(b3); - - FP24_copy(&sf, a); - FP24_norm(&sf); - FP24_copy(&w, &sf); - - if (BIG_iszilch(b3)) - { - FP24_one(r); - return; - } - - nb = BIG_nbits(b3); - for (i = nb - 2; i >= 1; i--) - { - FP24_usqr(&w, &w); - bt = BIG_bit(b3, i) - BIG_bit(b1, i); - if (bt == 1) - FP24_mul(&w, &sf); - if (bt == -1) - { - FP24_conj(&sf, &sf); - FP24_mul(&w, &sf); - FP24_conj(&sf, &sf); - } - } - - FP24_copy(r, &w); - FP24_reduce(r); -} - -/* p=q0^u0.q1^u1.q2^u2.q3^u3... */ -/* Side channel attack secure */ -// Bos & Costello https://eprint.iacr.org/2013/458.pdf -// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf - -void YYY::FP24_pow8(FP24 *p, FP24 *q, BIG u[8]) -{ - int i, j, k, nb, pb1, pb2, bt; - FP24 g1[8], g2[8], r; - BIG t[8], mt; - sign8 w1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w2[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s2[NLEN_XXX * BASEBITS_XXX + 1]; -// FP fx,fy; -// FP2 X; - /* - FP_rcopy(&fx,Fra); - FP_rcopy(&fy,Frb); - FP2_from_FPs(&X,&fx,&fy); - */ - for (i = 0; i < 8; i++) - BIG_copy(t[i], u[i]); - -// Precomputed table - FP24_copy(&g1[0], &q[0]); // q[0] - FP24_copy(&g1[1], &g1[0]); - FP24_mul(&g1[1], &q[1]); // q[0].q[1] - FP24_copy(&g1[2], &g1[0]); - FP24_mul(&g1[2], &q[2]); // q[0].q[2] - FP24_copy(&g1[3], &g1[1]); - FP24_mul(&g1[3], &q[2]); // q[0].q[1].q[2] - FP24_copy(&g1[4], &g1[0]); - FP24_mul(&g1[4], &q[3]); // q[0].q[3] - FP24_copy(&g1[5], &g1[1]); - FP24_mul(&g1[5], &q[3]); // q[0].q[1].q[3] - FP24_copy(&g1[6], &g1[2]); - FP24_mul(&g1[6], &q[3]); // q[0].q[2].q[3] - FP24_copy(&g1[7], &g1[3]); - FP24_mul(&g1[7], &q[3]); // q[0].q[1].q[2].q[3] - - FP24_copy(&g2[0], &q[4]); // q[0] - FP24_copy(&g2[1], &g2[0]); - FP24_mul(&g2[1], &q[5]); // q[0].q[1] - FP24_copy(&g2[2], &g2[0]); - FP24_mul(&g2[2], &q[6]); // q[0].q[2] - FP24_copy(&g2[3], &g2[1]); - FP24_mul(&g2[3], &q[6]); // q[0].q[1].q[2] - FP24_copy(&g2[4], &g2[0]); - FP24_mul(&g2[4], &q[7]); // q[0].q[3] - FP24_copy(&g2[5], &g2[1]); - FP24_mul(&g2[5], &q[7]); // q[0].q[1].q[3] - FP24_copy(&g2[6], &g2[2]); - FP24_mul(&g2[6], &q[7]); // q[0].q[2].q[3] - FP24_copy(&g2[7], &g2[3]); - FP24_mul(&g2[7], &q[7]); // q[0].q[1].q[2].q[3] - -// Use Frobenius - /* - for (i=0;i<8;i++) - { - FP24_copy(&g2[i],&g1[i]); - FP24_frob(&g2[i],&X,4); - } - */ -// Make it odd - pb1 = 1 - BIG_parity(t[0]); - BIG_inc(t[0], pb1); - BIG_norm(t[0]); - - pb2 = 1 - BIG_parity(t[4]); - BIG_inc(t[4], pb2); - BIG_norm(t[4]); - -// Number of bits - BIG_zero(mt); - for (i = 0; i < 8; i++) - { - BIG_or(mt, mt, t[i]); - } - nb = 1 + BIG_nbits(mt); - -// Sign pivot - s1[nb - 1] = 1; - s2[nb - 1] = 1; - for (i = 0; i < nb - 1; i++) - { - BIG_fshr(t[0], 1); - s1[i] = 2 * BIG_parity(t[0]) - 1; - BIG_fshr(t[4], 1); - s2[i] = 2 * BIG_parity(t[4]) - 1; - } - -// Recoded exponents - for (i = 0; i < nb; i++) - { - w1[i] = 0; - k = 1; - for (j = 1; j < 4; j++) - { - bt = s1[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w1[i] += bt * k; - k *= 2; - } - - w2[i] = 0; - k = 1; - for (j = 5; j < 8; j++) - { - bt = s2[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w2[i] += bt * k; - k *= 2; - } - } - -// Main loop - FP24_select(p, g1, 2 * w1[nb - 1] + 1); - FP24_select(&r, g2, 2 * w2[nb - 1] + 1); - FP24_mul(p, &r); - for (i = nb - 2; i >= 0; i--) - { - FP24_usqr(p, p); - FP24_select(&r, g1, 2 * w1[i] + s1[i]); - FP24_mul(p, &r); - FP24_select(&r, g2, 2 * w2[i] + s2[i]); - FP24_mul(p, &r); - } - -// apply correction - FP24_conj(&r, &q[0]); - FP24_mul(&r, p); - FP24_cmove(p, &r, pb1); - FP24_conj(&r, &q[4]); - FP24_mul(&r, p); - FP24_cmove(p, &r, pb2); - - FP24_reduce(p); -} - -/* Set w=w^p using Frobenius */ -/* SU= 160 */ -void YYY::FP24_frob(FP24 *w, FP2 *f, int n) -{ - int i; - FP4 X2, X4; - FP2 f3, f2; // f=(1+i)^(p-7)/12 - FP2_sqr(&f2, f); // - FP2_mul(&f3, &f2, f); // f3=f^3=(1+i)^(p-7)/4 - - FP2_mul_ip(&f3); // f3 = (1+i).f3 = (1+i)^(p-3)/4 - FP2_norm(&f3); - - for (i = 0; i < n; i++) - { - FP8_frob(&(w->a), &f3); // a=a^p - FP8_frob(&(w->b), &f3); // b=b^p - FP8_frob(&(w->c), &f3); // c=c^p - - FP8_qmul(&(w->b), &(w->b), f); FP8_times_i2(&(w->b)); - FP8_qmul(&(w->c), &(w->c), &f2); FP8_times_i2(&(w->c)); FP8_times_i2(&(w->c)); - } - w->type = FP_DENSE; -} - - -/* SU= 8 */ -/* normalise all components of w */ -void YYY::FP24_norm(FP24 *w) -{ - FP8_norm(&(w->a)); - FP8_norm(&(w->b)); - FP8_norm(&(w->c)); -} - -/* SU= 8 */ -/* reduce all components of w */ -void YYY::FP24_reduce(FP24 *w) -{ - FP8_reduce(&(w->a)); - FP8_reduce(&(w->b)); - FP8_reduce(&(w->c)); -} - -/* trace function w=trace(x) */ -/* SU= 8 */ -void YYY::FP24_trace(FP8 *w, FP24 *x) -{ - FP8_imul(w, &(x->a), 3); - FP8_reduce(w); -} - -/* SU= 8 */ -/* Output w in hex */ -void YYY::FP24_output(FP24 *w) -{ - printf("["); - FP8_output(&(w->a)); - printf(","); - FP8_output(&(w->b)); - printf(","); - FP8_output(&(w->c)); - printf("]"); -} - -/* SU= 64 */ -/* Convert g to octet string w */ -void YYY::FP24_toOctet(octet *W, FP24 *g) -{ - W->len = 24 * MODBYTES_XXX; - FP8_toBytes(&(W->val[0]),&(g->c)); - FP8_toBytes(&(W->val[8 * MODBYTES_XXX]),&(g->b)); - FP8_toBytes(&(W->val[16 * MODBYTES_XXX]),&(g->a)); -} - -/* SU= 24 */ -/* Restore g from octet string w */ -void YYY::FP24_fromOctet(FP24 *g, octet *W) -{ - FP8_fromBytes(&(g->c),&(W->val[0])); - FP8_fromBytes(&(g->b),&(W->val[8 * MODBYTES_XXX])); - FP8_fromBytes(&(g->a),&(W->val[16 * MODBYTES_XXX])); -} - -/* Move b to a if d=1 */ -void YYY::FP24_cmove(FP24 *f, FP24 *g, int d) -{ - FP8_cmove(&(f->a), &(g->a), d); - FP8_cmove(&(f->b), &(g->b), d); - FP8_cmove(&(f->c), &(g->c), d); - d = ~(d - 1); - f->type ^= (f->type ^ g->type)&d; -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4.cpp deleted file mode 100644 index 2b0650e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4.cpp +++ /dev/null @@ -1,729 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^4 functions */ -/* SU=m, m is Stack Usage (no lazy )*/ - -/* FP4 elements are of the form a+ib, where i is sqrt(-1+sqrt(-1)) */ - -#include "fp4_YYY.h" - -using namespace XXX; - -/* test x==0 ? */ -/* SU= 8 */ -int YYY::FP4_iszilch(FP4 *x) -{ - return (FP2_iszilch(&(x->a)) & FP2_iszilch(&(x->b))); -} - -/* test x==1 ? */ -/* SU= 8 */ -int YYY::FP4_isunity(FP4 *x) -{ - return (FP2_isunity(&(x->a)) & FP2_iszilch(&(x->b))); -} - -/* test is w real? That is in a+ib test b is zero */ -int YYY::FP4_isreal(FP4 *w) -{ - return FP2_iszilch(&(w->b)); -} - - -// Is x lexically larger than p-x? -// return -1 for no, 0 if x=0, 1 for yes -int YYY::FP4_islarger(FP4 *x) -{ - int cmp; - if (FP4_iszilch(x)) return 0; - cmp=FP2_islarger(&(x->b)); - if (cmp!=0) return cmp; - return FP2_islarger(&(x->a)); -} - -void YYY::FP4_toBytes(char *b,FP4 *x) -{ - FP2_toBytes(b,&(x->b)); - FP2_toBytes(&b[2*MODBYTES_XXX],&(x->a)); -} - -void YYY::FP4_fromBytes(FP4 *x,char *b) -{ - FP2_fromBytes(&(x->b),b); - FP2_fromBytes(&(x->a),&b[2*MODBYTES_XXX]); -} - -/* return 1 if x==y, else 0 */ -/* SU= 16 */ -int YYY::FP4_equals(FP4 *x, FP4 *y) -{ - return (FP2_equals(&(x->a), &(y->a)) & FP2_equals(&(x->b), &(y->b))); -} - -/* set FP4 from two FP2s */ -/* SU= 16 */ -void YYY::FP4_from_FP2s(FP4 *w, FP2 * x, FP2* y) -{ - FP2_copy(&(w->a), x); - FP2_copy(&(w->b), y); -} - -/* set FP4 from FP2 */ -/* SU= 8 */ -void YYY::FP4_from_FP2(FP4 *w, FP2 *x) -{ - FP2_copy(&(w->a), x); - FP2_zero(&(w->b)); -} - -/* set high part of FP4 from FP2 */ -/* SU= 8 */ -void YYY::FP4_from_FP2H(FP4 *w, FP2 *x) -{ - FP2_copy(&(w->b), x); - FP2_zero(&(w->a)); -} - -/* set FP4 from FP */ -void YYY::FP4_from_FP(FP4 *w, FP *x) -{ - FP2 t; - FP2_from_FP(&t, x); - FP4_from_FP2(w, &t); -} - -/* FP4 copy w=x */ -/* SU= 16 */ -void YYY::FP4_copy(FP4 *w, FP4 *x) -{ - if (w == x) return; - FP2_copy(&(w->a), &(x->a)); - FP2_copy(&(w->b), &(x->b)); -} - -/* FP4 w=0 */ -/* SU= 8 */ -void YYY::FP4_zero(FP4 *w) -{ - FP2_zero(&(w->a)); - FP2_zero(&(w->b)); -} - -/* FP4 w=1 */ -/* SU= 8 */ -void YYY::FP4_one(FP4 *w) -{ - FP2_one(&(w->a)); - FP2_zero(&(w->b)); -} - -int YYY::FP4_sign(FP4 *w) -{ - int p1,p2; - p1=FP2_sign(&(w->a)); - p2=FP2_sign(&(w->b)); -#ifdef BIG_ENDIAN_SIGN_YYY - p2 ^= (p1 ^ p2)&FP2_iszilch(&(w->b)); - return p2; -#else - p1 ^= (p1 ^ p2)&FP2_iszilch(&(w->a)); - return p1; -#endif - -} - -/* Set w=-x */ -/* SU= 160 */ -void YYY::FP4_neg(FP4 *w, FP4 *x) -{ - /* Just one field neg */ - FP2 m, t; - FP4_norm(x); - - FP2_add(&m, &(x->a), &(x->b)); - FP2_neg(&m, &m); - FP2_add(&t, &m, &(x->b)); - FP2_add(&(w->b), &m, &(x->a)); - FP2_copy(&(w->a), &t); - FP4_norm(w); -} - -/* Set w=conj(x) */ -/* SU= 16 */ -void YYY::FP4_conj(FP4 *w, FP4 *x) -{ - FP2_copy(&(w->a), &(x->a)); - FP2_neg(&(w->b), &(x->b)); - FP4_norm(w); -} - -/* Set w=-conj(x) */ -/* SU= 16 */ -void YYY::FP4_nconj(FP4 *w, FP4 *x) -{ - FP2_copy(&(w->b), &(x->b)); - FP2_neg(&(w->a), &(x->a)); - FP4_norm(w); -} - -/* Set w=x+y */ -/* SU= 16 */ -void YYY::FP4_add(FP4 *w, FP4 *x, FP4 *y) -{ - FP2_add(&(w->a), &(x->a), &(y->a)); - FP2_add(&(w->b), &(x->b), &(y->b)); -} - -/* Set w=x-y */ -/* Input y MUST be normed */ -void YYY::FP4_sub(FP4 *w, FP4 *x, FP4 *y) -{ - FP4 my; - FP4_neg(&my, y); - FP4_add(w, x, &my); -} -/* SU= 8 */ -/* reduce all components of w mod Modulus */ -void YYY::FP4_reduce(FP4 *w) -{ - FP2_reduce(&(w->a)); - FP2_reduce(&(w->b)); -} - -/* SU= 8 */ -/* normalise all elements of w */ -void YYY::FP4_norm(FP4 *w) -{ - FP2_norm(&(w->a)); - FP2_norm(&(w->b)); -} - -/* Set w=s*x, where s is FP2 */ -/* SU= 16 */ -void YYY::FP4_pmul(FP4 *w, FP4 *x, FP2 *s) -{ - FP2_mul(&(w->a), &(x->a), s); - FP2_mul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is FP */ -void YYY::FP4_qmul(FP4 *w, FP4 *x, FP *s) -{ - FP2_pmul(&(w->a), &(x->a), s); - FP2_pmul(&(w->b), &(x->b), s); -} - -/* SU= 16 */ -/* Set w=s*x, where s is int */ -void YYY::FP4_imul(FP4 *w, FP4 *x, int s) -{ - FP2_imul(&(w->a), &(x->a), s); - FP2_imul(&(w->b), &(x->b), s); -} - -/* Set w=x^2 */ -/* Input MUST be normed */ -void YYY::FP4_sqr(FP4 *w, FP4 *x) -{ - FP2 t1, t2, t3; - - FP2_mul(&t3, &(x->a), &(x->b)); /* norms x */ - FP2_copy(&t2, &(x->b)); - FP2_add(&t1, &(x->a), &(x->b)); - FP2_mul_ip(&t2); - - FP2_add(&t2, &(x->a), &t2); - - FP2_norm(&t1); // 2 - FP2_norm(&t2); // 2 - - FP2_mul(&(w->a), &t1, &t2); - - FP2_copy(&t2, &t3); - FP2_mul_ip(&t2); - - FP2_add(&t2, &t2, &t3); - - FP2_norm(&t2); // 2 - FP2_neg(&t2, &t2); - FP2_add(&(w->a), &(w->a), &t2); /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */ - FP2_add(&(w->b), &t3, &t3); /* b=2ab */ - - FP4_norm(w); -} - -/* Set w=x*y */ -/* Inputs MUST be normed */ -void YYY::FP4_mul(FP4 *w, FP4 *x, FP4 *y) -{ - - FP2 t1, t2, t3, t4; - - FP2_mul(&t1, &(x->a), &(y->a)); - - FP2_mul(&t2, &(x->b), &(y->b)); - FP2_add(&t3, &(y->b), &(y->a)); - FP2_add(&t4, &(x->b), &(x->a)); - - FP2_norm(&t4); // 2 - FP2_norm(&t3); // 2 - - FP2_mul(&t4, &t4, &t3); /* (xa+xb)(ya+yb) */ - - FP2_neg(&t3, &t1); // 1 - FP2_add(&t4, &t4, &t3); //t4E=3 - FP2_norm(&t4); - - FP2_neg(&t3, &t2); // 1 - FP2_add(&(w->b), &t4, &t3); //wbE=3 - - FP2_mul_ip(&t2); - FP2_add(&(w->a), &t2, &t1); - - FP4_norm(w); -} - -/* output FP4 in format [a,b] */ -/* SU= 8 */ -void YYY::FP4_output(FP4 *w) -{ - printf("["); - FP2_output(&(w->a)); - printf(","); - FP2_output(&(w->b)); - printf("]"); -} - -/* SU= 8 */ -void YYY::FP4_rawoutput(FP4 *w) -{ - printf("["); - FP2_rawoutput(&(w->a)); - printf(","); - FP2_rawoutput(&(w->b)); - printf("]"); -} - -/* Set w=1/x */ -/* SU= 160 */ -void YYY::FP4_inv(FP4 *w, FP4 *x, FP *h) -{ - FP2 t1, t2; - FP2_sqr(&t1, &(x->a)); - FP2_sqr(&t2, &(x->b)); - FP2_mul_ip(&t2); - FP2_norm(&t2); - FP2_sub(&t1, &t1, &t2); - FP2_inv(&t1, &t1, h); - FP2_mul(&(w->a), &t1, &(x->a)); - FP2_neg(&t1, &t1); - FP2_norm(&t1); - FP2_mul(&(w->b), &t1, &(x->b)); -} - -/* w*=i where i = sqrt(2^i+sqrt(-1)) */ -/* SU= 200 */ -void YYY::FP4_times_i(FP4 *w) -{ - FP2 t; - FP2_copy(&t, &(w->b)); - FP2_copy(&(w->b), &(w->a)); - FP2_mul_ip(&t); - FP2_copy(&(w->a), &t); - FP4_norm(w); -#if TOWER_YYY == POSITOWER - FP4_neg(w, w); // *** - FP4_norm(w); -#endif -} - -/* Set w=w^p using Frobenius */ -/* SU= 16 */ -void YYY::FP4_frob(FP4 *w, FP2 *f) -{ - FP2_conj(&(w->a), &(w->a)); - FP2_conj(&(w->b), &(w->b)); - FP2_mul( &(w->b), f, &(w->b)); -} - -/* Set r=a^b mod m */ -/* SU= 240 */ -/* -void YYY::FP4_pow(FP4 *r, FP4* a, BIG b) -{ - FP4 w; - BIG z, zilch; - int bt; - - BIG_zero(zilch); - BIG_copy(z, b); - BIG_norm(z); - FP4_copy(&w, a); - FP4_norm(&w); - FP4_one(r); - - while (1) - { - bt = BIG_parity(z); - BIG_shr(z, 1); - if (bt) FP4_mul(r, r, &w); - if (BIG_comp(z, zilch) == 0) break; - FP4_sqr(&w, &w); - } - FP4_reduce(r); -} -*/ -#if CURVE_SECURITY_ZZZ == 128 - -/* SU= 304 */ -/* XTR xtr_a function */ -void YYY::FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z) -{ - FP4 t1, t2; - - FP4_copy(r, x); - FP4_sub(&t1, w, y); - FP4_norm(&t1); - FP4_pmul(&t1, &t1, &(r->a)); - FP4_add(&t2, w, y); - FP4_norm(&t2); - FP4_pmul(&t2, &t2, &(r->b)); - FP4_times_i(&t2); - - FP4_add(r, &t1, &t2); - FP4_add(r, r, z); - - FP4_reduce(r); -} - -/* SU= 152 */ -/* XTR xtr_d function */ -void YYY::FP4_xtr_D(FP4 *r, FP4 *x) -{ - FP4 w; - FP4_copy(r, x); - FP4_conj(&w, r); - FP4_add(&w, &w, &w); - FP4_sqr(r, r); - FP4_norm(&w); - FP4_sub(r, r, &w); - FP4_reduce(r); /* reduce here as multiple calls trigger automatic reductions */ -} - -/* SU= 728 */ -/* r=x^n using XTR method on traces of FP12s */ -void YYY::FP4_xtr_pow(FP4 *r, FP4 *x, BIG n) -{ - int i, par, nb; - BIG v; - FP2 w; - FP4 t, a, b, c, sf; - - BIG_zero(v); - BIG_inc(v, 3); - BIG_norm(v); - FP2_from_BIG(&w, v); - FP4_from_FP2(&a, &w); - FP4_copy(&sf, x); - FP4_norm(&sf); - FP4_copy(&b, &sf); - FP4_xtr_D(&c, &sf); - - par = BIG_parity(n); - BIG_copy(v, n); - BIG_norm(v); - BIG_shr(v, 1); - if (par == 0) - { - BIG_dec(v, 1); - BIG_norm(v); - } - - nb = BIG_nbits(v); - for (i = nb - 1; i >= 0; i--) - { - if (!BIG_bit(v, i)) - { - FP4_copy(&t, &b); - FP4_conj(&sf, &sf); - FP4_conj(&c, &c); - FP4_xtr_A(&b, &a, &b, &sf, &c); - FP4_conj(&sf, &sf); - FP4_xtr_D(&c, &t); - FP4_xtr_D(&a, &a); - } - else - { - FP4_conj(&t, &a); - FP4_xtr_D(&a, &b); - FP4_xtr_A(&b, &c, &b, &sf, &t); - FP4_xtr_D(&c, &c); - } - } - - if (par == 0) FP4_copy(r, &c); - else FP4_copy(r, &b); - FP4_reduce(r); -} - -/* SU= 872 */ -/* r=ck^a.cl^n using XTR double exponentiation method on traces of FP12s. See Stam thesis. */ -void YYY::FP4_xtr_pow2(FP4 *r, FP4 *ck, FP4 *cl, FP4 *ckml, FP4 *ckm2l, BIG a, BIG b) -{ - int i, f2; - BIG d, e, w; - FP4 t, cu, cv, cumv, cum2v; - - - BIG_copy(e, a); - BIG_copy(d, b); - BIG_norm(e); - BIG_norm(d); - FP4_copy(&cu, ck); - FP4_copy(&cv, cl); - FP4_copy(&cumv, ckml); - FP4_copy(&cum2v, ckm2l); - - f2 = 0; - while (BIG_parity(d) == 0 && BIG_parity(e) == 0) - { - BIG_shr(d, 1); - BIG_shr(e, 1); - f2++; - } - while (BIG_comp(d, e) != 0) - { - if (BIG_comp(d, e) > 0) - { - BIG_imul(w, e, 4); - BIG_norm(w); - if (BIG_comp(d, w) <= 0) - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_sub(e, w, e); - BIG_norm(e); - FP4_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP4_conj(&cum2v, &cumv); - FP4_copy(&cumv, &cv); - FP4_copy(&cv, &cu); - FP4_copy(&cu, &t); - } - else if (BIG_parity(d) == 0) - { - BIG_shr(d, 1); - FP4_conj(r, &cum2v); - FP4_xtr_A(&t, &cu, &cumv, &cv, r); - FP4_xtr_D(&cum2v, &cumv); - FP4_copy(&cumv, &t); - FP4_xtr_D(&cu, &cu); - } - else if (BIG_parity(e) == 1) - { - BIG_sub(d, d, e); - BIG_norm(d); - BIG_shr(d, 1); - FP4_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP4_xtr_D(&cu, &cu); - FP4_xtr_D(&cum2v, &cv); - FP4_conj(&cum2v, &cum2v); - FP4_copy(&cv, &t); - } - else - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_shr(d, 1); - BIG_copy(e, w); - FP4_xtr_D(&t, &cumv); - FP4_conj(&cumv, &cum2v); - FP4_conj(&cum2v, &t); - FP4_xtr_D(&t, &cv); - FP4_copy(&cv, &cu); - FP4_copy(&cu, &t); - } - } - if (BIG_comp(d, e) < 0) - { - BIG_imul(w, d, 4); - BIG_norm(w); - if (BIG_comp(e, w) <= 0) - { - BIG_sub(e, e, d); - BIG_norm(e); - FP4_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP4_copy(&cum2v, &cumv); - FP4_copy(&cumv, &cu); - FP4_copy(&cu, &t); - } - else if (BIG_parity(e) == 0) - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_shr(d, 1); - BIG_copy(e, w); - FP4_xtr_D(&t, &cumv); - FP4_conj(&cumv, &cum2v); - FP4_conj(&cum2v, &t); - FP4_xtr_D(&t, &cv); - FP4_copy(&cv, &cu); - FP4_copy(&cu, &t); - } - else if (BIG_parity(d) == 1) - { - BIG_copy(w, e); - BIG_copy(e, d); - BIG_sub(w, w, d); - BIG_norm(w); - BIG_copy(d, w); - BIG_shr(d, 1); - FP4_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP4_conj(&cumv, &cumv); - FP4_xtr_D(&cum2v, &cu); - FP4_conj(&cum2v, &cum2v); - FP4_xtr_D(&cu, &cv); - FP4_copy(&cv, &t); - } - else - { - BIG_shr(d, 1); - FP4_conj(r, &cum2v); - FP4_xtr_A(&t, &cu, &cumv, &cv, r); - FP4_xtr_D(&cum2v, &cumv); - FP4_copy(&cumv, &t); - FP4_xtr_D(&cu, &cu); - } - } - } - FP4_xtr_A(r, &cu, &cv, &cumv, &cum2v); - for (i = 0; i < f2; i++) FP4_xtr_D(r, r); - FP4_xtr_pow(r, r, d); -} - -#endif - -/* New stuff for ECp4 support */ - -/* Set w=x/2 */ -void YYY::FP4_div2(FP4 *w, FP4 *x) -{ - FP2_div2(&(w->a), &(x->a)); - FP2_div2(&(w->b), &(x->b)); -} - -/* Move b to a if d=1 */ -void YYY::FP4_cmove(FP4 *f, FP4 *g, int d) -{ - FP2_cmove(&(f->a), &(g->a), d); - FP2_cmove(&(f->b), &(g->b), d); -} - -void YYY::FP4_rand(FP4 *x,csprng *rng) -{ - FP2_rand(&(x->a),rng); - FP2_rand(&(x->b),rng); -} - -#if PAIRING_FRIENDLY_ZZZ >= BLS24_CURVE - -/* test for x a QR */ -int YYY::FP4_qr(FP4 *x, FP *h) -{ /* test x^(p^4-1)/2 = 1 */ - - FP4 c; - FP4_conj(&c,x); - FP4_mul(&c,&c,x); - - return FP2_qr(&(c.a),h); -} - -/* sqrt(a+xb) = sqrt((a+sqrt(a*a-n*b*b))/2)+x.b/(2*sqrt((a+sqrt(a*a-n*b*b))/2)) */ - -void YYY::FP4_sqrt(FP4 *r, FP4* x, FP *h) -{ - FP2 a, b, s, t; - FP hint,twk; - FP4 nr; - int sgn,qr; - - FP4_copy(r, x); - if (FP4_iszilch(x)) return; - - FP2_copy(&a, &(x->a)); - FP2_copy(&s, &(x->b)); - - FP2_sqr(&s, &s); // s*=s - FP2_sqr(&a, &a); // a*=a - FP2_mul_ip(&s); - FP2_norm(&s); - FP2_sub(&a, &a, &s); // a-=txx(s) - FP2_norm(&a); // ** - - FP2_sqrt(&s, &a, h); // Cost = +1 - - FP2_add(&a, &(r->a), &s); - FP2_norm(&a); - FP2_div2(&a, &a); - - FP2_div2(&b,&(r->b)); // w1=b/2 - qr=FP2_qr(&a,&hint); // only exp! Cost=+1 - -// tweak hint - multiply old hint by Norm(1/Beta)^e where Beta is irreducible polynomial - FP2_copy(&s,&a); - FP_rcopy(&twk,TWK); - FP_mul(&twk,&twk,&hint); - FP2_div_ip(&s); FP2_norm(&s); // switch to other candidate - - FP2_cmove(&a,&s,1-qr); - FP_cmove(&hint,&twk,1-qr); - - FP2_sqrt(&(r->a),&a,&hint); // a=sqrt(w2) Cost=+1 - FP2_inv(&s,&a,&hint); // w3=1/w2 - FP2_mul(&s,&s,&(r->a)); // w3=1/sqrt(w2) - FP2_mul(&(r->b),&s,&b); // b=(b/2)*1/sqrt(w2) - FP2_copy(&t,&(r->a)); - - FP2_cmove(&(r->a),&(r->b),1-qr); - FP2_cmove(&(r->b),&t,1-qr); - - sgn=FP4_sign(r); - FP4_neg(&nr,r); FP4_norm(&nr); - FP4_cmove(r,&nr,sgn); -} - -void YYY::FP4_div_i(FP4 *f) -{ - FP2 u, v; - FP2_copy(&u, &(f->a)); - FP2_copy(&v, &(f->b)); - - FP2_div_ip(&u); - - FP2_copy(&(f->a), &v); - FP2_copy(&(f->b), &u); - -#if TOWER_YYY == POSITOWER - FP4_neg(f, f); // *** - FP4_norm(f); -#endif -} - - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48.cpp deleted file mode 100644 index 9f0905c..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48.cpp +++ /dev/null @@ -1,1092 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^12 functions */ -/* SU=m, m is Stack Usage (no lazy )*/ -/* FP48 elements are of the form a+i.b+i^2.c */ - -#include "fp48_YYY.h" -#include "config_curve_ZZZ.h" - -using namespace XXX; - -/* return 1 if b==c, no branching */ -static int teq(sign32 b, sign32 c) -{ - sign32 x = b ^ c; - x -= 1; // if x=0, x now -1 - return (int)((x >> 31) & 1); -} - - -/* Constant time select from pre-computed table */ -static void FP48_select(YYY::FP48 *f, YYY::FP48 g[], sign32 b) -{ - YYY::FP48 invf; - sign32 m = b >> 31; - sign32 babs = (b ^ m) - m; - - babs = (babs - 1) / 2; - - FP48_cmove(f, &g[0], teq(babs, 0)); // conditional move - FP48_cmove(f, &g[1], teq(babs, 1)); - FP48_cmove(f, &g[2], teq(babs, 2)); - FP48_cmove(f, &g[3], teq(babs, 3)); - FP48_cmove(f, &g[4], teq(babs, 4)); - FP48_cmove(f, &g[5], teq(babs, 5)); - FP48_cmove(f, &g[6], teq(babs, 6)); - FP48_cmove(f, &g[7], teq(babs, 7)); - - FP48_copy(&invf, f); - FP48_conj(&invf, &invf); // 1/f - FP48_cmove(f, &invf, (int)(m & 1)); -} - - -/* test x==0 ? */ -/* SU= 8 */ -int YYY::FP48_iszilch(FP48 *x) -{ - if (FP16_iszilch(&(x->a)) && FP16_iszilch(&(x->b)) && FP16_iszilch(&(x->c))) return 1; - return 0; -} - -/* test x==1 ? */ -/* SU= 8 */ -int YYY::FP48_isunity(FP48 *x) -{ - if (FP16_isunity(&(x->a)) && FP16_iszilch(&(x->b)) && FP16_iszilch(&(x->c))) return 1; - return 0; -} - -/* FP48 copy w=x */ -/* SU= 16 */ -void YYY::FP48_copy(FP48 *w, FP48 *x) -{ - if (x == w) return; - FP16_copy(&(w->a), &(x->a)); - FP16_copy(&(w->b), &(x->b)); - FP16_copy(&(w->c), &(x->c)); - w->type = x->type; -} - -/* FP48 w=1 */ -/* SU= 8 */ -void YYY::FP48_one(FP48 *w) -{ - FP16_one(&(w->a)); - FP16_zero(&(w->b)); - FP16_zero(&(w->c)); - w->type = FP_UNITY; -} - -void YYY::FP48_zero(FP48 *w) -{ - FP16_zero(&(w->a)); - FP16_zero(&(w->b)); - FP16_zero(&(w->c)); - w->type = FP_ZILCH; -} - -/* return 1 if x==y, else 0 */ -/* SU= 16 */ -int YYY::FP48_equals(FP48 *x, FP48 *y) -{ - if (FP16_equals(&(x->a), &(y->a)) && FP16_equals(&(x->b), &(y->b)) && FP16_equals(&(x->c), &(y->c))) - return 1; - return 0; -} - -/* Set w=conj(x) */ -/* SU= 8 */ -void YYY::FP48_conj(FP48 *w, FP48 *x) -{ - FP48_copy(w, x); - FP16_conj(&(w->a), &(w->a)); - FP16_nconj(&(w->b), &(w->b)); - FP16_conj(&(w->c), &(w->c)); -} - -/* Create FP48 from FP16 */ -/* SU= 8 */ -void YYY::FP48_from_FP16(FP48 *w, FP16 *a) -{ - FP16_copy(&(w->a), a); - FP16_zero(&(w->b)); - FP16_zero(&(w->c)); - w->type = FP_SPARSEST; -} - -/* Create FP48 from 3 FP16's */ -/* SU= 16 */ -void YYY::FP48_from_FP16s(FP48 *w, FP16 *a, FP16 *b, FP16 *c) -{ - FP16_copy(&(w->a), a); - FP16_copy(&(w->b), b); - FP16_copy(&(w->c), c); - w->type = FP_DENSE; -} - -/* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */ -/* SU= 600 */ -void YYY::FP48_usqr(FP48 *w, FP48 *x) -{ - FP16 A, B, C, D; - - FP16_copy(&A, &(x->a)); - - FP16_sqr(&(w->a), &(x->a)); - FP16_add(&D, &(w->a), &(w->a)); - FP16_add(&(w->a), &D, &(w->a)); - - FP16_norm(&(w->a)); - FP16_nconj(&A, &A); - - FP16_add(&A, &A, &A); - FP16_add(&(w->a), &(w->a), &A); - FP16_sqr(&B, &(x->c)); - FP16_times_i(&B); - - FP16_add(&D, &B, &B); - FP16_add(&B, &B, &D); - FP16_norm(&B); - - FP16_sqr(&C, &(x->b)); - - FP16_add(&D, &C, &C); - FP16_add(&C, &C, &D); - - FP16_norm(&C); - FP16_conj(&(w->b), &(x->b)); - FP16_add(&(w->b), &(w->b), &(w->b)); - FP16_nconj(&(w->c), &(x->c)); - - FP16_add(&(w->c), &(w->c), &(w->c)); - FP16_add(&(w->b), &B, &(w->b)); - FP16_add(&(w->c), &C, &(w->c)); - w->type = FP_DENSE; - - FP48_reduce(w); /* reduce here as in pow function repeated squarings would trigger multiple reductions */ -} - -/* FP48 squaring w=x^2 */ -/* SU= 600 */ -void YYY::FP48_sqr(FP48 *w, FP48 *x) -{ - /* Use Chung-Hasan SQR2 method from http://cacr.uwaterloo.ca/techreports/2006/cacr2006-24.pdf */ - - FP16 A, B, C, D; - - if (x->type <= FP_UNITY) - { - FP48_copy(w, x); - return; - } - - FP16_sqr(&A, &(x->a)); - FP16_mul(&B, &(x->b), &(x->c)); - FP16_add(&B, &B, &B); - FP16_norm(&B); - FP16_sqr(&C, &(x->c)); - - FP16_mul(&D, &(x->a), &(x->b)); - FP16_add(&D, &D, &D); - - FP16_add(&(w->c), &(x->a), &(x->c)); - FP16_add(&(w->c), &(x->b), &(w->c)); - FP16_norm(&(w->c)); - - FP16_sqr(&(w->c), &(w->c)); - - FP16_copy(&(w->a), &A); - FP16_add(&A, &A, &B); - - FP16_norm(&A); - - FP16_add(&A, &A, &C); - FP16_add(&A, &A, &D); - - FP16_norm(&A); - - FP16_neg(&A, &A); - FP16_times_i(&B); - FP16_times_i(&C); - - FP16_add(&(w->a), &(w->a), &B); - FP16_add(&(w->b), &C, &D); - FP16_add(&(w->c), &(w->c), &A); - - if (x->type == FP_SPARSER || x->type == FP_SPARSEST) - w->type = FP_SPARSE; - else - w->type = FP_DENSE; - - FP48_norm(w); -} - -/* FP48 full multiplication w=w*y */ - - -/* SU= 896 */ -/* FP48 full multiplication w=w*y */ -void YYY::FP48_mul(FP48 *w, FP48 *y) -{ - FP16 z0, z1, z2, z3, t0, t1; - - FP16_mul(&z0, &(w->a), &(y->a)); - FP16_mul(&z2, &(w->b), &(y->b)); // - - FP16_add(&t0, &(w->a), &(w->b)); - FP16_add(&t1, &(y->a), &(y->b)); // - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&z1, &t0, &t1); - FP16_add(&t0, &(w->b), &(w->c)); - FP16_add(&t1, &(y->b), &(y->c)); // - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&z3, &t0, &t1); - - FP16_neg(&t0, &z0); - FP16_neg(&t1, &z2); - - FP16_add(&z1, &z1, &t0); // z1=z1-z0 - FP16_add(&(w->b), &z1, &t1); // z1=z1-z2 - FP16_add(&z3, &z3, &t1); // z3=z3-z2 - FP16_add(&z2, &z2, &t0); // z2=z2-z0 - - FP16_add(&t0, &(w->a), &(w->c)); - FP16_add(&t1, &(y->a), &(y->c)); - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&t0, &t1, &t0); - FP16_add(&z2, &z2, &t0); - - FP16_mul(&t0, &(w->c), &(y->c)); - FP16_neg(&t1, &t0); - - FP16_add(&(w->c), &z2, &t1); - FP16_add(&z3, &z3, &t1); - FP16_times_i(&t0); - FP16_add(&(w->b), &(w->b), &t0); - FP16_norm(&z3); - FP16_times_i(&z3); - FP16_add(&(w->a), &z0, &z3); - - FP48_norm(w); - w->type = FP_DENSE; -} - -/* FP48 full multiplication w=w*y */ -/* Supports sparse multiplicands */ -/* Usually w is denser than y */ -void YYY::FP48_ssmul(FP48 *w, FP48 *y) -{ - FP16 z0, z1, z2, z3, t0, t1; - if (w->type == FP_UNITY) - { - FP48_copy(w, y); - return; - } - if (y->type == FP_UNITY) - return; - -// FP48_mul(w,y); return; - - if (y->type >= FP_SPARSE) - { - FP16_mul(&z0, &(w->a), &(y->a)); // xa.ya always 11x11 - -#if SEXTIC_TWIST_ZZZ == M_TYPE - if (y->type == FP_SPARSE || w->type == FP_SPARSE) - { - FP8_mul(&z2.b, &(w->b).b, &(y->b).b); - FP8_zero(&z2.a); - if (y->type != FP_SPARSE) - FP8_mul(&z2.a, &(w->b).b, &(y->b).a); - if (w->type != FP_SPARSE) - FP8_mul(&z2.a, &(w->b).a, &(y->b).b); - FP16_times_i(&z2); - } - else -#endif - FP16_mul(&z2, &(w->b), &(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 - - FP16_add(&t0, &(w->a), &(w->b)); // (xa+xb) - FP16_add(&t1, &(y->a), &(y->b)); // (ya+yb) - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&z1, &t0, &t1); // (xa+xb)(ya+yb) always 11x11 - FP16_add(&t0, &(w->b), &(w->c)); // (xb+xc) - FP16_add(&t1, &(y->b), &(y->c)); // (yb+yc) - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&z3, &t0, &t1); // (xb+xc)(yb+yc) could be anything... - FP16_neg(&t0, &z0); // -(xa.ya) - FP16_neg(&t1, &z2); // -(xb.yb) - - FP16_add(&z1, &z1, &t0); - FP16_add(&(w->b), &z1, &t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya - - FP16_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - FP16_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) - - FP16_add(&t0, &(w->a), &(w->c)); // (xa+xc) - FP16_add(&t1, &(y->a), &(y->c)); // (ya+yc) - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&t0, &t1, &t0); // (xa+xc)(ya+yc) always 11x11 - FP16_add(&z2, &z2, &t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - -#if SEXTIC_TWIST_ZZZ == D_TYPE - if (y->type == FP_SPARSE || w->type == FP_SPARSE) - { - FP8_mul(&t0.a, &(w->c).a, &(y->c).a); - FP8_zero(&t0.b); - if (y->type != FP_SPARSE) - FP8_mul(&t0.b, &(w->c).a, &(y->c).b); - if (w->type != FP_SPARSE) - FP8_mul(&t0.b, &(w->c).b, &(y->c).a); - } - else -#endif - FP16_mul(&t0, &(w->c), &(y->c)); // (xc.yc) could be anything - - FP16_neg(&t1, &t0); // -(xc.yc) - - FP16_add(&(w->c), &z2, &t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc - FP16_add(&z3, &z3, &t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb - FP16_times_i(&t0); // i.(xc.yc) - FP16_add(&(w->b), &(w->b), &t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc) - FP16_norm(&z3); - FP16_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb) - FP16_add(&(w->a), &z0, &z3); // wa = xa.ya + i(xb.yc + xc.yb) - } else { - if (w->type == FP_SPARSER || w->type == FP_SPARSEST) - { - FP48_smul(w, y); - return; - } -// dense by sparser - 13m -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP16_copy(&z3, &(w->b)); - FP16_mul(&z0, &(w->a), &(y->a)); - - if (y->type == FP_SPARSEST) - FP16_tmul(&z2, &(w->b), &(y->b).a.a.a.a); - else - FP16_pmul(&z2, &(w->b), &(y->b).a); - - FP16_add(&(w->b), &(w->a), &(w->b)); - FP16_copy(&t1, &(y->a)); - FP8_add(&t1.a, &t1.a, &(y->b).a); - - FP16_norm(&t1); - FP16_norm(&(w->b)); - - FP16_mul(&(w->b), &(w->b), &t1); - FP16_add(&z3, &z3, &(w->c)); - FP16_norm(&z3); - - if (y->type == FP_SPARSEST) - FP16_tmul(&z3, &z3, &(y->b).a.a.a.a); - else - FP16_pmul(&z3, &z3, &(y->b).a); - - FP16_neg(&t0, &z0); - FP16_neg(&t1, &z2); - - FP16_add(&(w->b), &(w->b), &t0); // z1=z1-z0 - FP16_add(&(w->b), &(w->b), &t1); // z1=z1-z2 - - FP16_add(&z3, &z3, &t1); // z3=z3-z2 - FP16_add(&z2, &z2, &t0); // z2=z2-z0 - - FP16_add(&t0, &(w->a), &(w->c)); - FP16_norm(&t0); - FP16_norm(&z3); - - FP16_mul(&t0, &(y->a), &t0); - FP16_add(&(w->c), &z2, &t0); - - FP16_times_i(&z3); - FP16_add(&(w->a), &z0, &z3); -#endif -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP16_mul(&z0, &(w->a), &(y->a)); - FP16_add(&t0, &(w->a), &(w->b)); - FP16_norm(&t0); - - FP16_mul(&z1, &t0, &(y->a)); - FP16_add(&t0, &(w->b), &(w->c)); - FP16_norm(&t0); - - if (y->type == FP_SPARSEST) - FP16_tmul(&z3, &t0, &(y->c).b.a.a.a); - else - FP16_pmul(&z3, &t0, &(y->c).b); - - FP16_times_i(&z3); - - FP16_neg(&t0, &z0); - FP16_add(&z1, &z1, &t0); // z1=z1-z0 - - FP16_copy(&(w->b), &z1); - FP16_copy(&z2, &t0); - - FP16_add(&t0, &(w->a), &(w->c)); - FP16_add(&t1, &(y->a), &(y->c)); - - FP16_norm(&t0); - FP16_norm(&t1); - - FP16_mul(&t0, &t1, &t0); - FP16_add(&z2, &z2, &t0); - - if (y->type == FP_SPARSEST) - FP16_tmul(&t0, &(w->c), &(y->c).b.a.a.a); - else - FP16_pmul(&t0, &(w->c), &(y->c).b); - - FP16_times_i(&t0); - FP16_neg(&t1, &t0); - FP16_times_i(&t0); - - FP16_add(&(w->c), &z2, &t1); - FP16_add(&z3, &z3, &t1); - - FP16_add(&(w->b), &(w->b), &t0); - FP16_norm(&z3); - FP16_times_i(&z3); - FP16_add(&(w->a), &z0, &z3); -#endif - } - w->type = FP_DENSE; - FP48_norm(w); -} - -/* FP48 multiplication w=w*y */ -/* catering for special case that arises from special form of ATE pairing line function */ -/* w and y are both sparser line functions - cost = 6m */ -void YYY::FP48_smul(FP48 *w, FP48 *y) -{ - FP8 w1, w2, w3, ta, tb, tc, td, te, t; - -// FP48_mul(w,y); return; - -#if SEXTIC_TWIST_ZZZ == D_TYPE - FP8_mul(&w1, &(w->a).a, &(y->a).a); // A1.A2 - FP8_mul(&w2, &(w->a).b, &(y->a).b); // B1.B2 - - if (y->type == FP_SPARSEST || w->type == FP_SPARSEST) - { - if (y->type == FP_SPARSEST && w->type == FP_SPARSEST) - { - FP8_zero(&w3); - FP_mul(&w3.a.a.a, &(w->b).a.a.a.a, &(y->b).a.a.a.a); - } else { - if (y->type != FP_SPARSEST) - FP8_tmul(&w3, &(y->b).a, &(w->b).a.a.a.a); - if (w->type != FP_SPARSEST) - FP8_tmul(&w3, &(w->b).a, &(y->b).a.a.a.a); - } - } - else - FP8_mul(&w3, &(w->b).a, &(y->b).a); // C1.C2 - - FP8_add(&ta, &(w->a).a, &(w->a).b); // A1+B1 - FP8_add(&tb, &(y->a).a, &(y->a).b); // A2+B2 - FP8_norm(&ta); - FP8_norm(&tb); - FP8_mul(&tc, &ta, &tb); // (A1+B1)(A2+B2) - FP8_add(&t, &w1, &w2); - FP8_neg(&t, &t); - FP8_add(&tc, &tc, &t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1) - - FP8_add(&ta, &(w->a).a, &(w->b).a); // A1+C1 - FP8_add(&tb, &(y->a).a, &(y->b).a); // A2+C2 - FP8_norm(&ta); - FP8_norm(&tb); - FP8_mul(&td, &ta, &tb); // (A1+C1)(A2+C2) - FP8_add(&t, &w1, &w3); - FP8_neg(&t, &t); - FP8_add(&td, &td, &t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1) - - FP8_add(&ta, &(w->a).b, &(w->b).a); // B1+C1 - FP8_add(&tb, &(y->a).b, &(y->b).a); // B2+C2 - FP8_norm(&ta); - FP8_norm(&tb); - FP8_mul(&te, &ta, &tb); // (B1+C1)(B2+C2) - FP8_add(&t, &w2, &w3); - FP8_neg(&t, &t); - FP8_add(&te, &te, &t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1) - - FP8_times_i(&w2); - FP8_add(&w1, &w1, &w2); - FP16_from_FP8s(&(w->a), &w1, &tc); - FP16_from_FP8s(&(w->b), &td, &te); // only norm these 2 - FP16_from_FP8(&(w->c), &w3); - - FP16_norm(&(w->a)); - FP16_norm(&(w->b)); -#endif -#if SEXTIC_TWIST_ZZZ == M_TYPE - FP8_mul(&w1, &(w->a).a, &(y->a).a); // A1.A2 - FP8_mul(&w2, &(w->a).b, &(y->a).b); // B1.B2 - - if (y->type == FP_SPARSEST || w->type == FP_SPARSEST) - { - if (y->type == FP_SPARSEST && w->type == FP_SPARSEST) - { - FP8_zero(&w3); - FP_mul(&w3.a.a.a, &(w->c).b.a.a.a, &(y->c).b.a.a.a); - } else { - if (y->type != FP_SPARSEST) - FP8_tmul(&w3, &(y->c).b, &(w->c).b.a.a.a); - if (w->type != FP_SPARSEST) - FP8_tmul(&w3, &(w->c).b, &(y->c).b.a.a.a); - } - } - else - FP8_mul(&w3, &(w->c).b, &(y->c).b); // F1.F2 - - FP8_add(&ta, &(w->a).a, &(w->a).b); // A1+B1 - FP8_add(&tb, &(y->a).a, &(y->a).b); // A2+B2 - FP8_norm(&ta); - FP8_norm(&tb); - FP8_mul(&tc, &ta, &tb); // (A1+B1)(A2+B2) - FP8_add(&t, &w1, &w2); - FP8_neg(&t, &t); - FP8_add(&tc, &tc, &t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1) - - FP8_add(&ta, &(w->a).a, &(w->c).b); // A1+F1 - FP8_add(&tb, &(y->a).a, &(y->c).b); // A2+F2 - FP8_norm(&ta); - FP8_norm(&tb); - FP8_mul(&td, &ta, &tb); // (A1+F1)(A2+F2) - FP8_add(&t, &w1, &w3); - FP8_neg(&t, &t); - FP8_add(&td, &td, &t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1) - - FP8_add(&ta, &(w->a).b, &(w->c).b); // B1+F1 - FP8_add(&tb, &(y->a).b, &(y->c).b); // B2+F2 - FP8_norm(&ta); - FP8_norm(&tb); - FP8_mul(&te, &ta, &tb); // (B1+F1)(B2+F2) - FP8_add(&t, &w2, &w3); - FP8_neg(&t, &t); - FP8_add(&te, &te, &t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1) - - FP8_times_i(&w2); - FP8_add(&w1, &w1, &w2); - FP16_from_FP8s(&(w->a), &w1, &tc); - - FP8_times_i(&w3); - FP8_norm(&w3); - FP16_from_FP8H(&(w->b), &w3); - - FP8_norm(&te); - FP8_times_i(&te); - FP16_from_FP8s(&(w->c), &te, &td); - - FP16_norm(&(w->a)); - FP16_norm(&(w->c)); -#endif - - w->type = FP_SPARSE; -} - -/* Set w=1/x */ -/* SU= 600 */ -void YYY::FP48_inv(FP48 *w, FP48 *x) -{ - FP16 f0, f1, f2, f3; - - FP16_sqr(&f0, &(x->a)); - FP16_mul(&f1, &(x->b), &(x->c)); - FP16_times_i(&f1); - FP16_sub(&f0, &f0, &f1); /* y.a */ - FP16_norm(&f0); - - FP16_sqr(&f1, &(x->c)); - FP16_times_i(&f1); - FP16_mul(&f2, &(x->a), &(x->b)); - FP16_sub(&f1, &f1, &f2); /* y.b */ - FP16_norm(&f1); - - FP16_sqr(&f2, &(x->b)); - FP16_mul(&f3, &(x->a), &(x->c)); - FP16_sub(&f2, &f2, &f3); /* y.c */ - FP16_norm(&f2); - - FP16_mul(&f3, &(x->b), &f2); - FP16_times_i(&f3); - FP16_mul(&(w->a), &f0, &(x->a)); - FP16_add(&f3, &(w->a), &f3); - FP16_mul(&(w->c), &f1, &(x->c)); - FP16_times_i(&(w->c)); - - FP16_add(&f3, &(w->c), &f3); - FP16_norm(&f3); - - FP16_inv(&f3, &f3); - FP16_mul(&(w->a), &f0, &f3); - FP16_mul(&(w->b), &f1, &f3); - FP16_mul(&(w->c), &f2, &f3); - w->type = FP_DENSE; -} - -/* constant time powering by small integer of max length bts */ - -void YYY::FP48_pinpow(FP48 *r, int e, int bts) -{ - int i, b; - FP48 R[2]; - - FP48_one(&R[0]); - FP48_copy(&R[1], r); - - for (i = bts - 1; i >= 0; i--) - { - b = (e >> i) & 1; - FP48_mul(&R[1 - b], &R[b]); - FP48_usqr(&R[b], &R[b]); - } - FP48_copy(r, &R[0]); -} - -/* Compressed powering of unitary elements y=x^(e mod r) */ -/* -void YYY::FP48_compow(FP16 *c, FP48 *x, BIG e, BIG r) -{ - FP48 g1, g2; - FP16 cp, cpm1, cpm2; - FP2 f; - BIG q, a, b, m; - - BIG_rcopy(a, Fra); - BIG_rcopy(b, Frb); - FP2_from_BIGs(&f, a, b); - - BIG_rcopy(q, Modulus); - - FP48_copy(&g1, x); - FP48_copy(&g2, x); - - BIG_copy(m, q); - BIG_mod(m, r); - - BIG_copy(a, e); - BIG_mod(a, m); - - BIG_copy(b, e); - BIG_sdiv(b, m); - - FP48_trace(c, &g1); - - if (BIG_iszilch(b)) - { - FP16_xtr_pow(c, c, e); - return; - } - - FP48_frob(&g2, &f, 1); - FP48_trace(&cp, &g2); - FP48_conj(&g1, &g1); - FP48_mul(&g2, &g1); - FP48_trace(&cpm1, &g2); - FP48_mul(&g2, &g1); - - FP48_trace(&cpm2, &g2); - - FP16_xtr_pow2(c, &cp, c, &cpm1, &cpm2, a, b); - -} -*/ -/* Note this is simple square and multiply, so not side-channel safe */ - -void YYY::FP48_pow(FP48 *r, FP48 *a, BIG b) -{ - FP48 w, sf; - BIG b1, b3; - int i, nb, bt; - BIG_copy(b1, b); - BIG_norm(b1); - BIG_pmul(b3, b1, 3); - BIG_norm(b3); - - FP48_copy(&sf, a); - FP48_norm(&sf); - FP48_copy(&w, &sf); - - if (BIG_iszilch(b3)) - { - FP48_one(r); - return; - } - - nb = BIG_nbits(b3); - for (i = nb - 2; i >= 1; i--) - { - FP48_usqr(&w, &w); - bt = BIG_bit(b3, i) - BIG_bit(b1, i); - if (bt == 1) - FP48_mul(&w, &sf); - if (bt == -1) - { - FP48_conj(&sf, &sf); - FP48_mul(&w, &sf); - FP48_conj(&sf, &sf); - } - } - - FP48_copy(r, &w); - FP48_reduce(r); -} - -/* p=q0^u0.q1^u1.q2^u2.q3^u3... */ -/* Side channel attack secure */ -// Bos & Costello https://eprint.iacr.org/2013/458.pdf -// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf - -void YYY::FP48_pow16(FP48 *p, FP48 *q, BIG u[16]) -{ - int i, j, k, nb, pb1, pb2, pb3, pb4, bt; - FP48 g1[8], g2[8], g3[8], g4[8], r; - BIG t[16], mt; - sign8 w1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s1[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w2[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s2[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w3[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s3[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 w4[NLEN_XXX * BASEBITS_XXX + 1]; - sign8 s4[NLEN_XXX * BASEBITS_XXX + 1]; - - for (i = 0; i < 16; i++) - BIG_copy(t[i], u[i]); - -// Precomputed tables - FP48_copy(&g1[0], &q[0]); // q[0] - FP48_copy(&g1[1], &g1[0]); - FP48_mul(&g1[1], &q[1]); // q[0].q[1] - FP48_copy(&g1[2], &g1[0]); - FP48_mul(&g1[2], &q[2]); // q[0].q[2] - FP48_copy(&g1[3], &g1[1]); - FP48_mul(&g1[3], &q[2]); // q[0].q[1].q[2] - FP48_copy(&g1[4], &g1[0]); - FP48_mul(&g1[4], &q[3]); // q[0].q[3] - FP48_copy(&g1[5], &g1[1]); - FP48_mul(&g1[5], &q[3]); // q[0].q[1].q[3] - FP48_copy(&g1[6], &g1[2]); - FP48_mul(&g1[6], &q[3]); // q[0].q[2].q[3] - FP48_copy(&g1[7], &g1[3]); - FP48_mul(&g1[7], &q[3]); // q[0].q[1].q[2].q[3] - - FP48_copy(&g2[0], &q[4]); // q[0] - FP48_copy(&g2[1], &g2[0]); - FP48_mul(&g2[1], &q[5]); // q[0].q[1] - FP48_copy(&g2[2], &g2[0]); - FP48_mul(&g2[2], &q[6]); // q[0].q[2] - FP48_copy(&g2[3], &g2[1]); - FP48_mul(&g2[3], &q[6]); // q[0].q[1].q[2] - FP48_copy(&g2[4], &g2[0]); - FP48_mul(&g2[4], &q[7]); // q[0].q[3] - FP48_copy(&g2[5], &g2[1]); - FP48_mul(&g2[5], &q[7]); // q[0].q[1].q[3] - FP48_copy(&g2[6], &g2[2]); - FP48_mul(&g2[6], &q[7]); // q[0].q[2].q[3] - FP48_copy(&g2[7], &g2[3]); - FP48_mul(&g2[7], &q[7]); // q[0].q[1].q[2].q[3] - - FP48_copy(&g3[0], &q[8]); // q[0] - FP48_copy(&g3[1], &g3[0]); - FP48_mul(&g3[1], &q[9]); // q[0].q[1] - FP48_copy(&g3[2], &g3[0]); - FP48_mul(&g3[2], &q[10]); // q[0].q[2] - FP48_copy(&g3[3], &g3[1]); - FP48_mul(&g3[3], &q[10]); // q[0].q[1].q[2] - FP48_copy(&g3[4], &g3[0]); - FP48_mul(&g3[4], &q[11]); // q[0].q[3] - FP48_copy(&g3[5], &g3[1]); - FP48_mul(&g3[5], &q[11]); // q[0].q[1].q[3] - FP48_copy(&g3[6], &g3[2]); - FP48_mul(&g3[6], &q[11]); // q[0].q[2].q[3] - FP48_copy(&g3[7], &g3[3]); - FP48_mul(&g3[7], &q[11]); // q[0].q[1].q[2].q[3] - - FP48_copy(&g4[0], &q[12]); // q[0] - FP48_copy(&g4[1], &g4[0]); - FP48_mul(&g4[1], &q[13]); // q[0].q[1] - FP48_copy(&g4[2], &g4[0]); - FP48_mul(&g4[2], &q[14]); // q[0].q[2] - FP48_copy(&g4[3], &g4[1]); - FP48_mul(&g4[3], &q[14]); // q[0].q[1].q[2] - FP48_copy(&g4[4], &g4[0]); - FP48_mul(&g4[4], &q[15]); // q[0].q[3] - FP48_copy(&g4[5], &g4[1]); - FP48_mul(&g4[5], &q[15]); // q[0].q[1].q[3] - FP48_copy(&g4[6], &g4[2]); - FP48_mul(&g4[6], &q[15]); // q[0].q[2].q[3] - FP48_copy(&g4[7], &g4[3]); - FP48_mul(&g4[7], &q[15]); // q[0].q[1].q[2].q[3] - -// Make them odd - pb1 = 1 - BIG_parity(t[0]); - BIG_inc(t[0], pb1); - BIG_norm(t[0]); - - pb2 = 1 - BIG_parity(t[4]); - BIG_inc(t[4], pb2); - BIG_norm(t[4]); - - pb3 = 1 - BIG_parity(t[8]); - BIG_inc(t[8], pb3); - BIG_norm(t[8]); - - pb4 = 1 - BIG_parity(t[12]); - BIG_inc(t[12], pb4); - BIG_norm(t[12]); - -// Number of bits - BIG_zero(mt); - for (i = 0; i < 16; i++) - { - BIG_or(mt, mt, t[i]); - } - nb = 1 + BIG_nbits(mt); - -// Sign pivot - s1[nb - 1] = 1; - s2[nb - 1] = 1; - s3[nb - 1] = 1; - s4[nb - 1] = 1; - for (i = 0; i < nb - 1; i++) - { - BIG_fshr(t[0], 1); - s1[i] = 2 * BIG_parity(t[0]) - 1; - BIG_fshr(t[4], 1); - s2[i] = 2 * BIG_parity(t[4]) - 1; - BIG_fshr(t[8], 1); - s3[i] = 2 * BIG_parity(t[8]) - 1; - BIG_fshr(t[12], 1); - s4[i] = 2 * BIG_parity(t[12]) - 1; - } - -// Recoded exponents - for (i = 0; i < nb; i++) - { - w1[i] = 0; - k = 1; - for (j = 1; j < 4; j++) - { - bt = s1[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w1[i] += bt * k; - k *= 2; - } - - w2[i] = 0; - k = 1; - for (j = 5; j < 8; j++) - { - bt = s2[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w2[i] += bt * k; - k *= 2; - } - - w3[i] = 0; - k = 1; - for (j = 9; j < 12; j++) - { - bt = s3[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w3[i] += bt * k; - k *= 2; - } - - w4[i] = 0; - k = 1; - for (j = 13; j < 16; j++) - { - bt = s4[i] * BIG_parity(t[j]); - BIG_fshr(t[j], 1); - - BIG_dec(t[j], (bt >> 1)); - BIG_norm(t[j]); - w4[i] += bt * k; - k *= 2; - } - } - -// Main loop - FP48_select(p, g1, 2 * w1[nb - 1] + 1); - FP48_select(&r, g2, 2 * w2[nb - 1] + 1); - FP48_mul(p, &r); - FP48_select(&r, g3, 2 * w3[nb - 1] + 1); - FP48_mul(p, &r); - FP48_select(&r, g4, 2 * w4[nb - 1] + 1); - FP48_mul(p, &r); - for (i = nb - 2; i >= 0; i--) - { - FP48_usqr(p, p); - FP48_select(&r, g1, 2 * w1[i] + s1[i]); - FP48_mul(p, &r); - FP48_select(&r, g2, 2 * w2[i] + s2[i]); - FP48_mul(p, &r); - FP48_select(&r, g3, 2 * w3[i] + s3[i]); - FP48_mul(p, &r); - FP48_select(&r, g4, 2 * w4[i] + s4[i]); - FP48_mul(p, &r); - } - -// apply correction - FP48_conj(&r, &q[0]); - FP48_mul(&r, p); - FP48_cmove(p, &r, pb1); - FP48_conj(&r, &q[4]); - FP48_mul(&r, p); - FP48_cmove(p, &r, pb2); - - FP48_conj(&r, &q[8]); - FP48_mul(&r, p); - FP48_cmove(p, &r, pb3); - FP48_conj(&r, &q[12]); - FP48_mul(&r, p); - FP48_cmove(p, &r, pb4); - - FP48_reduce(p); -} - -/* Set w=w^p using Frobenius */ -/* SU= 160 */ -void YYY::FP48_frob(FP48 *w, FP2 *f, int n) -{ - int i; - FP8 X2, X4; - FP4 F; - FP2 f3, f2; // f=(1+i)^(p-19)/24 - FP2_sqr(&f2, f); // - FP2_mul(&f3, &f2, f); // f3=f^3=(1+i)^(p-19)/8 - - FP2_mul_ip(&f3); - FP2_norm(&f3); - FP2_mul_ip(&f3); // f3 = (1+i)^16/8.(1+i)^(p-19)/8 = (1+i)^(p-3)/8 - FP2_norm(&f3); - - for (i = 0; i < n; i++) - { - FP16_frob(&(w->a), &f3); // a=a^p - FP16_frob(&(w->b), &f3); // b=b^p - FP16_frob(&(w->c), &f3); // c=c^p - - FP16_qmul(&(w->b), &(w->b), f); FP16_times_i4(&(w->b)); FP16_times_i2(&(w->b)); - FP16_qmul(&(w->c), &(w->c), &f2); FP16_times_i4(&(w->c)); FP16_times_i4(&(w->c)); FP16_times_i4(&(w->c)); - } - w->type = FP_DENSE; -} - -/* SU= 8 */ -/* normalise all components of w */ -void YYY::FP48_norm(FP48 *w) -{ - FP16_norm(&(w->a)); - FP16_norm(&(w->b)); - FP16_norm(&(w->c)); -} - -/* SU= 8 */ -/* reduce all components of w */ -void YYY::FP48_reduce(FP48 *w) -{ - FP16_reduce(&(w->a)); - FP16_reduce(&(w->b)); - FP16_reduce(&(w->c)); -} - -/* trace function w=trace(x) */ -/* SU= 8 */ -void YYY::FP48_trace(FP16 *w, FP48 *x) -{ - FP16_imul(w, &(x->a), 3); - FP16_reduce(w); -} - -/* SU= 8 */ -/* Output w in hex */ -void YYY::FP48_output(FP48 *w) -{ - printf("["); - FP16_output(&(w->a)); - printf(","); - FP16_output(&(w->b)); - printf(","); - FP16_output(&(w->c)); - printf("]"); -} - -/* Convert g to octet string w */ -void YYY::FP48_toOctet(octet *W, FP48 *g) -{ - W->len = 48 * MODBYTES_XXX; - FP16_toBytes(&(W->val[0]),&(g->c)); - FP16_toBytes(&(W->val[16 * MODBYTES_XXX]),&(g->b)); - FP16_toBytes(&(W->val[32 * MODBYTES_XXX]),&(g->a)); -} - -/* Restore g from octet string w */ -void YYY::FP48_fromOctet(FP48 *g, octet *W) -{ - FP16_fromBytes(&(g->c),&(W->val[0])); - FP16_fromBytes(&(g->b),&(W->val[16 * MODBYTES_XXX])); - FP16_fromBytes(&(g->a),&(W->val[32 * MODBYTES_XXX])); -} - -/* Move b to a if d=1 */ -void YYY::FP48_cmove(FP48 *f, FP48 *g, int d) -{ - FP16_cmove(&(f->a), &(g->a), d); - FP16_cmove(&(f->b), &(g->b), d); - FP16_cmove(&(f->c), &(g->c), d); - d = ~(d - 1); - f->type ^= (f->type ^ g->type)&d; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8.cpp deleted file mode 100644 index d6a628c..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8.cpp +++ /dev/null @@ -1,732 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE Fp^8 functions */ - -/* FP8 elements are of the form a+ib, where i is sqrt(sqrt(-1+sqrt(-1))) */ - -#include "fp8_YYY.h" - -using namespace XXX; - -/* test x==0 ? */ -int YYY::FP8_iszilch(FP8 *x) -{ - return (FP4_iszilch(&(x->a)) & FP4_iszilch(&(x->b))); -} - -/* test x==1 ? */ -int YYY::FP8_isunity(FP8 *x) -{ - return (FP4_isunity(&(x->a)) & FP4_iszilch(&(x->b))); -} - -/* test is w real? That is in a+ib test b is zero */ -int YYY::FP8_isreal(FP8 *w) -{ - return FP4_iszilch(&(w->b)); -} - -// Is x lexically larger than p-x? -// return -1 for no, 0 if x=0, 1 for yes -int YYY::FP8_islarger(FP8 *x) -{ - int cmp; - if (FP8_iszilch(x)) return 0; - cmp=FP4_islarger(&(x->b)); - if (cmp!=0) return cmp; - return FP4_islarger(&(x->a)); -} - -void YYY::FP8_toBytes(char *b,FP8 *x) -{ - FP4_toBytes(b,&(x->b)); - FP4_toBytes(&b[4*MODBYTES_XXX],&(x->a)); -} - -void YYY::FP8_fromBytes(FP8 *x,char *b) -{ - FP4_fromBytes(&(x->b),b); - FP4_fromBytes(&(x->a),&b[4*MODBYTES_XXX]); -} - -/* return 1 if x==y, else 0 */ -int YYY::FP8_equals(FP8 *x, FP8 *y) -{ - return (FP4_equals(&(x->a), &(y->a)) & FP4_equals(&(x->b), &(y->b))); -} - -/* set FP8 from two FP4s */ -void YYY::FP8_from_FP4s(FP8 *w, FP4 * x, FP4* y) -{ - FP4_copy(&(w->a), x); - FP4_copy(&(w->b), y); -} - -/* set FP8 from FP4 */ -void YYY::FP8_from_FP4(FP8 *w, FP4 *x) -{ - FP4_copy(&(w->a), x); - FP4_zero(&(w->b)); -} - -/* set high part of FP8 from FP4 */ -void YYY::FP8_from_FP4H(FP8 *w, FP4 *x) -{ - FP4_copy(&(w->b), x); - FP4_zero(&(w->a)); -} - -/* set FP8 from FP */ -void YYY::FP8_from_FP(FP8 *w, FP *x) -{ - FP2 t; - FP4 t4; - FP2_from_FP(&t, x); - FP4_from_FP2(&t4, &t); - FP8_from_FP4(w, &t4); -} - -/* FP8 copy w=x */ -void YYY::FP8_copy(FP8 *w, FP8 *x) -{ - if (w == x) return; - FP4_copy(&(w->a), &(x->a)); - FP4_copy(&(w->b), &(x->b)); -} - -/* FP8 w=0 */ -void YYY::FP8_zero(FP8 *w) -{ - FP4_zero(&(w->a)); - FP4_zero(&(w->b)); -} - -/* FP8 w=1 */ -void YYY::FP8_one(FP8 *w) -{ - FP4_one(&(w->a)); - FP4_zero(&(w->b)); -} - -int YYY::FP8_sign(FP8 *w) -{ - int p1,p2; - p1=FP4_sign(&(w->a)); - p2=FP4_sign(&(w->b)); -#ifdef BIG_ENDIAN_SIGN_YYY - p2 ^= (p1 ^ p2)&FP4_iszilch(&(w->b)); - return p2; -#else - p1 ^= (p1 ^ p2)&FP4_iszilch(&(w->a)); - return p1; -#endif - -} - -/* Set w=-x */ -void YYY::FP8_neg(FP8 *w, FP8 *x) -{ - /* Just one field neg */ - FP4 m, t; - FP8_norm(x); - FP4_add(&m, &(x->a), &(x->b)); - FP4_norm(&m); - FP4_neg(&m, &m); - FP4_add(&t, &m, &(x->b)); - FP4_add(&(w->b), &m, &(x->a)); - FP4_copy(&(w->a), &t); - FP8_norm(w); -} - -/* Set w=conj(x) */ -void YYY::FP8_conj(FP8 *w, FP8 *x) -{ - FP4_copy(&(w->a), &(x->a)); - FP4_neg(&(w->b), &(x->b)); - FP8_norm(w); -} - -/* Set w=-conj(x) */ -void YYY::FP8_nconj(FP8 *w, FP8 *x) -{ - FP4_copy(&(w->b), &(x->b)); - FP4_neg(&(w->a), &(x->a)); - FP8_norm(w); -} - -/* Set w=x+y */ -void YYY::FP8_add(FP8 *w, FP8 *x, FP8 *y) -{ - FP4_add(&(w->a), &(x->a), &(y->a)); - FP4_add(&(w->b), &(x->b), &(y->b)); -} - -/* Set w=x-y */ -/* Input y MUST be normed */ -void YYY::FP8_sub(FP8 *w, FP8 *x, FP8 *y) -{ - FP8 my; - - FP8_neg(&my, y); - FP8_add(w, x, &my); - -} - -/* reduce all components of w mod Modulus */ -void YYY::FP8_reduce(FP8 *w) -{ - FP4_reduce(&(w->a)); - FP4_reduce(&(w->b)); -} - -/* normalise all elements of w */ -void YYY::FP8_norm(FP8 *w) -{ - FP4_norm(&(w->a)); - FP4_norm(&(w->b)); -} - -/* Set w=s*x, where s is FP4 */ -void YYY::FP8_pmul(FP8 *w, FP8 *x, FP4 *s) -{ - FP4_mul(&(w->a), &(x->a), s); - FP4_mul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is FP2 */ -void YYY::FP8_qmul(FP8 *w, FP8 *x, FP2 *s) -{ - FP4_pmul(&(w->a), &(x->a), s); - FP4_pmul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is FP */ -void YYY::FP8_tmul(FP8 *w, FP8 *x, FP *s) -{ - FP4_qmul(&(w->a), &(x->a), s); - FP4_qmul(&(w->b), &(x->b), s); -} - -/* Set w=s*x, where s is int */ -void YYY::FP8_imul(FP8 *w, FP8 *x, int s) -{ - FP4_imul(&(w->a), &(x->a), s); - FP4_imul(&(w->b), &(x->b), s); -} - -/* Set w=x^2 */ -/* Input MUST be normed */ -void YYY::FP8_sqr(FP8 *w, FP8 *x) -{ - FP4 t1, t2, t3; - - FP4_mul(&t3, &(x->a), &(x->b)); /* norms x */ - FP4_copy(&t2, &(x->b)); - FP4_add(&t1, &(x->a), &(x->b)); - FP4_times_i(&t2); - - FP4_add(&t2, &(x->a), &t2); - - FP4_norm(&t1); // 2 - FP4_norm(&t2); // 2 - - FP4_mul(&(w->a), &t1, &t2); - - FP4_copy(&t2, &t3); - FP4_times_i(&t2); - - FP4_add(&t2, &t2, &t3); - - FP4_norm(&t2); // 2 - FP4_neg(&t2, &t2); - FP4_add(&(w->a), &(w->a), &t2); /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */ - FP4_add(&(w->b), &t3, &t3); /* b=2ab */ - - FP8_norm(w); -} - -/* Set w=x*y */ -/* Inputs MUST be normed */ -void YYY::FP8_mul(FP8 *w, FP8 *x, FP8 *y) -{ - - FP4 t1, t2, t3, t4; - - FP4_mul(&t1, &(x->a), &(y->a)); - FP4_mul(&t2, &(x->b), &(y->b)); - FP4_add(&t3, &(y->b), &(y->a)); - FP4_add(&t4, &(x->b), &(x->a)); - - FP4_norm(&t4); // 2 - FP4_norm(&t3); // 2 - - FP4_mul(&t4, &t4, &t3); /* (xa+xb)(ya+yb) */ - FP4_neg(&t3, &t1); // 1 - FP4_add(&t4, &t4, &t3); //t4E=3 - FP4_norm(&t4); - - FP4_neg(&t3, &t2); // 1 - FP4_add(&(w->b), &t4, &t3); //wbE=3 - - FP4_times_i(&t2); - FP4_add(&(w->a), &t2, &t1); - - FP8_norm(w); -} - -/* output FP8 in format [a,b] */ -void YYY::FP8_output(FP8 *w) -{ - printf("["); - FP4_output(&(w->a)); - printf(","); - FP4_output(&(w->b)); - printf("]"); -} - -void YYY::FP8_rawoutput(FP8 *w) -{ - printf("["); - FP4_rawoutput(&(w->a)); - printf(","); - FP4_rawoutput(&(w->b)); - printf("]"); -} - -/* Set w=1/x */ -void YYY::FP8_inv(FP8 *w, FP8 *x, FP *h) -{ - FP4 t1, t2; - FP4_sqr(&t1, &(x->a)); - FP4_sqr(&t2, &(x->b)); - FP4_times_i(&t2); - FP4_norm(&t2); - - FP4_sub(&t1, &t1, &t2); - FP4_norm(&t1); - FP4_inv(&t1, &t1, h); - - FP4_mul(&(w->a), &t1, &(x->a)); - FP4_neg(&t1, &t1); - FP4_norm(&t1); - FP4_mul(&(w->b), &t1, &(x->b)); -} - -/* w*=i where i = sqrt(sqrt(-1+sqrt(-1))) */ -void YYY::FP8_times_i(FP8 *w) -{ - FP4 s, t; - FP4_copy(&s, &(w->b)); - FP4_copy(&t, &(w->a)); - FP4_times_i(&s); - FP4_copy(&(w->a), &s); - FP4_copy(&(w->b), &t); - FP8_norm(w); -#if TOWER_YYY == POSITOWER - FP8_neg(w, w); // *** - FP8_norm(w); -#endif -} - -void YYY::FP8_times_i2(FP8 *w) -{ - FP4_times_i(&(w->a)); - FP4_times_i(&(w->b)); -} - -/* Set w=w^p using Frobenius */ -void YYY::FP8_frob(FP8 *w, FP2 *f) -{ // f=(i+1)^(p-3)/4 - FP2 ff; - FP2_sqr(&ff, f); // (i+1)^(p-3)/2 - FP2_mul_ip(&ff); // (i+1)^(p-1)/2 - FP2_norm(&ff); - FP4_frob(&(w->a), &ff); - FP4_frob(&(w->b), &ff); - FP4_pmul(&(w->b), &(w->b), f); // times (1+i)^(p-3)/4 - FP4_times_i(&(w->b)); // (i+1)^(p-1)/4 -} - -/* Set r=a^b mod m */ -/* -void YYY::FP8_pow(FP8 *r, FP8* a, BIG b) -{ - FP8 w; - BIG z, zilch; - int bt; - - BIG_zero(zilch); - - BIG_copy(z, b); - FP8_copy(&w, a); - FP8_one(r); - BIG_norm(z); - - while (1) - { - bt = BIG_parity(z); - BIG_shr(z, 1); - if (bt) FP8_mul(r, r, &w); - if (BIG_comp(z, zilch) == 0) break; - FP8_sqr(&w, &w); - } - FP8_reduce(r); -}*/ -/* -#if CURVE_SECURITY_ZZZ == 192 -*/ -/* XTR xtr_a function */ -/* -void YYY::FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z) -{ - FP8 t1, t2; - - FP8_copy(r, x); - FP8_sub(&t1, w, y); - FP8_norm(&t1); - FP8_pmul(&t1, &t1, &(r->a)); - FP8_add(&t2, w, y); - FP8_norm(&t2); - FP8_pmul(&t2, &t2, &(r->b)); - FP8_times_i(&t2); - - FP8_add(r, &t1, &t2); - FP8_add(r, r, z); - - FP8_reduce(r); -} -*/ -/* XTR xtr_d function */ -/* -void YYY::FP8_xtr_D(FP8 *r, FP8 *x) -{ - FP8 w; - FP8_copy(r, x); - FP8_conj(&w, r); - FP8_add(&w, &w, &w); - FP8_sqr(r, r); - FP8_norm(&w); - FP8_sub(r, r, &w); - FP8_reduce(r); // reduce here as multiple calls trigger automatic reductions -} -*/ -/* r=x^n using XTR method on traces of FP24s */ -/* -void YYY::FP8_xtr_pow(FP8 *r, FP8 *x, BIG n) -{ - int i, par, nb; - BIG v; - FP2 w2; - FP4 w4; - FP8 t, a, b, c, sf; - - BIG_zero(v); - BIG_inc(v, 3); - BIG_norm(v); - FP2_from_BIG(&w2, v); - FP4_from_FP2(&w4, &w2); - FP8_from_FP4(&a, &w4); - - FP8_copy(&sf, x); - FP8_norm(&sf); - FP8_copy(&b, &sf); - FP8_xtr_D(&c, &sf); - - par = BIG_parity(n); - BIG_copy(v, n); - BIG_norm(v); - BIG_shr(v, 1); - if (par == 0) - { - BIG_dec(v, 1); - BIG_norm(v); - } - - nb = BIG_nbits(v); - for (i = nb - 1; i >= 0; i--) - { - if (!BIG_bit(v, i)) - { - FP8_copy(&t, &b); - FP8_conj(&sf, &sf); - FP8_conj(&c, &c); - FP8_xtr_A(&b, &a, &b, &sf, &c); - FP8_conj(&sf, &sf); - FP8_xtr_D(&c, &t); - FP8_xtr_D(&a, &a); - } - else - { - FP8_conj(&t, &a); - FP8_xtr_D(&a, &b); - FP8_xtr_A(&b, &c, &b, &sf, &t); - FP8_xtr_D(&c, &c); - } - } - - if (par == 0) FP8_copy(r, &c); - else FP8_copy(r, &b); - FP8_reduce(r); -} -*/ -/* r=ck^a.cl^n using XTR double exponentiation method on traces of FP24s. See Stam thesis. */ -/* -void YYY::FP8_xtr_pow2(FP8 *r, FP8 *ck, FP8 *cl, FP8 *ckml, FP8 *ckm2l, BIG a, BIG b) -{ - int i, f2; - BIG d, e, w; - FP8 t, cu, cv, cumv, cum2v; - - - BIG_copy(e, a); - BIG_copy(d, b); - BIG_norm(e); - BIG_norm(d); - - FP8_copy(&cu, ck); - FP8_copy(&cv, cl); - FP8_copy(&cumv, ckml); - FP8_copy(&cum2v, ckm2l); - - f2 = 0; - while (BIG_parity(d) == 0 && BIG_parity(e) == 0) - { - BIG_shr(d, 1); - BIG_shr(e, 1); - f2++; - } - while (BIG_comp(d, e) != 0) - { - if (BIG_comp(d, e) > 0) - { - BIG_imul(w, e, 4); - BIG_norm(w); - if (BIG_comp(d, w) <= 0) - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_sub(e, w, e); - BIG_norm(e); - FP8_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP8_conj(&cum2v, &cumv); - FP8_copy(&cumv, &cv); - FP8_copy(&cv, &cu); - FP8_copy(&cu, &t); - } - else if (BIG_parity(d) == 0) - { - BIG_shr(d, 1); - FP8_conj(r, &cum2v); - FP8_xtr_A(&t, &cu, &cumv, &cv, r); - FP8_xtr_D(&cum2v, &cumv); - FP8_copy(&cumv, &t); - FP8_xtr_D(&cu, &cu); - } - else if (BIG_parity(e) == 1) - { - BIG_sub(d, d, e); - BIG_norm(d); - BIG_shr(d, 1); - FP8_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP8_xtr_D(&cu, &cu); - FP8_xtr_D(&cum2v, &cv); - FP8_conj(&cum2v, &cum2v); - FP8_copy(&cv, &t); - } - else - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_shr(d, 1); - BIG_copy(e, w); - FP8_xtr_D(&t, &cumv); - FP8_conj(&cumv, &cum2v); - FP8_conj(&cum2v, &t); - FP8_xtr_D(&t, &cv); - FP8_copy(&cv, &cu); - FP8_copy(&cu, &t); - } - } - if (BIG_comp(d, e) < 0) - { - BIG_imul(w, d, 4); - BIG_norm(w); - if (BIG_comp(e, w) <= 0) - { - BIG_sub(e, e, d); - BIG_norm(e); - FP8_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP8_copy(&cum2v, &cumv); - FP8_copy(&cumv, &cu); - FP8_copy(&cu, &t); - } - else if (BIG_parity(e) == 0) - { - BIG_copy(w, d); - BIG_copy(d, e); - BIG_shr(d, 1); - BIG_copy(e, w); - FP8_xtr_D(&t, &cumv); - FP8_conj(&cumv, &cum2v); - FP8_conj(&cum2v, &t); - FP8_xtr_D(&t, &cv); - FP8_copy(&cv, &cu); - FP8_copy(&cu, &t); - } - else if (BIG_parity(d) == 1) - { - BIG_copy(w, e); - BIG_copy(e, d); - BIG_sub(w, w, d); - BIG_norm(w); - BIG_copy(d, w); - BIG_shr(d, 1); - FP8_xtr_A(&t, &cu, &cv, &cumv, &cum2v); - FP8_conj(&cumv, &cumv); - FP8_xtr_D(&cum2v, &cu); - FP8_conj(&cum2v, &cum2v); - FP8_xtr_D(&cu, &cv); - FP8_copy(&cv, &t); - } - else - { - BIG_shr(d, 1); - FP8_conj(r, &cum2v); - FP8_xtr_A(&t, &cu, &cumv, &cv, r); - FP8_xtr_D(&cum2v, &cumv); - FP8_copy(&cumv, &t); - FP8_xtr_D(&cu, &cu); - } - } - } - FP8_xtr_A(r, &cu, &cv, &cumv, &cum2v); - for (i = 0; i < f2; i++) FP8_xtr_D(r, r); - FP8_xtr_pow(r, r, d); -} - -#endif -*/ - -/* New stuff for ECp8 support */ - -/* Set w=x/2 */ -void YYY::FP8_div2(FP8 *w, FP8 *x) -{ - FP4_div2(&(w->a), &(x->a)); - FP4_div2(&(w->b), &(x->b)); -} - -/* Move b to a if d=1 */ -void YYY::FP8_cmove(FP8 *f, FP8 *g, int d) -{ - FP4_cmove(&(f->a), &(g->a), d); - FP4_cmove(&(f->b), &(g->b), d); -} - -void YYY::FP8_rand(FP8 *x,csprng *rng) -{ - FP4_rand(&(x->a),rng); - FP4_rand(&(x->b),rng); -} - -#if PAIRING_FRIENDLY_ZZZ == BLS48_CURVE - -/* test for x a QR */ -int YYY::FP8_qr(FP8 *x,FP *h) -{ /* test x^(p^4-1)/2 = 1 */ - FP8 c; - FP8_conj(&c,x); - FP8_mul(&c,&c,x); - - return FP4_qr(&(c.a),h); -} - -/* sqrt(a+xb) = sqrt((a+sqrt(a*a-n*b*b))/2)+x.b/(2*sqrt((a+sqrt(a*a-n*b*b))/2)) */ - -void YYY::FP8_sqrt(FP8 *r, FP8* x, FP *h) -{ - FP4 a, b, s, t; - FP8 nr; - FP hint,twk; - int sgn,qr; - FP8_copy(r, x); - if (FP8_iszilch(x)) return; - - FP4_copy(&a, &(x->a)); - FP4_copy(&s, &(x->b)); - - FP4_sqr(&s, &s); // s*=s - FP4_sqr(&a, &a); // a*=a - FP4_times_i(&s); - FP4_norm(&s); - FP4_sub(&a, &a, &s); // a-=txx(s) - FP4_norm(&a); // ** - FP4_sqrt(&s, &a, h); - - FP4_copy(&t, &(x->a)); - FP4_add(&a, &t, &s); - FP4_norm(&a); - FP4_div2(&a, &a); - - FP4_div2(&b,&(r->b)); // w1=b/2 - qr=FP4_qr(&a,&hint); // only exp! Cost=+1 - -// tweak hint - multiply old hint by Norm(1/Beta)^e where Beta is irreducible polynomial - FP4_copy(&s,&a); - FP_rcopy(&twk,TWK); - FP_mul(&twk,&twk,&hint); - FP4_div_i(&s); FP4_norm(&s); // switch to other candidate - - FP4_cmove(&a,&s,1-qr); - FP_cmove(&hint,&twk,1-qr); - - FP4_sqrt(&(r->a),&a,&hint); // a=sqrt(w2) Cost=+1 - FP4_inv(&s,&a,&hint); // w3=1/w2 - FP4_mul(&s,&s,&(r->a)); // w3=1/sqrt(w2) - FP4_mul(&(r->b),&s,&b); // b=(b/2)*1/sqrt(w2) - FP4_copy(&t,&(r->a)); - - FP4_cmove(&(r->a),&(r->b),1-qr); - FP4_cmove(&(r->b),&t,1-qr); - - sgn=FP8_sign(r); - FP8_neg(&nr,r); FP8_norm(&nr); - FP8_cmove(r,&nr,sgn); -} - -void YYY::FP8_div_i(FP8 *f) -{ - FP4 u, v; - FP4_copy(&u, &(f->a)); - FP4_copy(&v, &(f->b)); - - FP4_div_i(&u); - - FP4_copy(&(f->a), &v); - FP4_copy(&(f->b), &u); -#if TOWER_YYY == POSITOWER - FP8_neg(f, f); // *** - FP8_norm(f); -#endif -} - - - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/gcm.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/gcm.cpp deleted file mode 100644 index 843ab0f..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/gcm.cpp +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Implementation of the AES-GCM Encryption/Authentication - * - * Some restrictions.. - * 1. Only for use with AES - * 2. Returned tag is always 128-bits. Truncate at your own risk. - * 3. The order of function calls must follow some rules - * - * Typical sequence of calls.. - * 1. call GCM_init - * 2. call GCM_add_header any number of times, as long as length of header is multiple of 16 bytes (block size) - * 3. call GCM_add_header one last time with any length of header - * 4. call GCM_add_cipher any number of times, as long as length of cipher/plaintext is multiple of 16 bytes - * 5. call GCM_add_cipher one last time with any length of cipher/plaintext - * 6. call GCM_finish to extract the tag. - * - * See http://www.mindspring.com/~dmcgrew/gcm-nist-6.pdf - */ -/* SU=m, m is Stack Usage */ - -#include -#include -#include "arch.h" -#include "core.h" - -using namespace core; - -#define NB 4 -#define MR_TOBYTE(x) ((uchar)((x))) - -static unsign32 pack(const uchar *b) -{ - /* pack bytes into a 32-bit Word */ - return ((unsign32)b[0] << 24) | ((unsign32)b[1] << 16) | ((unsign32)b[2] << 8) | (unsign32)b[3]; -} - -static void unpack(unsign32 a, uchar *b) -{ - /* unpack bytes from a word */ - b[3] = MR_TOBYTE(a); - b[2] = MR_TOBYTE(a >> 8); - b[1] = MR_TOBYTE(a >> 16); - b[0] = MR_TOBYTE(a >> 24); -} - -static void precompute(gcm *g, uchar *H) -{ - /* precompute small 2k bytes gf2m table of x^n.H */ - int i, j; - unsign32 *last, *next, b; - - for (i = j = 0; i < NB; i++, j += 4) g->table[0][i] = pack((uchar *)&H[j]); - - for (i = 1; i < 128; i++) - { - next = g->table[i]; - last = g->table[i - 1]; - b = 0; - for (j = 0; j < NB; j++) - { - next[j] = b | (last[j]) >> 1; - b = last[j] << 31; - } - if (b) next[0] ^= 0xE1000000; /* irreducible polynomial */ - } -} - -/* SU= 32 */ -static void gf2mul(gcm *g) -{ - /* gf2m mul - Z=H*X mod 2^128 */ - int i, j, m, k; - unsign32 P[4]; - unsign32 b; - - P[0] = P[1] = P[2] = P[3] = 0; - j = 8; - m = 0; - for (i = 0; i < 128; i++) - { - b = (unsign32)(g->stateX[m] >> (--j)) & 1; - b = ~b + 1; - for (k = 0; k < NB; k++) P[k] ^= (g->table[i][k] & b); - if (j == 0) - { - j = 8; - m++; - if (m == 16) break; - } - } - for (i = j = 0; i < NB; i++, j += 4) unpack(P[i], (uchar *)&g->stateX[j]); -} - -/* SU= 32 */ -static void GCM_wrap(gcm *g) -{ - /* Finish off GHASH */ - int i, j; - unsign32 F[4]; - uchar L[16]; - - /* convert lengths from bytes to bits */ - F[0] = (g->lenA[0] << 3) | (g->lenA[1] & 0xE0000000) >> 29; - F[1] = g->lenA[1] << 3; - F[2] = (g->lenC[0] << 3) | (g->lenC[1] & 0xE0000000) >> 29; - F[3] = g->lenC[1] << 3; - for (i = j = 0; i < NB; i++, j += 4) unpack(F[i], (uchar *)&L[j]); - - for (i = 0; i < 16; i++) g->stateX[i] ^= L[i]; - gf2mul(g); -} - -static int GCM_ghash(gcm *g, char *plain, int len) -{ - int i, j = 0; - if (g->status == GCM_ACCEPTING_HEADER) g->status = GCM_ACCEPTING_CIPHER; - if (g->status != GCM_ACCEPTING_CIPHER) return 0; - - while (j < len) - { - for (i = 0; i < 16 && j < len; i++) - { - g->stateX[i] ^= plain[j++]; - g->lenC[1]++; - if (g->lenC[1] == 0) g->lenC[0]++; - } - gf2mul(g); - } - if (len % 16 != 0) g->status = GCM_NOT_ACCEPTING_MORE; - return 1; -} - -/* SU= 48 */ -/* Initialize GCM mode */ -void core::GCM_init(gcm* g, int nk, char *key, int niv, char *iv) -{ - /* iv size niv is usually 12 bytes (96 bits). AES key size nk can be 16,24 or 32 bytes */ - int i; - uchar H[16]; - for (i = 0; i < 16; i++) - { - H[i] = 0; - g->stateX[i] = 0; - } - - AES_init(&(g->a), ECB, nk, key, iv); - AES_ecb_encrypt(&(g->a), H); /* E(K,0) */ - precompute(g, H); - - g->lenA[0] = g->lenC[0] = g->lenA[1] = g->lenC[1] = 0; - if (niv == 12) - { - for (i = 0; i < 12; i++) g->a.f[i] = iv[i]; - unpack((unsign32)1, (uchar *) & (g->a.f[12])); /* initialise IV */ - for (i = 0; i < 16; i++) g->Y_0[i] = g->a.f[i]; - } - else - { - g->status = GCM_ACCEPTING_CIPHER; - GCM_ghash(g, iv, niv); /* GHASH(H,0,IV) */ - GCM_wrap(g); - for (i = 0; i < 16; i++) - { - g->a.f[i] = g->stateX[i]; - g->Y_0[i] = g->a.f[i]; - g->stateX[i] = 0; - } - g->lenA[0] = g->lenC[0] = g->lenA[1] = g->lenC[1] = 0; - } - g->status = GCM_ACCEPTING_HEADER; -} - -/* SU= 24 */ -/* Add Header data - included but not encrypted */ -int core::GCM_add_header(gcm* g, char *header, int len) -{ - /* Add some header. Won't be encrypted, but will be authenticated. len is length of header */ - int i, j = 0; - if (g->status != GCM_ACCEPTING_HEADER) return 0; - - while (j < len) - { - for (i = 0; i < 16 && j < len; i++) - { - g->stateX[i] ^= header[j++]; - g->lenA[1]++; - if (g->lenA[1] == 0) g->lenA[0]++; - } - gf2mul(g); - } - if (len % 16 != 0) g->status = GCM_ACCEPTING_CIPHER; - return 1; -} - -/* SU= 48 */ -/* Add Plaintext - included and encrypted */ -int core::GCM_add_plain(gcm *g, char *cipher, char *plain, int len) -{ - /* Add plaintext to extract ciphertext, len is length of plaintext. */ - int i, j = 0; - unsign32 counter; - uchar B[16]; - if (g->status == GCM_ACCEPTING_HEADER) g->status = GCM_ACCEPTING_CIPHER; - if (g->status != GCM_ACCEPTING_CIPHER) return 0; - - while (j < len) - { - counter = pack((uchar *) & (g->a.f[12])); - counter++; - unpack(counter, (uchar *) & (g->a.f[12])); /* increment counter */ - for (i = 0; i < 16; i++) B[i] = g->a.f[i]; - AES_ecb_encrypt(&(g->a), B); /* encrypt it */ - - for (i = 0; i < 16 && j < len; i++) - { - cipher[j] = plain[j] ^ B[i]; - g->stateX[i] ^= cipher[j++]; - g->lenC[1]++; - if (g->lenC[1] == 0) g->lenC[0]++; - } - gf2mul(g); - } - if (len % 16 != 0) g->status = GCM_NOT_ACCEPTING_MORE; - return 1; -} - -/* SU= 48 */ -/* Add Ciphertext - decrypts to plaintext */ -int core::GCM_add_cipher(gcm *g, char *plain, char *cipher, int len) -{ - /* Add ciphertext to extract plaintext, len is length of ciphertext. */ - int i, j = 0; - unsign32 counter; - char oc; - uchar B[16]; - if (g->status == GCM_ACCEPTING_HEADER) g->status = GCM_ACCEPTING_CIPHER; - if (g->status != GCM_ACCEPTING_CIPHER) return 0; - - while (j < len) - { - counter = pack((uchar *) & (g->a.f[12])); - counter++; - unpack(counter, (uchar *) & (g->a.f[12])); /* increment counter */ - for (i = 0; i < 16; i++) B[i] = g->a.f[i]; - AES_ecb_encrypt(&(g->a), B); /* encrypt it */ - for (i = 0; i < 16 && j < len; i++) - { - oc = cipher[j]; - plain[j] = cipher[j] ^ B[i]; - g->stateX[i] ^= oc; - j++; - g->lenC[1]++; - if (g->lenC[1] == 0) g->lenC[0]++; - } - gf2mul(g); - } - if (len % 16 != 0) g->status = GCM_NOT_ACCEPTING_MORE; - return 1; -} - -/* SU= 16 */ -/* Finish and extract Tag */ -void core::GCM_finish(gcm *g, char *tag) -{ - /* Finish off GHASH and extract tag (MAC) */ - int i; - - GCM_wrap(g); - - /* extract tag */ - if (tag != NULL) - { - AES_ecb_encrypt(&(g->a), g->Y_0); /* E(K,Y0) */ - for (i = 0; i < 16; i++) g->Y_0[i] ^= g->stateX[i]; - for (i = 0; i < 16; i++) - { - tag[i] = g->Y_0[i]; - g->Y_0[i] = g->stateX[i] = 0; - } - } - - g->status = GCM_FINISHED; - AES_end(&(g->a)); -} - -/* AES-GCM Encryption of octets, K is key, H is header, - P is plaintext, C is ciphertext, T is authentication tag */ -void core::AES_GCM_ENCRYPT(octet *K, octet *IV, octet *H, octet *P, octet *C, octet *T) -{ - gcm g; - GCM_init(&g, K->len, K->val, IV->len, IV->val); - GCM_add_header(&g, H->val, H->len); - GCM_add_plain(&g, C->val, P->val, P->len); - C->len = P->len; - GCM_finish(&g, T->val); - T->len = 16; -} - -/* AES-GCM Decryption of octets, K is key, H is header, - P is plaintext, C is ciphertext, T is authentication tag */ -void core::AES_GCM_DECRYPT(octet *K, octet *IV, octet *H, octet *C, octet *P, octet *T) -{ - gcm g; - GCM_init(&g, K->len, K->val, IV->len, IV->val); - GCM_add_header(&g, H->val, H->len); - GCM_add_cipher(&g, P->val, C->val, C->len); - P->len = C->len; - GCM_finish(&g, T->val); - T->len = 16; -} - - -// Compile with -// gcc -O2 gcm.c aes.c -o gcm.exe -/* SU= 16 -*/ - -/* static void hex2bytes(char *hex,char *bin) */ -/* { */ -/* int i; */ -/* char v; */ -/* int len=strlen(hex); */ -/* for (i = 0; i < len/2; i++) { */ -/* char c = hex[2*i]; */ -/* if (c >= '0' && c <= '9') { */ -/* v = c - '0'; */ -/* } else if (c >= 'A' && c <= 'F') { */ -/* v = c - 'A' + 10; */ -/* } else if (c >= 'a' && c <= 'f') { */ -/* v = c - 'a' + 10; */ -/* } else { */ -/* v = 0; */ -/* } */ -/* v <<= 4; */ -/* c = hex[2*i + 1]; */ -/* if (c >= '0' && c <= '9') { */ -/* v += c - '0'; */ -/* } else if (c >= 'A' && c <= 'F') { */ -/* v += c - 'A' + 10; */ -/* } else if (c >= 'a' && c <= 'f') { */ -/* v += c - 'a' + 10; */ -/* } else { */ -/* v = 0; */ -/* } */ -/* bin[i] = v; */ -/* } */ -/* } */ - -/* -int main() -{ - int i; - -// char* KT="feffe9928665731c6d6a8f9467308308"; -// char* MT="d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39"; -// char* HT="feedfacedeadbeeffeedfacedeadbeefabaddad2"; -// char* NT="cafebabefacedbaddecaf888"; -// Tag should be 5bc94fbc3221a5db94fae95ae7121a47 -// char* NT="9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b"; -// Tag should be 619cc5aefffe0bfa462af43c1699d050 - - char* KT="6dfb5dc68af6ae2f3242e9184f100918"; - char* MT="47809d16c2c6ec685962c90e53fe1bba"; - char* HT="dd0fa6e494031139d71ee45f00d56fa4"; - char* NT="37d36f5c54d53479d4745dd1"; - - - int len=strlen(MT)/2; - int lenH=strlen(HT)/2; - int lenK=strlen(KT)/2; - int lenIV=strlen(NT)/2; - - char T[16]; // Tag - char K[16]; // AES Key - char H[64]; // Header - to be included in Authentication, but not encrypted - char N[100]; // IV - Initialisation vector - char M[100]; // Plaintext to be encrypted/authenticated - char C[100]; // Ciphertext - char P[100]; // Recovered Plaintext - - gcm g; - - hex2bytes(MT, M); - hex2bytes(HT, H); - hex2bytes(NT, N); - hex2bytes(KT, K); - - printf("lenK= %d\n",lenK); - - printf("Plaintext=\n"); - for (i=0;i>n) | ((x)<<(m-n))) -#define R(n,x) ((x)>>n) - -#define Ch(x,y,z) ((x&y)^(~(x)&z)) -#define Maj(x,y,z) ((x&y)^(x&z)^(y&z)) -#define Sig0_256(x) (S(32,2,x)^S(32,13,x)^S(32,22,x)) -#define Sig1_256(x) (S(32,6,x)^S(32,11,x)^S(32,25,x)) -#define theta0_256(x) (S(32,7,x)^S(32,18,x)^R(3,x)) -#define theta1_256(x) (S(32,17,x)^S(32,19,x)^R(10,x)) - -#define Sig0_512(x) (S(64,28,x)^S(64,34,x)^S(64,39,x)) -#define Sig1_512(x) (S(64,14,x)^S(64,18,x)^S(64,41,x)) -#define theta0_512(x) (S(64,1,x)^S(64,8,x)^R(7,x)) -#define theta1_512(x) (S(64,19,x)^S(64,61,x)^R(6,x)) - - -/* SU= 72 */ -static void HASH256_transform(hash256 *sh) -{ - /* basic transformation step */ - unsign32 a, b, c, d, e, f, g, h, t1, t2; - int j; - for (j = 16; j < 64; j++) - sh->w[j] = theta1_256(sh->w[j - 2]) + sh->w[j - 7] + theta0_256(sh->w[j - 15]) + sh->w[j - 16]; - - a = sh->h[0]; - b = sh->h[1]; - c = sh->h[2]; - d = sh->h[3]; - e = sh->h[4]; - f = sh->h[5]; - g = sh->h[6]; - h = sh->h[7]; - - for (j = 0; j < 64; j++) - { - /* 64 times - mush it up */ - t1 = h + Sig1_256(e) + Ch(e, f, g) + K_256[j] + sh->w[j]; - t2 = Sig0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - - sh->h[0] += a; - sh->h[1] += b; - sh->h[2] += c; - sh->h[3] += d; - sh->h[4] += e; - sh->h[5] += f; - sh->h[6] += g; - sh->h[7] += h; -} - -/* Initialise Hash function */ -void core::HASH256_init(hash256 *sh) -{ - /* re-initialise */ - int i; - for (i = 0; i < 64; i++) sh->w[i] = 0L; - sh->length[0] = sh->length[1] = 0L; - sh->h[0] = H0_256; - sh->h[1] = H1_256; - sh->h[2] = H2_256; - sh->h[3] = H3_256; - sh->h[4] = H4_256; - sh->h[5] = H5_256; - sh->h[6] = H6_256; - sh->h[7] = H7_256; - - sh->hlen = 32; -} - -/* process a single byte */ -void core::HASH256_process(hash256 *sh, int byt) -{ - /* process the next message byte */ - int cnt; - cnt = (int)((sh->length[0] / 32) % 16); - - sh->w[cnt] <<= 8; - sh->w[cnt] |= (unsign32)(byt & 0xFF); - - sh->length[0] += 8; - if (sh->length[0] == 0L) - { - sh->length[1]++; - sh->length[0] = 0L; - } - if ((sh->length[0] % 512) == 0) HASH256_transform(sh); -} - -/* SU= 24 */ -/* Generate 32-byte final Hash */ -void core::HASH256_hash(hash256 *sh, char *digest) -{ - /* pad message and finish - supply digest */ - int i; - unsign32 len0, len1; - len0 = sh->length[0]; - len1 = sh->length[1]; - HASH256_process(sh, PAD); - while ((sh->length[0] % 512) != 448) HASH256_process(sh, ZERO); - sh->w[14] = len1; - sh->w[15] = len0; - HASH256_transform(sh); - for (i = 0; i < sh->hlen; i++) - { - /* convert to bytes */ - digest[i] = (char)((sh->h[i / 4] >> (8 * (3 - i % 4))) & 0xffL); - } - HASH256_init(sh); -} - -/* return 32-byte intermediate hash */ -void core::HASH256_continuing_hash(hash256 *sh,char *digest) -{ - hash256 cp=*sh; - HASH256_hash(&cp,digest); -} - - -#define H0_512 0x6a09e667f3bcc908 -#define H1_512 0xbb67ae8584caa73b -#define H2_512 0x3c6ef372fe94f82b -#define H3_512 0xa54ff53a5f1d36f1 -#define H4_512 0x510e527fade682d1 -#define H5_512 0x9b05688c2b3e6c1f -#define H6_512 0x1f83d9abfb41bd6b -#define H7_512 0x5be0cd19137e2179 - -#define H8_512 0xcbbb9d5dc1059ed8 -#define H9_512 0x629a292a367cd507 -#define HA_512 0x9159015a3070dd17 -#define HB_512 0x152fecd8f70e5939 -#define HC_512 0x67332667ffc00b31 -#define HD_512 0x8eb44a8768581511 -#define HE_512 0xdb0c2e0d64f98fa7 -#define HF_512 0x47b5481dbefa4fa4 - -/* */ - -static const unsign64 K_512[80] = -{ - 0x428a2f98d728ae22 , 0x7137449123ef65cd , 0xb5c0fbcfec4d3b2f , 0xe9b5dba58189dbbc , - 0x3956c25bf348b538 , 0x59f111f1b605d019 , 0x923f82a4af194f9b , 0xab1c5ed5da6d8118 , - 0xd807aa98a3030242 , 0x12835b0145706fbe , 0x243185be4ee4b28c , 0x550c7dc3d5ffb4e2 , - 0x72be5d74f27b896f , 0x80deb1fe3b1696b1 , 0x9bdc06a725c71235 , 0xc19bf174cf692694 , - 0xe49b69c19ef14ad2 , 0xefbe4786384f25e3 , 0x0fc19dc68b8cd5b5 , 0x240ca1cc77ac9c65 , - 0x2de92c6f592b0275 , 0x4a7484aa6ea6e483 , 0x5cb0a9dcbd41fbd4 , 0x76f988da831153b5 , - 0x983e5152ee66dfab , 0xa831c66d2db43210 , 0xb00327c898fb213f , 0xbf597fc7beef0ee4 , - 0xc6e00bf33da88fc2 , 0xd5a79147930aa725 , 0x06ca6351e003826f , 0x142929670a0e6e70 , - 0x27b70a8546d22ffc , 0x2e1b21385c26c926 , 0x4d2c6dfc5ac42aed , 0x53380d139d95b3df , - 0x650a73548baf63de , 0x766a0abb3c77b2a8 , 0x81c2c92e47edaee6 , 0x92722c851482353b , - 0xa2bfe8a14cf10364 , 0xa81a664bbc423001 , 0xc24b8b70d0f89791 , 0xc76c51a30654be30 , - 0xd192e819d6ef5218 , 0xd69906245565a910 , 0xf40e35855771202a , 0x106aa07032bbd1b8 , - 0x19a4c116b8d2d0c8 , 0x1e376c085141ab53 , 0x2748774cdf8eeb99 , 0x34b0bcb5e19b48a8 , - 0x391c0cb3c5c95a63 , 0x4ed8aa4ae3418acb , 0x5b9cca4f7763e373 , 0x682e6ff3d6b2b8a3 , - 0x748f82ee5defb2fc , 0x78a5636f43172f60 , 0x84c87814a1f0ab72 , 0x8cc702081a6439ec , - 0x90befffa23631e28 , 0xa4506cebde82bde9 , 0xbef9a3f7b2c67915 , 0xc67178f2e372532b , - 0xca273eceea26619c , 0xd186b8c721c0c207 , 0xeada7dd6cde0eb1e , 0xf57d4f7fee6ed178 , - 0x06f067aa72176fba , 0x0a637dc5a2c898a6 , 0x113f9804bef90dae , 0x1b710b35131c471b , - 0x28db77f523047d84 , 0x32caab7b40c72493 , 0x3c9ebe0a15c9bebc , 0x431d67c49c100d4c , - 0x4cc5d4becb3e42b6 , 0x597f299cfc657e2a , 0x5fcb6fab3ad6faec , 0x6c44198c4a475817 -}; - -static void HASH512_transform(hash512 *sh) -{ - /* basic transformation step */ - unsign64 a, b, c, d, e, f, g, h, t1, t2; - int j; - for (j = 16; j < 80; j++) - sh->w[j] = theta1_512(sh->w[j - 2]) + sh->w[j - 7] + theta0_512(sh->w[j - 15]) + sh->w[j - 16]; - - a = sh->h[0]; - b = sh->h[1]; - c = sh->h[2]; - d = sh->h[3]; - e = sh->h[4]; - f = sh->h[5]; - g = sh->h[6]; - h = sh->h[7]; - - for (j = 0; j < 80; j++) - { - /* 80 times - mush it up */ - t1 = h + Sig1_512(e) + Ch(e, f, g) + K_512[j] + sh->w[j]; - t2 = Sig0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - sh->h[0] += a; - sh->h[1] += b; - sh->h[2] += c; - sh->h[3] += d; - sh->h[4] += e; - sh->h[5] += f; - sh->h[6] += g; - sh->h[7] += h; -} - -void core::HASH384_init(hash384 *sh) -{ - /* re-initialise */ - int i; - for (i = 0; i < 80; i++) sh->w[i] = 0; - sh->length[0] = sh->length[1] = 0; - sh->h[0] = H8_512; - sh->h[1] = H9_512; - sh->h[2] = HA_512; - sh->h[3] = HB_512; - sh->h[4] = HC_512; - sh->h[5] = HD_512; - sh->h[6] = HE_512; - sh->h[7] = HF_512; - - sh->hlen = 48; -} - -void core::HASH384_process(hash384 *sh, int byt) -{ - /* process the next message byte */ - HASH512_process(sh, byt); -} - -void core::HASH384_hash(hash384 *sh, char *digest) -{ - /* pad message and finish - supply digest */ - HASH512_hash(sh, digest); -} - -/* return intermediate hash */ -void core::HASH384_continuing_hash(hash384 *sh,char *digest) -{ - hash384 cp=*sh; - HASH384_hash(&cp,digest); -} - -void core::HASH512_init(hash512 *sh) -{ - /* re-initialise */ - int i; - - for (i = 0; i < 80; i++) sh->w[i] = 0; - sh->length[0] = sh->length[1] = 0; - sh->h[0] = H0_512; - sh->h[1] = H1_512; - sh->h[2] = H2_512; - sh->h[3] = H3_512; - sh->h[4] = H4_512; - sh->h[5] = H5_512; - sh->h[6] = H6_512; - sh->h[7] = H7_512; - - sh->hlen = 64; -} - -void core::HASH512_process(hash512 *sh, int byt) -{ - /* process the next message byte */ - int cnt; - - cnt = (int)((sh->length[0] / 64) % 16); - - sh->w[cnt] <<= 8; - sh->w[cnt] |= (unsign64)(byt & 0xFF); - - sh->length[0] += 8; - if (sh->length[0] == 0L) - { - sh->length[1]++; - sh->length[0] = 0L; - } - if ((sh->length[0] % 1024) == 0) HASH512_transform(sh); -} - -void core::HASH512_hash(hash512 *sh, char *digest) -{ - /* pad message and finish - supply digest */ - int i; - unsign64 len0, len1; - len0 = sh->length[0]; - len1 = sh->length[1]; - HASH512_process(sh, PAD); - while ((sh->length[0] % 1024) != 896) HASH512_process(sh, ZERO); - sh->w[14] = len1; - sh->w[15] = len0; - HASH512_transform(sh); - for (i = 0; i < sh->hlen; i++) - { - /* convert to bytes */ - digest[i] = (char)((sh->h[i / 8] >> (8 * (7 - i % 8))) & 0xffL); - } - HASH512_init(sh); -} - -/* return intermediate hash */ -void core::HASH512_continuing_hash(hash512 *sh,char *digest) -{ - hash512 cp=*sh; - HASH512_hash(&cp,digest); -} - -/* SHA3 */ - -#define SHA3_ROUNDS 24 -#define rotl(x,n) (((x)<>(64-n))) - -/* round constants */ - -static const unsign64 RC[24] = { - 0x0000000000000001UL, 0x0000000000008082UL, 0x800000000000808AUL, 0x8000000080008000UL, - 0x000000000000808BUL, 0x0000000080000001UL, 0x8000000080008081UL, 0x8000000000008009UL, - 0x000000000000008AUL, 0x0000000000000088UL, 0x0000000080008009UL, 0x000000008000000AUL, - 0x000000008000808BUL, 0x800000000000008BUL, 0x8000000000008089UL, 0x8000000000008003UL, - 0x8000000000008002UL, 0x8000000000000080UL, 0x000000000000800AUL, 0x800000008000000AUL, - 0x8000000080008081UL, 0x8000000000008080UL, 0x0000000080000001UL, 0x8000000080008008UL -}; - -static void SHA3_transform(sha3 *sh) -{ - int k; - unsign64 B00,B01,B02,B03,B04,B10,B11,B12,B13,B14,B20,B21,B22,B23,B24,B30,B31,B32,B33,B34,B40,B41,B42,B43,B44; - unsign64 C0,C1,C2,C3,C4,D0,D1,D2,D3,D4; - - for (k = 0; k < SHA3_ROUNDS; k++) - { - - C0=sh->S[0] ^ sh->S[5] ^ sh->S[10] ^ sh->S[15] ^ sh->S[20]; - C1=sh->S[1] ^ sh->S[6] ^ sh->S[11] ^ sh->S[16] ^ sh->S[21]; - C2=sh->S[2] ^ sh->S[7] ^ sh->S[12] ^ sh->S[17] ^ sh->S[22]; - C3=sh->S[3] ^ sh->S[8] ^ sh->S[13] ^ sh->S[18] ^ sh->S[23]; - C4=sh->S[4] ^ sh->S[9] ^ sh->S[14] ^ sh->S[19] ^ sh->S[24]; - - D0 = C4 ^ rotl(C1, 1); - D1 = C0 ^ rotl(C2, 1); - D2 = C1 ^ rotl(C3, 1); - D3 = C2 ^ rotl(C4, 1); - D4 = C3 ^ rotl(C0, 1); - - B00 = sh->S[0]^D0; - B02 = rotl(sh->S[1]^D1, 1); - B04 = rotl(sh->S[2]^D2, 62); - B01 = rotl(sh->S[3]^D3, 28); - B03 = rotl(sh->S[4]^D4, 27); - - B13 = rotl(sh->S[5]^D0, 36); - B10 = rotl(sh->S[6]^D1, 44); - B12 = rotl(sh->S[7]^D2, 6); - B14 = rotl(sh->S[8]^D3, 55); - B11 = rotl(sh->S[9]^D4, 20); - - B21 = rotl(sh->S[10]^D0, 3); - B23 = rotl(sh->S[11]^D1, 10); - B20 = rotl(sh->S[12]^D2, 43); - B22 = rotl(sh->S[13]^D3, 25); - B24 = rotl(sh->S[14]^D4, 39); - - B34 = rotl(sh->S[15]^D0, 41); - B31 = rotl(sh->S[16]^D1, 45); - B33 = rotl(sh->S[17]^D2, 15); - B30 = rotl(sh->S[18]^D3, 21); - B32 = rotl(sh->S[19]^D4, 8); - - B42 = rotl(sh->S[20]^D0, 18); - B44 = rotl(sh->S[21]^D1, 2); - B41 = rotl(sh->S[22]^D2, 61); - B43 = rotl(sh->S[23]^D3, 56); - B40 = rotl(sh->S[24]^D4, 14); - - sh->S[0]=B00^(~B10&B20); - sh->S[1]=B10^(~B20&B30); - sh->S[2]=B20^(~B30&B40); - sh->S[3]=B30^(~B40&B00); - sh->S[4]=B40^(~B00&B10); - - sh->S[5]=B01^(~B11&B21); - sh->S[6]=B11^(~B21&B31); - sh->S[7]=B21^(~B31&B41); - sh->S[8]=B31^(~B41&B01); - sh->S[9]=B41^(~B01&B11); - - sh->S[10]=B02^(~B12&B22); - sh->S[11]=B12^(~B22&B32); - sh->S[12]=B22^(~B32&B42); - sh->S[13]=B32^(~B42&B02); - sh->S[14]=B42^(~B02&B12); - - sh->S[15]=B03^(~B13&B23); - sh->S[16]=B13^(~B23&B33); - sh->S[17]=B23^(~B33&B43); - sh->S[18]=B33^(~B43&B03); - sh->S[19]=B43^(~B03&B13); - - sh->S[20]=B04^(~B14&B24); - sh->S[21]=B14^(~B24&B34); - sh->S[22]=B24^(~B34&B44); - sh->S[23]=B34^(~B44&B04); - sh->S[24]=B44^(~B04&B14); - - sh->S[0] ^= RC[k]; - } -} - -/* Re-Initialize. olen is output length in bytes - - should be 28, 32, 48 or 64 (224, 256, 384, 512 bits resp.) */ - -void core::SHA3_init(sha3 *sh, int olen) -{ - int i; - for (i = 0; i < 25; i++) - sh->S[i] = 0; /* 5x5x8 bytes = 200 bytes of state */ - - sh->length = 0; - sh->len = olen; - sh->rate = 200 - 2 * olen; /* number of bytes consumed in one gulp. Note that some bytes in the - state ("capacity") are not touched. Gulps are smaller for larger digests. - Important that olenlength); - int b = cnt % 8; - cnt /= 8; - sh->S[cnt] ^= ((unsign64)(byt & 0xff) << (8 * b)); - sh->length++; - if (sh->length == sh->rate) - { - sh->length=0; - SHA3_transform(sh); - } -} - -/* squeeze the sponge */ -void core::SHA3_squeeze(sha3 *sh, char *buff, int len) -{ - int i, j, k, m = 0; - unsign64 el; - int nb=len/sh->rate; -// squeeze out full blocks - for (j=0;jrate/8;i++) - { - el=sh->S[i]; - for (k=0;k<8;k++) - { - buff[m++] = (el & 0xff); - el >>= 8; - } - } - SHA3_transform(sh); - } - -// squeeze out whats left - i=0; - while (mS[i++]; - for (k = 0; k < 8; k++) - { - buff[m++] = (el & 0xff); - if (m >= len) break; - el >>= 8; - } - } -} - -void core::SHA3_hash(sha3 *sh, char *digest) -{ /* generate a SHA3 hash of appropriate size */ - int q = sh->rate - sh->length; - if (q == 1) SHA3_process(sh, 0x86); - else - { - SHA3_process(sh, 0x06); /* 0x06 for SHA-3 */ - while (sh->length != sh->rate - 1) SHA3_process(sh, 0x00); - SHA3_process(sh, 0x80); /* this will force a final transform */ - } - SHA3_squeeze(sh, digest, sh->len); -} - -/* return intermediate hash */ -void core::SHA3_continuing_hash(sha3 *sh,char *digest) -{ - sha3 cp=*sh; - SHA3_hash(&cp,digest); -} - -void core::SHA3_shake(sha3 *sh, char *digest, int len) -{ /* SHAKE out a buffer of variable length len */ - int q = sh->rate - sh->length; - if (q == 1) SHA3_process(sh, 0x9f); - else - { - SHA3_process(sh, 0x1f); // 0x06 for SHA-3 !!!! - while (sh->length != sh->rate - 1) SHA3_process(sh, 0x00); - SHA3_process(sh, 0x80); /* this will force a final transform */ - } - SHA3_squeeze(sh, digest, len); -} - -/* return intermediate hash */ -void core::SHA3_continuing_shake(sha3 *sh,char *digest,int len) -{ - sha3 cp=*sh; - SHA3_shake(&cp,digest,len); -} - -/* test program: should produce digest - -160 bit - -84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1 - -256 bit - -248d6a61 d20638b8 e5c02693 0c3e6039 a33ce459 64ff2167 f6ecedd4 19db06c1 - -512 bit - -8e959b75dae313da 8cf4f72814fc143f 8f7779c6eb9f7fa1 7299aeadb6889018 -501d289e4900f7e4 331b99dec4b5433a c7d329eeb6dd2654 5e96e55b874be909 - -384 bit - -09330c33f71147e8 3d192fc782cd1b47 53111b173b3b05d2 2fa08086e3b0f712 -fcc7c71a557e2db9 66c3e9fa91746039 -*/ -/* -#include - -char test160[]="abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; -char test256[]="abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; -char test512[]="abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"; - -int main() -{ - char digest[100]; - int i; - - hash256 sh256; - hash384 sh384; - hash512 sh512; - sha3 SHA3; - - HASH256_init(&sh256); - for (i=0;test256[i]!=0;i++) HASH256_process(&sh256,test256[i]); - HASH256_hash(&sh256,digest); - for (i=0;i<32;i++) printf("%02x",(unsigned char)digest[i]); - printf("\n"); - - HASH384_init(&sh384); - for (i=0;test512[i]!=0;i++) HASH384_process(&sh384,test512[i]); - HASH384_hash(&sh384,digest); - for (i=0;i<48;i++) printf("%02x",(unsigned char)digest[i]); - printf("\n"); - - HASH512_init(&sh512); - for (i=0;test512[i]!=0;i++) HASH512_process(&sh512,test512[i]); - HASH512_hash(&sh512,digest); - for (i=0;i<64;i++) printf("%02x",(unsigned char)digest[i]); - printf("\n"); - - SHA3_init(&SHA3,SHA3_HASH256); - for (i=0;test512[i]!=0;i++) SHA3_process(&SHA3,test512[i]); - SHA3_hash(&SHA3,digest); - for (i=0;i<32;i++) printf("%02x",(unsigned char)digest[i]); - printf("\n"); - - SHA3_init(&SHA3,SHA3_HASH512); - for (i=0;test512[i]!=0;i++) SHA3_process(&SHA3,test512[i]); - SHA3_hash(&SHA3,digest); - for (i=0;i<64;i++) printf("%02x",(unsigned char)digest[i]); - printf("\n"); - - SHA3_init(&SHA3,SHAKE256); - for (i=0;test512[i]!=0;i++) SHA3_process(&SHA3,test512[i]); - SHA3_shake(&SHA3,digest,72); - for (i=0;i<72;i++) printf("%02x",(unsigned char)digest[i]); - printf("\n"); - - - return 0; -} - -*/ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/hmac.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/hmac.cpp deleted file mode 100644 index 37d221d..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/hmac.cpp +++ /dev/null @@ -1,701 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - HMAC functions -*/ - -#include "arch.h" -#include "core.h" - -using namespace core; - -#define ROUNDUP(a,b) ((a)-1)/(b)+1 -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* General Purpose hash function, padding with zeros, optional input octets p and x, optional integer n,hash to octet w of length olen */ -/* hash is the Hash family, either MC_SHA2 or MC_SHA3 */ -/* hlen should be 32,48 or 64 for MC_SHA2 (that is SHA256/384/512) */ -/* hlen should be 24,32,48,64 for MC_SHA3 */ -/* olen=0 - output = hlen bytes */ -/* olen<=hlen - output = olen bytes */ -/* olen>hlen - output is padded with leading zeros and then hlen bytes */ - -void core::GPhash(int hash,int hlen,octet *w,int olen,int pad,octet *p,int n,octet *x) -{ - hash256 sh256; - hash384 sh384; - hash512 sh512; - sha3 sh3; - int i,c[4]; - char hh[64]; - - if (n>=0) - { - c[0] = (n >> 24) & 0xff; - c[1] = (n >> 16) & 0xff; - c[2] = (n >> 8) & 0xff; - c[3] = (n) & 0xff; - } - - switch (hash) - { - case MC_SHA2 : - switch (hlen) - { - case SHA256 : - HASH256_init(&sh256); - for (i=0;ilen;i++) HASH256_process(&sh256,p->val[i]); - if (n>=0) - for (i=0;i<4;i++) HASH256_process(&sh256,c[i]); - if (x!=NULL) - for (i=0;ilen;i++) HASH256_process(&sh256,x->val[i]); - HASH256_hash(&sh256,hh); - break; - case SHA384 : - HASH384_init(&sh384); - for (i=0;ilen;i++) HASH384_process(&sh384,p->val[i]); - if (n>=0) - for (i=0;i<4;i++) HASH384_process(&sh384,c[i]); - if (x!=NULL) - for (i=0;ilen;i++) HASH384_process(&sh384,x->val[i]); - HASH384_hash(&sh384,hh); - break; - case SHA512 : - HASH512_init(&sh512); - for (i=0;ilen;i++) HASH512_process(&sh512,p->val[i]); - if (n>=0) - for (i=0;i<4;i++) HASH512_process(&sh512,c[i]); - if (x!=NULL) - for (i=0;ilen;i++) HASH512_process(&sh512,x->val[i]); - HASH512_hash(&sh512,hh); - break; - } - break; - case MC_SHA3 : - SHA3_init(&sh3,hlen); - for (i=0;ilen;i++) SHA3_process(&sh3,p->val[i]); - if (n>=0) - for (i=0;i<4;i++) SHA3_process(&sh3,c[i]); - if (x!=NULL) - for (i=0;x->len;i++) SHA3_process(&sh3,x->val[i]); - SHA3_hash(&sh3,hh); - break; - default: return; - } - OCT_empty(w); - if (!olen) - OCT_jbytes(w,hh,hlen); - else - { - if (olen<=hlen) - { - OCT_jbytes(w,hh,olen); - } else { - OCT_jbyte(w, 0, olen - hlen); - OCT_jbytes(w, hh, hlen); - } - } -} - -/* Simple hash octet p to octet w of length hlen */ -void core::SPhash(int hash, int hlen,octet *w, octet *p) -{ - GPhash(hash, hlen, w, 0, 0, p, -1, NULL); -} - -static int blksize(int hash,int hlen) -{ - int blk=0; - switch (hash) - { - case MC_SHA2 : - blk=64; - if (hlen>32) blk=128; - break; - case MC_SHA3 : - blk=200-2*hlen; - break; - default: break; - } - return blk; -} - - -/* RFC 2104 */ -void core::HMAC(int hash,int hlen,octet *TAG,int olen,octet *K,octet *M) -{ - int blk; - char h[128],k0[200]; // assumes max block sizes - octet K0 = {0, sizeof(k0), k0}; - octet H={0,sizeof(h),h}; - - blk=blksize(hash,hlen); - if (blk==0) return; - - if (K->len > blk) SPhash(hash,hlen,&K0,K); - else OCT_copy(&K0,K); - - OCT_jbyte(&K0,0,blk-K0.len); - - OCT_xorbyte(&K0,0x36); - - - GPhash(hash,hlen,&H,0,0,&K0,-1,M); - - OCT_xorbyte(&K0,0x6a); /* 0x6a = 0x36 ^ 0x5c */ - GPhash(hash,hlen,&H,0,0,&K0,-1,&H); - - OCT_empty(TAG); - OCT_jbytes(TAG,H.val,olen); - - OCT_clear(&H); - OCT_clear(&K0); -} - -/* RFC 5869 */ - -void core::HKDF_Extract(int hash,int hlen,octet *PRK,octet *SALT,octet *IKM) -{ - char h[64]; - octet H={0,sizeof(h),h}; - if (SALT==NULL) { - OCT_jbyte(&H,0,hlen); - HMAC(hash,hlen,PRK,hlen,&H,IKM); - } else { - HMAC(hash,hlen,PRK,hlen,SALT,IKM); - } -} - -void core::HKDF_Expand(int hash,int hlen,octet *OKM,int olen,octet *PRK,octet *INFO) -{ - int i; - char t[1024]; // >= info.length+hlen+1 - octet T={0,sizeof(t),t}; - int n=olen/hlen; - int flen=olen%hlen; - OCT_empty(OKM); - - for (i=1;i<=n;i++) - { - OCT_joctet(&T,INFO); - OCT_jbyte(&T,i,1); - HMAC(hash,hlen,&T,hlen,PRK,&T); - OCT_joctet(OKM,&T); - } - if (flen>0) - { - OCT_joctet(&T,INFO); - OCT_jbyte(&T,n+1,1); - HMAC(hash,hlen,&T,flen,PRK,&T); - OCT_joctet(OKM,&T); - } -} - -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ - -void core::XOF_Expand(int hlen,octet *OKM,int olen,octet *DST,octet *M) -{ - int i; - sha3 SHA3; - SHA3_init(&SHA3,hlen); - for (i=0;ilen;i++) SHA3_process(&SHA3,M->val[i]); - SHA3_process(&SHA3,olen/256); - SHA3_process(&SHA3,olen%256); - - for (i=0;ilen;i++) - SHA3_process(&SHA3,DST->val[i]); - SHA3_process(&SHA3,DST->len); - - SHA3_shake(&SHA3,OKM->val,olen); - OKM->len=olen; -} - -static void XMD_Expand_Short_DST(int hash, int hlen,octet *OKM,int olen,octet *DST,octet *M) -{ - int i,blk; - int ell=CEIL(olen,hlen); - char tmp[260]; - octet TMP={0,sizeof(tmp),tmp}; - char h0[64]; - octet H0 = {0, sizeof(h0), h0}; - char h1[64]; - octet H1 = {0, sizeof(h1), h1}; - - blk=blksize(hash,hlen); - OCT_jint(&TMP,olen,2); - OCT_jint(&TMP,0,1); - OCT_joctet(&TMP,DST); - OCT_jint(&TMP,DST->len,1); - - GPhash(hash,hlen,&H0,0,blk,M,-1,&TMP); - OCT_empty(&TMP); - OCT_jint(&TMP,1,1); - OCT_joctet(&TMP,DST); - OCT_jint(&TMP,DST->len,1); - - GPhash(hash,hlen,&H1,0,0,&H0,-1,&TMP); - OCT_empty(OKM); - OCT_joctet(OKM,&H1); - for (i=2;i<=ell;i++) - { - OCT_xor(&H1,&H0); - OCT_empty(&TMP); - OCT_jint(&TMP,i,1); - OCT_joctet(&TMP,DST); - OCT_jint(&TMP,DST->len,1); - GPhash(hash,hlen,&H1,0,0,&H1,-1,&TMP); - OCT_joctet(OKM,&H1); - } - OKM->len=olen; -} - -void core::XMD_Expand(int hash, int hlen,octet *OKM,int olen,octet *DST,octet *M) -{ - char w[64]; - octet W = {0, sizeof(w), w}; - char os[20]; - octet OS={0,sizeof(os),os}; - OCT_jstring(&OS,(char *)"H2C-OVERSIZE-DST-"); - if (DST->len>=256) - { - GPhash(hash,hlen,&W,0,0,&OS,-1,DST); - XMD_Expand_Short_DST(hash,hlen,OKM,olen,&W,M); - } else { - XMD_Expand_Short_DST(hash,hlen,OKM,olen,DST,M); - } -} - -/* Key Derivation Function */ - -void core::KDF2(int hash, int hlen, octet *key, int olen, octet *z, octet *p) -{ - /* NOTE: the parameter olen is the length of the output k in bytes */ - char h[64]; - octet H = {0, sizeof(h), h}; - int counter, cthreshold; - - OCT_empty(key); - - cthreshold = ROUNDUP(olen, hlen); - - for (counter = 1; counter <= cthreshold; counter++) - { - GPhash(hash,hlen, &H, 0, 0, z, counter, p); - if (key->len + hlen > olen) OCT_jbytes(key, H.val, olen % hlen); - else OCT_joctet(key, &H); - } - -} - -/* Password based Key Derivation Function */ -/* Input password p, salt s, and repeat count */ -/* Output key of length olen */ -void core::PBKDF2(int hash, int hlen, octet *key, int olen, octet *p, octet *s, int rep) -{ - int i, j, len, d = ROUNDUP(olen, hlen); - char f[64], u[64]; - octet F = {0, sizeof(f), f}; - octet U = {0, sizeof(u), u}; - OCT_empty(key); - - for (i = 1; i <= d; i++) - { - len = s->len; - OCT_jint(s, i, 4); - - HMAC(hash, hlen, &F, hlen, s, p); - - s->len = len; - OCT_copy(&U, &F); - for (j = 2; j <= rep; j++) - { - HMAC(hash, hlen, &U, hlen, &U, p); - OCT_xor(&F, &U); - } - - OCT_joctet(key, &F); - } - - OCT_chop(key, NULL, olen); -} - -/* RSA Auxiliary Functions */ - -#define MAX_RSA_BYTES 512 /**< Maximum of 4096 */ - -/* Mask Generation Function */ - -static void MGF1(int sha, octet *z, int olen, octet *mask) -{ - char h[64]; - octet H = {0, sizeof(h), h}; - int hlen = sha; - int counter, cthreshold; - - OCT_empty(mask); - - cthreshold = ROUNDUP(olen, hlen); - for (counter = 0; counter < cthreshold; counter++) - { - GPhash(MC_SHA2,sha,&H,0,0,z,counter,NULL); - //hashit(sha, z, counter, &H); - if (mask->len + hlen > olen) OCT_jbytes(mask, H.val, olen % hlen); - else OCT_joctet(mask, &H); - } - OCT_clear(&H); -} - -/* MGF1 plus masking */ -static void MGF1XOR(int sha, octet *z, octet *w) -{ - char h[64]; - octet H = {0, sizeof(h), h}; - int i,len,wlen,hlen = sha; - int counter, cthreshold; - - wlen=0; - cthreshold = ROUNDUP(w->len, hlen); - for (counter = 0; counter < cthreshold; counter++) - { - GPhash(MC_SHA2,sha,&H,0,0,z,counter,NULL); - if (wlen+hlen <= w->len) - len=hlen; - else - len=w->len%hlen; - - for (i=0;ival[wlen+i]^=H.val[i]; - wlen+=len; - } - OCT_clear(&H); -} - - -/* SHAXXX identifier strings */ -const unsigned char SHA256ID[] = {0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20}; -const unsigned char SHA384ID[] = {0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30}; -const unsigned char SHA512ID[] = {0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40}; - -/* PKCS 1.5 padding of a message to be signed */ - -int core::PKCS15(int sha, octet *m, octet *w) -{ - int olen = w->max; - int hlen = sha; - int idlen = 19; - char h[64]; - octet H = {0, sizeof(h), h}; - - if (olen < idlen + hlen + 10) return 0; - GPhash(MC_SHA2,sha,&H,0,0,m,-1,NULL); - - OCT_empty(w); - OCT_jbyte(w, 0x00, 1); - OCT_jbyte(w, 0x01, 1); - OCT_jbyte(w, 0xff, olen - idlen - hlen - 3); - OCT_jbyte(w, 0x00, 1); - - if (hlen == 32) OCT_jbytes(w, (char *)SHA256ID, idlen); - if (hlen == 48) OCT_jbytes(w, (char *)SHA384ID, idlen); - if (hlen == 64) OCT_jbytes(w, (char *)SHA512ID, idlen); - - OCT_joctet(w, &H); - - return 1; -} - -/* Alternate form, without the NULL 0500 */ - -/* SHAXXX identifier strings */ -const unsigned char SHA256IDb[] = {0x30, 0x2f, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x04, 0x20}; -const unsigned char SHA384IDb[] = {0x30, 0x3f, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x04, 0x30}; -const unsigned char SHA512IDb[] = {0x30, 0x4f, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x04, 0x40}; - -/* PKCS 1.5 padding of a message to be signed */ - -int core::PKCS15b(int sha, octet *m, octet *w) -{ - int olen = w->max; - int hlen = sha; - int idlen = 17; - char h[64]; - octet H = {0, sizeof(h), h}; - - if (olen < idlen + hlen + 10) return 0; - GPhash(MC_SHA2,sha,&H,0,0,m,-1,NULL); - - OCT_empty(w); - OCT_jbyte(w, 0x00, 1); - OCT_jbyte(w, 0x01, 1); - OCT_jbyte(w, 0xff, olen - idlen - hlen - 3); - OCT_jbyte(w, 0x00, 1); - - if (hlen == 32) OCT_jbytes(w, (char *)SHA256IDb, idlen); - if (hlen == 48) OCT_jbytes(w, (char *)SHA384IDb, idlen); - if (hlen == 64) OCT_jbytes(w, (char *)SHA512IDb, idlen); - - OCT_joctet(w, &H); - - return 1; -} - -/* PSS Encoding of message to be signed. Salt is hlen */ - -int core::PSS_ENCODE(int sha, octet *m, csprng *RNG, octet *w) -{ - unsigned char mask; - char h[64]; - octet H = {0, sizeof(h), h}; - char md[136]; - octet MD={0,sizeof(md),md}; - char salt[64]; - octet SALT={0,sizeof(salt),salt}; - int hlen=sha; - int emlen=w->max; - int embits=8*emlen-1; - - OCT_rand(&SALT, RNG, hlen); - - mask=(0xff)>>(8*emlen-embits); - - GPhash(MC_SHA2,sha,&H,0,0,m,-1,NULL); - if (emlen < hlen + hlen + 2) return 0; - - OCT_jbyte(&MD,0,8); - OCT_joctet(&MD,&H); - OCT_joctet(&MD,&SALT); - - GPhash(MC_SHA2,sha,&H,0,0,&MD,-1,NULL); - OCT_clear(w); - OCT_jbyte(w,0,emlen-hlen-hlen-2); - OCT_jbyte(w,0x01,1); - OCT_joctet(w,&SALT); - MGF1XOR(sha,&H,w); - w->val[0]&=mask; - - OCT_joctet(w,&H); - OCT_jbyte(w,0xbc,1); - - return 1; -} - -int core::PSS_VERIFY(int sha, octet *m,octet *w) -{ - int i,k; - unsigned char mask; - char hmask[64]; - octet HMASK = {0, sizeof(hmask), hmask}; - char h[64]; - octet H = {0, sizeof(h), h}; - char db[MAX_RSA_BYTES]; - octet DB = {0, sizeof(db), db}; - char salt[64]; - octet SALT={0,sizeof(salt),salt}; - int hlen=sha; - int emlen=w->len; - int embits=8*emlen-1; - - mask=(0xff)>>(8*emlen-embits); - - GPhash(MC_SHA2,sha,&HMASK,0,0,m,-1,NULL); - if (emlen < hlen + hlen + 2) return 0; - if (w->val[emlen-1]!=(char)0xbc) return 0; - if ((w->val[0]&(~mask))!=0) return 0; - - OCT_jbytes(&DB,w->val,emlen-hlen-1); - OCT_jbytes(&H,&w->val[emlen-hlen-1],hlen); - - MGF1XOR(sha,&H,&DB); - DB.val[0]&=mask; - - k=0; - for (i=0;imax - 1; - int mlen = m->len; - int hlen, seedlen; - char dbmask[MAX_RSA_BYTES], seed[64]; - octet DBMASK = {0, sizeof(dbmask), dbmask}; - octet SEED = {0, sizeof(seed), seed}; - - hlen = seedlen = sha; - if (mlen > olen - hlen - seedlen - 1) return 0; - if (m == f) return 0; /* must be distinct octets */ - - GPhash(MC_SHA2,sha,f,0,0,p,-1,NULL); - //hashit(sha, p, -1, f); - - slen = olen - mlen - hlen - seedlen - 1; - - OCT_jbyte(f, 0, slen); - OCT_jbyte(f, 0x1, 1); - OCT_joctet(f, m); - - OCT_rand(&SEED, RNG, seedlen); - - MGF1(sha, &SEED, olen - seedlen, &DBMASK); - - OCT_xor(&DBMASK, f); - MGF1(sha, &DBMASK, seedlen, f); - - OCT_xor(f, &SEED); - - OCT_joctet(f, &DBMASK); - - OCT_pad(f, f->max); - OCT_clear(&SEED); - OCT_clear(&DBMASK); - - return 1; -} - -/* OAEP Message Decoding for Decryption */ - -int core::OAEP_DECODE(int sha, octet *p, octet *f) -{ - int comp, x, t; - int i, k, olen = f->max - 1; - int hlen, seedlen; - char dbmask[MAX_RSA_BYTES], seed[64], chash[64]; - octet DBMASK = {0, sizeof(dbmask), dbmask}; - octet SEED = {0, sizeof(seed), seed}; - octet CHASH = {0, sizeof(chash), chash}; - - seedlen = hlen = sha; - if (olen < seedlen + hlen + 1) return 0; - if (!OCT_pad(f, olen + 1)) return 0; - - GPhash(MC_SHA2,sha,&CHASH,0,0,p,-1,NULL); - //hashit(sha, p, -1, &CHASH); - - x = f->val[0]; - for (i = seedlen; i < olen; i++) - DBMASK.val[i - seedlen] = f->val[i + 1]; - DBMASK.len = olen - seedlen; - - MGF1(sha, &DBMASK, seedlen, &SEED); - for (i = 0; i < seedlen; i++) SEED.val[i] ^= f->val[i + 1]; - MGF1(sha, &SEED, olen - seedlen, f); - OCT_xor(&DBMASK, f); - - comp = OCT_ncomp(&CHASH, &DBMASK, hlen); - - OCT_shl(&DBMASK, hlen); - - OCT_clear(&SEED); - OCT_clear(&CHASH); - -// find first non-zero t in array - t=k=0; - for (i=0;i -#include -#include -#include "hpke_ZZZ.h" - -#define GROUP EGS_ZZZ -#define POINT (2*EFS_ZZZ+1) -#define MAX_HASH HASH_TYPE_ZZZ -#define MAX_LABEL 20 // may need adjustment - -static void ZZZ::LabeledExtract(octet *PRK,octet *SALT,octet *SUITE_ID,char *label,octet *IKM) -{ - char likm[18+MAX_LABEL+2*POINT]; - octet LIKM={0,sizeof(likm),likm}; - OCT_jstring(&LIKM,(char *)"HPKE-v1"); - OCT_joctet(&LIKM,SUITE_ID); - OCT_jstring(&LIKM,label); - if (IKM!=NULL) - OCT_joctet(&LIKM,IKM); - HKDF_Extract(MC_SHA2,HASH_TYPE_ZZZ,PRK,SALT,&LIKM); -} - -static void ZZZ::LabeledExpand(octet *OKM,octet *PRK,octet *SUITE_ID,char *label,octet *INFO,int L) -{ - char linfo[20+MAX_LABEL+3*POINT]; - octet LINFO={0,sizeof(linfo),linfo}; - OCT_jint(&LINFO,L,2); - OCT_jstring(&LINFO,(char *)"HPKE-v1"); - OCT_joctet(&LINFO,SUITE_ID); - OCT_jstring(&LINFO,label); - if (INFO!=NULL) - OCT_joctet(&LINFO,INFO); - HKDF_Expand(MC_SHA2,HASH_TYPE_ZZZ,OKM,L,PRK,&LINFO); -} - -static void ZZZ::ExtractAndExpand(int config_id,octet *OKM,octet *DH,octet *CONTEXT) -{ - char prk[MAX_HASH]; - octet PRK={0,sizeof(prk),prk}; - char suite_id[10]; - octet SUITE_ID={0,sizeof(suite_id),suite_id}; - - int kem_id=config_id&255; - OCT_jstring(&SUITE_ID,(char *)"KEM"); - OCT_jint(&SUITE_ID,kem_id,2); - - LabeledExtract(&PRK,NULL,&SUITE_ID,(char *)"eae_prk",DH); - LabeledExpand(OKM, &PRK,&SUITE_ID,(char *)"shared_secret",CONTEXT,HASH_TYPE_ZZZ); -} - -int ZZZ::DeriveKeyPair(int config_id,octet *SK,octet *PK,octet *SEED) -{ - int counter=0; - char prk[MAX_HASH]; - octet PRK={0,sizeof(prk),prk}; - char suite_id[10]; - octet SUITE_ID={0,sizeof(suite_id),suite_id}; - char info[2]; - octet INFO={0,sizeof(info),info}; - int bit_mask,kem=config_id&255; - OCT_jstring(&SUITE_ID,(char *)"KEM"); - OCT_jint(&SUITE_ID,kem,2); - LabeledExtract(&PRK,NULL,&SUITE_ID,(char *)"dkp_prk",SEED); - -//printf("PRK= ");OCT_output(&PRK); printf("\n"); - - if (kem==32 || kem==33) - { // RFC7748 - LabeledExpand(SK,&PRK,&SUITE_ID,(char *)"sk",NULL,GROUP); - OCT_reverse(SK); - if (kem==32) - { - SK->val[GROUP-1]&=248; - SK->val[0]&=127; - SK->val[0]|=64; - } else { - SK->val[GROUP-1]&=252; - SK->val[0]|=128; - } - - } else { - if (kem==18) bit_mask=1; - else bit_mask=0xFF; - OCT_clear(SK); - while (!ECP_IN_RANGE(SK) && counter<256) - { - OCT_empty(&INFO); - OCT_jbyte(&INFO,counter,1); - LabeledExpand(SK,&PRK,&SUITE_ID,(char *)"candidate",&INFO,GROUP); - SK->val[0]&=bit_mask; - counter++; - } - } -//printf("SK= ");OCT_output(SK); printf("\n"); -//printf("kem= %d\n",kem); -//printf("counter= %d\n",counter); - ECP_KEY_PAIR_GENERATE(NULL, SK, PK); - if (kem==32 || kem==33) - OCT_reverse(PK); - - if (counter<256) return 1; - else return 0; -} - -void ZZZ::HPKE_Encap(int config_id,octet *skE,octet *Z,octet *pkE,octet *pkR) -{ - int res,kem; - char dh[POINT]; - octet DH={0,sizeof(dh),dh}; - char kemcontext[2*POINT]; - octet KEMCONTEXT={0,sizeof(kemcontext),kemcontext}; - kem=config_id&255; - - if (kem==32 || kem==33) - { - OCT_reverse(pkR); - res=ECP_SVDP_DH(skE, pkR, &DH, 0); - OCT_reverse(pkR); - OCT_reverse(&DH); - } else { - res=ECP_SVDP_DH(skE, pkR, &DH, 0); - } - - OCT_copy(&KEMCONTEXT,pkE); - OCT_joctet(&KEMCONTEXT,pkR); - ExtractAndExpand(config_id,Z,&DH,&KEMCONTEXT); -} - -void ZZZ::HPKE_Decap(int config_id,octet *skR,octet *Z,octet *pkE,octet *pkR) -{ - int res,kem; - char dh[POINT]; - octet DH={0,sizeof(dh),dh}; - char kemcontext[2*POINT]; - octet KEMCONTEXT={0,sizeof(kemcontext),kemcontext}; - kem=config_id&255; - - if (kem==32 || kem==33) - { - OCT_reverse(pkE); - ECP_SVDP_DH(skR, pkE, &DH, 0); - OCT_reverse(pkE); - OCT_reverse(&DH); - } else { - ECP_SVDP_DH(skR, pkE, &DH, 0); - } - - OCT_copy(&KEMCONTEXT,pkE); - OCT_joctet(&KEMCONTEXT,pkR); - - ExtractAndExpand(config_id,Z,&DH,&KEMCONTEXT); -} - -void ZZZ::HPKE_AuthEncap(int config_id,octet *skE,octet *skS,octet *Z,octet *pkE,octet *pkR,octet *pkS) -{ - int res,kem; - char dh[2*POINT]; - octet DH={0,sizeof(dh),dh}; - char dh1[POINT]; - octet DH1={0,sizeof(dh1),dh1}; - char kemcontext[3*POINT]; - octet KEMCONTEXT={0,sizeof(kemcontext),kemcontext}; - - kem=config_id&255; - - if (kem==32 || kem==33) - { - OCT_reverse(pkR); - ECP_SVDP_DH(skE, pkR, &DH,0); - ECP_SVDP_DH(skS, pkR, &DH1,0); - OCT_reverse(pkR); - OCT_reverse(&DH); - OCT_reverse(&DH1); - } else { - ECP_SVDP_DH(skE, pkR, &DH, 0); - ECP_SVDP_DH(skS, pkR, &DH1,0); - } - - OCT_joctet(&DH,&DH1); - OCT_copy(&KEMCONTEXT,pkE); - OCT_joctet(&KEMCONTEXT,pkR); - OCT_joctet(&KEMCONTEXT,pkS); - - ExtractAndExpand(config_id,Z,&DH,&KEMCONTEXT); -} - -void ZZZ::HPKE_AuthDecap(int config_id,octet *skR,octet *Z,octet *pkE,octet *pkR,octet *pkS) -{ - int res,kem; - char dh[2*POINT]; - octet DH={0,sizeof(dh),dh}; - char dh1[POINT]; - octet DH1={0,sizeof(dh1),dh1}; - char kemcontext[3*POINT]; - octet KEMCONTEXT={0,sizeof(kemcontext),kemcontext}; - - kem=config_id&255; - - if (kem==32 || kem==33) { - OCT_reverse(pkE); - OCT_reverse(pkS); - ECP_SVDP_DH(skR, pkE, &DH,0); - ECP_SVDP_DH(skR, pkS, &DH1,0); - OCT_reverse(pkE); - OCT_reverse(pkS); - OCT_reverse(&DH); - OCT_reverse(&DH1); - } else { - ECP_SVDP_DH(skR, pkE, &DH, 0); - ECP_SVDP_DH(skR, pkS, &DH1, 0); - } - OCT_joctet(&DH,&DH1); - - OCT_copy(&KEMCONTEXT,pkE); - OCT_joctet(&KEMCONTEXT,pkR); - OCT_joctet(&KEMCONTEXT,pkS); - - ExtractAndExpand(config_id,Z,&DH,&KEMCONTEXT); -} - -void ZZZ::HPKE_KeySchedule(int config_id,octet *key,octet *nonce,octet *exp_secret,int mode,octet *Z,octet *info,octet *psk,octet *pskID) -{ - char context[1+2*MAX_HASH]; - octet CONTEXT={0,sizeof(context),context}; - - char h[MAX_HASH]; - octet H={0,sizeof(h),h}; - char secret_h[MAX_HASH]; - octet secret={0,sizeof(secret_h),secret_h}; - - int kem_id=config_id&255; - int kdf_id=(config_id>>8)&3; - int aead_id=(config_id>>10)&3; - - char suite_id[10]; - octet SUITE_ID={0,sizeof(suite_id),suite_id}; - OCT_jstring(&SUITE_ID,(char *)"HPKE"); - OCT_jint(&SUITE_ID,kem_id,2); - OCT_jint(&SUITE_ID,kdf_id,2); - OCT_jint(&SUITE_ID,aead_id,2); - - OCT_jint(&CONTEXT,mode,1); - - LabeledExtract(&H,NULL,&SUITE_ID,(char *)"psk_id_hash",pskID); - OCT_joctet(&CONTEXT,&H); - LabeledExtract(&H,NULL,&SUITE_ID,(char *)"info_hash",info); - OCT_joctet(&CONTEXT,&H); - - LabeledExtract(&secret,Z,&SUITE_ID,(char *)"secret",psk); - - //LabeledExtract(&H,NULL,&SUITE_ID,(char *)"psk_hash",psk); - //LabeledExtract(&secret,&H,&SUITE_ID,(char *)"secret",Z); - - LabeledExpand(key,&secret,&SUITE_ID,(char *)"key",&CONTEXT,AESKEY_ZZZ); - LabeledExpand(nonce,&secret,&SUITE_ID,(char *)"base_nonce",&CONTEXT,12); - if (exp_secret!=NULL) - LabeledExpand(exp_secret,&secret,&SUITE_ID,(char *)"exp",&CONTEXT,HASH_TYPE_ZZZ); -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/kyber.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/kyber.cpp deleted file mode 100644 index 3956e8c..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/kyber.cpp +++ /dev/null @@ -1,812 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Kyber API implementation. Constant time where it matters. Spends nearly all of its time running SHA3. Small. - - M.Scott 22/11/2021 -*/ - -#include "kyber.h" - -using namespace core; - -// parameters for each security level -// K,eta1,eta2,du,dv,shared secret -const int PARAMS_512[6]={2,3,2,10,4,32}; -const int PARAMS_768[6]={3,2,2,10,4,32}; -const int PARAMS_1024[6]={4,2,2,11,5,32}; - -/* Start of public domain reference implementation code - taken from https://github.com/pq-crystals/kyber */ - -const sign16 zetas[128] = { - -1044, -758, -359, -1517, 1493, 1422, 287, 202, - -171, 622, 1577, 182, 962, -1202, -1474, 1468, - 573, -1325, 264, 383, -829, 1458, -1602, -130, - -681, 1017, 732, 608, -1542, 411, -205, -1571, - 1223, 652, -552, 1015, -1293, 1491, -282, -1544, - 516, -8, -320, -666, -1618, -1162, 126, 1469, - -853, -90, -271, 830, 107, -1421, -247, -951, - -398, 961, -1508, -725, 448, -1065, 677, -1275, - -1103, 430, 555, 843, -1251, 871, 1550, 105, - 422, 587, 177, -235, -291, -460, 1574, 1653, - -246, 778, 1159, -147, -777, 1483, -602, 1119, - -1590, 644, -872, 349, 418, 329, -156, -75, - 817, 1097, 603, 610, 1322, -1285, -1465, 384, - -1215, -136, 1218, -1335, -874, 220, -1187, -1659, - -1185, -1530, -1278, 794, -1510, -854, -870, 478, - -108, -308, 996, 991, 958, -1460, 1522, 1628 -}; - -static int16_t montgomery_reduce(int32_t a) -{ - int16_t t; - - t = (int16_t)a*KY_QINV; - t = (a - (int32_t)t*KY_PRIME) >> 16; - return t; -} - -static int16_t barrett_reduce(int16_t a) { - int16_t t; - const int16_t v = ((1<<26) + KY_PRIME/2)/KY_PRIME; - - t = ((int32_t)v*a + (1<<25)) >> 26; - t *= KY_PRIME; - return a - t; -} - -static sign16 fqmul(sign16 a, sign16 b) { - return montgomery_reduce((sign32)a*b); -} - -static void ntt(int16_t r[256]) { - unsigned int len, start, j, k; - int16_t t, zeta; - - k = 1; - for(len = 128; len >= 2; len >>= 1) { - for(start = 0; start < 256; start = j + len) { - zeta = zetas[k++]; - for(j = start; j < start + len; j++) { - t = fqmul(zeta, r[j + len]); - r[j + len] = r[j] - t; - r[j] = r[j] + t; - } - } - } -} - -static void invntt(int16_t r[256]) { - unsigned int start, len, j, k; - int16_t t, zeta; - const int16_t f = 1441; // mont^2/128 - - k = 127; - for(len = 2; len <= 128; len <<= 1) { - for(start = 0; start < 256; start = j + len) { - zeta = zetas[k--]; - for(j = start; j < start + len; j++) { - t = r[j]; - r[j] = barrett_reduce(t + r[j + len]); - r[j + len] = r[j + len] - t; - r[j + len] = fqmul(zeta, r[j + len]); - } - } - } - - for(j = 0; j < 256; j++) - r[j] = fqmul(r[j], f); -} - -static void basemul(sign16 r[2], const sign16 a[2], const sign16 b[2], sign16 zeta) { - r[0] = fqmul(a[1], b[1]); - r[0] = fqmul(r[0], zeta); - r[0] += fqmul(a[0], b[0]); - r[1] = fqmul(a[0], b[1]); - r[1] += fqmul(a[1], b[0]); -} - -static void poly_reduce(sign16 *r) -{ - int i; - for(i=0;i>bt)&1; -} - -// centered binomial distribution -static void CBD(byte bts[],int eta,sign16 f[KY_DEGREE]) -{ - int a,b; - for (int i=0;i>bts; - sign16 mask=(1<=8) - { - bts-=8; - ptr++; - } - w=r&mask; - return w; -} - -// array t has ab active bits per word -// extract bytes from array of words -// if max!=0 then -max<=t[i]<=+max -static byte nextbyte16(int ab,sign16 t[],int &ptr, int &bts) -{ - sign16 r,w; - int left=ab-bts; // number of bits left in this word - int i=0; - - w=t[ptr]; w+=(w>>15)&KY_PRIME; - r=w>>bts; - while (left<8) - { - i++; - w=t[ptr+i]; w+=(w>>15)&KY_PRIME; - r|=w<=ab) - { - bts-=ab; - ptr++; - } - return (byte)r&0xff; -} - -// encode polynomial vector of length len with coefficients of length L, into packed bytes -static void encode(sign16 t[],int len,int L,byte pack[]) -{ - int ptr,bts,n; - ptr=bts=0; - for (n=0;n>31); - x-=qpart*0xD01; q += qpart; - - qpart=(int32_t)(((int64_t)x*645083)>>31)+1; - x-=qpart*0xD01; q += qpart+(x>>31); - - return q; -} - -// compress polynomial coefficents in place, for polynomial vector of length len -static void compress(sign16 t[],int len,int d) -{ - sign32 twod=(1<>15)&KY_PRIME; - t[i]= (sign16)(safediv(twod*t[i]+KY_PRIME/2)&(twod-1)); - } -} - -// decompress polynomial coefficents in place, for polynomial vector of length len -static void decompress(sign16 t[],int len,int d) -{ - int twod1=(1<<(d-1)); - for (int i=0;i>d; -} - -// input entropy, output key pair -static void KYBER_CPA_keypair(const int *params,byte *tau,octet *sk,octet *pk) -{ - int i,j,k,row; - sha3 sh; - byte rho[32]; - byte sigma[33]; - byte buff[256]; - - int ck=params[0]; - sign16 r[KY_DEGREE]; - sign16 w[KY_DEGREE]; - sign16 Aij[KY_DEGREE]; -#ifdef USE_VLAS - sign16 s[ck*KY_DEGREE]; - sign16 e[ck*KY_DEGREE]; - sign16 p[ck*KY_DEGREE]; -#else - sign16 s[KY_MAXK*KY_DEGREE]; - sign16 e[KY_MAXK*KY_DEGREE]; - sign16 p[KY_MAXK*KY_DEGREE]; -#endif - - int eta1=params[1]; - int public_key_size=32+ck*(KY_DEGREE*3)/2; - int secret_cpa_key_size=ck*(KY_DEGREE*3)/2; - - SHA3_init(&sh,SHA3_HASH512); - - for (i=0;i<32;i++) - SHA3_process(&sh,tau[i]); - SHA3_hash(&sh,(char *)buff); - for (i=0;i<32;i++) - { - rho[i]=buff[i]; - sigma[i]=buff[i+32]; - } - sigma[32]=0; // N - -// create s - for (i=0;ival); - sk->len=secret_cpa_key_size; - encode(p,ck,12,(byte *)pk->val); - pk->len=public_key_size; - for (i=0;i<32;i++) - pk->val[public_key_size-32+i]=rho[i]; -} - -// input 64 random bytes, output secret and public keys -static void KYBER_CCA_keypair(const int *params,byte *randbytes64,octet *sk,octet *pk) -{ - int i; - sha3 sh; - byte h[32]; - - KYBER_CPA_keypair(params,randbytes64,sk,pk); - OCT_joctet(sk,pk); - - SHA3_init(&sh,SHA3_HASH256); - for (i=0;ilen;i++) - SHA3_process(&sh,(byte)pk->val[i]); - SHA3_hash(&sh,(char *)h); - OCT_jbytes(sk,(char *)h,32); - OCT_jbytes(sk,(char *)&randbytes64[32],32); -} - -static void KYBER_CPA_base_encrypt(const int *params,byte *coins,octet *pk,octet *ss,sign16 *u, sign16* v) -{ - int i,row,j,len; - sha3 sh; - byte sigma[33]; - byte buff[256]; - byte rho[32]; - - int ck=params[0]; - sign16 r[KY_DEGREE]; - sign16 w[KY_DEGREE]; - sign16 Aij[KY_DEGREE]; -#ifdef USE_VLAS - sign16 q[ck*KY_DEGREE]; - sign16 p[ck*KY_DEGREE]; -#else - sign16 q[KY_MAXK*KY_DEGREE]; - sign16 p[KY_MAXK*KY_DEGREE]; -#endif - - int eta1=params[1]; - int eta2=params[2]; - int du=params[3]; - int dv=params[4]; - int public_key_size=32+ck*(KY_DEGREE*3)/2; - - for (i=0;i<32;i++) - sigma[i]=coins[i];//i+6; //RAND_byte(RNG); - sigma[32]=0; - - for (i=0;i<32;i++) - rho[i]=pk->val[pk->len-32+i]; - -// create q - for (i=0;ival,12,p,ck); - - poly_mul(v,p,q); - for (i=1;ival,1,r,1); - decompress(r,1,1); - - poly_add(v,v,r); - poly_reduce(v); - - compress(u,ck,du); - compress(v,1,dv); -} - -// Given input of entropy, public key and shared secret is an input, outputs ciphertext -static void KYBER_CPA_encrypt(const int *params,byte *coins,octet *pk,octet *ss,octet *ct) -{ - int ck=params[0]; - sign16 v[KY_DEGREE]; -#ifdef USE_VLAS - sign16 u[ck*KY_DEGREE]; -#else - sign16 u[KY_MAXK*KY_DEGREE]; -#endif - - int du=params[3]; - int dv=params[4]; - int ciphertext_size=(du*ck+dv)*KY_DEGREE/8; - KYBER_CPA_base_encrypt(params,coins,pk,ss,u,v); - encode(u,ck,du,(byte *)ct->val); - encode(v,1,dv,(byte *)&ct->val[ciphertext_size-(dv*KY_DEGREE/8)]); - ct->len=ciphertext_size; -} - -// Re-encrypt and check that ct is OK (if so return is zero) -static byte KYBER_CPA_check_encrypt(const int *params,byte *coins,octet *pk,octet *ss,octet *ct) -{ - int ck=params[0]; - sign16 v[KY_DEGREE]; -#ifdef USE_VLAS - sign16 u[ck*KY_DEGREE]; -#else - sign16 u[KY_MAXK*KY_DEGREE]; -#endif - int du=params[3]; - int dv=params[4]; - int ciphertext_size=(du*ck+dv)*KY_DEGREE/8; - byte d1,d2; - KYBER_CPA_base_encrypt(params,coins,pk,ss,u,v); - d1=chk_encode(u,ck,du,(byte *)ct->val); - d2=chk_encode(v,1,dv,(byte *)&ct->val[ciphertext_size-(dv*KY_DEGREE/8)]); - if ((d1|d2)==0) - return 0; - else - return 0xff; -} - -// Given entropy and public key, outputs 32-byte shared secret and ciphertext -static void KYBER_CCA_encrypt(const int *params,byte *randbytes32,octet *pk,octet *ss,octet *ct) -{ - int i; - sha3 sh; - byte h[32],hm[32],g[64],coins[32]; - octet HM={32,sizeof(hm),(char *)hm}; - int ck=params[0]; - int du=params[3]; - int dv=params[4]; - int shared_secret_size=params[5]; - - SHA3_init(&sh,SHA3_HASH256); // H(m) - for (i=0;i<32;i++) - SHA3_process(&sh,randbytes32[i]); - SHA3_hash(&sh,(char *)hm); - - SHA3_init(&sh,SHA3_HASH256); // H(pk) - for (i=0;ilen;i++) - SHA3_process(&sh,(byte)pk->val[i]); - SHA3_hash(&sh,(char *)h); - - SHA3_init(&sh,SHA3_HASH512); // Kb,r = G(H(m)|H(pk) - for (i=0;i<32;i++) - SHA3_process(&sh,hm[i]); - for (i=0;i<32;i++) - SHA3_process(&sh,h[i]); - SHA3_hash(&sh,(char *)g); - - for (i=0;i<32;i++) - coins[i]=g[i+32]; - KYBER_CPA_encrypt(params,coins,pk,&HM,ct); - - SHA3_init(&sh,SHA3_HASH256); // H(ct) - for (i=0;ilen;i++) - SHA3_process(&sh,(byte)ct->val[i]); - SHA3_hash(&sh,(char *)h); - - SHA3_init(&sh,SHAKE256); // K=KDF(Kb|H(ct)) - for (i=0;i<32;i++) - SHA3_process(&sh,g[i]); - for (i=0;i<32;i++) - SHA3_process(&sh,h[i]); - - SHA3_shake(&sh,ss->val,shared_secret_size); // could be any length? - ss->len=shared_secret_size; -} - -// Input secret key and ciphertext, outputs shared 32-byte secret -static void KYBER_CPA_decrypt(const int *params,octet *sk,octet *ct,octet *ss) -{ - int i,j,row; - int ck=params[0]; - sign16 w[KY_DEGREE]; - sign16 v[KY_DEGREE]; - sign16 r[KY_DEGREE]; -#ifdef USE_VLAS - sign16 u[ck*KY_DEGREE]; - sign16 s[ck*KY_DEGREE]; -#else - sign16 u[KY_MAXK*KY_DEGREE]; - sign16 s[KY_MAXK*KY_DEGREE]; -#endif - - int du=params[3]; - int dv=params[4]; - int shared_secret_size=params[5]; - - decode((byte *)ct->val,du,u,ck); - decode((byte *)&ct->val[du*ck*KY_DEGREE/8],dv,v,1); - decompress(u,ck,du); - decompress(v,1,dv); - decode((byte *)sk->val,12,s,ck); - - poly_ntt(u); - poly_mul(w,u,s); - for (i=1;ival); - ss->len=shared_secret_size; -} - -static void KYBER_CCA_decrypt(const int *params,octet *sk,octet *ct,octet *ss) -{ - int i,olen,same; - sha3 sh; - byte h[32],z[32],m[32],coins[32],g[64],mask; - octet M={32,sizeof(m),(char *)m}; - int ck=params[0]; - int du=params[3]; - int dv=params[4]; - int secret_cpa_key_size=ck*(KY_DEGREE*3)/2; - int public_key_size=32+ck*(KY_DEGREE*3)/2; - int shared_secret_size=params[5]; - octet PK={public_key_size,public_key_size,&sk->val[secret_cpa_key_size]}; // public key is here - - olen=sk->len; - sk->len=secret_cpa_key_size; // chop off CPA secret - for (i=0;i<32;i++) - h[i]=sk->val[secret_cpa_key_size+public_key_size+i]; - for (i=0;i<32;i++) - z[i]=sk->val[secret_cpa_key_size+public_key_size+32+i]; - - KYBER_CPA_decrypt(params,sk,ct,&M); - - SHA3_init(&sh,SHA3_HASH512); // Kb,r = G(H(m)|H(pk) - for (i=0;i<32;i++) - SHA3_process(&sh,m[i]); - for (i=0;i<32;i++) - SHA3_process(&sh,h[i]); - SHA3_hash(&sh,(char *)g); - - for (i=0;i<32;i++) - coins[i]=g[i+32]; - mask=KYBER_CPA_check_encrypt(params,coins,&PK,&M,ct); // encrypt again with public key - FO transform CPA->CCA - - for (i=0;i<32;i++) - g[i]^=(g[i]^z[i])&mask; // substitute z for Kb on failure - - SHA3_init(&sh,SHA3_HASH256); // H(ct) - for (i=0;ilen;i++) - SHA3_process(&sh,(byte)ct->val[i]); - SHA3_hash(&sh,(char *)h); - - SHA3_init(&sh,SHAKE256); // K=KDF(Kb|H(ct)) - for (i=0;i<32;i++) - SHA3_process(&sh,g[i]); - for (i=0;i<32;i++) - SHA3_process(&sh,h[i]); - - SHA3_shake(&sh,ss->val,shared_secret_size); // could be any length? - ss->len=shared_secret_size; - sk->len=olen; // restore length -} - -// ********************* Kyber API ****************************** - -void core::KYBER512_keypair(byte *r64,octet *SK,octet *PK) -{ - KYBER_CCA_keypair(PARAMS_512,r64,SK,PK); -} - -void core::KYBER768_keypair(byte *r64,octet *SK,octet *PK) -{ - KYBER_CCA_keypair(PARAMS_768,r64,SK,PK); -} - -void core::KYBER1024_keypair(byte *r64,octet *SK,octet *PK) -{ - KYBER_CCA_keypair(PARAMS_1024,r64,SK,PK); -} - -void core::KYBER512_encrypt(byte *r32,octet *PK,octet *SS,octet *CT) -{ - KYBER_CCA_encrypt(PARAMS_512,r32,PK,SS,CT); -} - -void core::KYBER768_encrypt(byte *r32,octet *PK,octet *SS,octet *CT) -{ - KYBER_CCA_encrypt(PARAMS_768,r32,PK,SS,CT); -} - -void core::KYBER1024_encrypt(byte *r32,octet *PK,octet *SS,octet *CT) -{ - KYBER_CCA_encrypt(PARAMS_1024,r32,PK,SS,CT); -} - -void core::KYBER512_decrypt(octet *SK,octet *CT,octet *SS) -{ - KYBER_CCA_decrypt(PARAMS_512,SK,CT,SS); -} - -void core::KYBER768_decrypt(octet *SK,octet *CT,octet *SS) -{ - KYBER_CCA_decrypt(PARAMS_768,SK,CT,SS); -} - -void core::KYBER1024_decrypt(octet *SK,octet *CT,octet *SS) -{ - KYBER_CCA_decrypt(PARAMS_1024,SK,CT,SS); -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin.cpp deleted file mode 100644 index 8261cf9..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* MPIN 128-bit API Functions */ - -/* Version 3.0 */ - -#include -#include -#include -#include -#include "mpin_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#define ROUNDUP(a,b) ((a)-1)/(b)+1 - -/* Encode octet to curve point */ -void ZZZ::MPIN_ENCODE_TO_CURVE(octet *DST,octet *ID,octet *HCID) -{ - int j,k,m,L; - char okm[512],fd[256]; - BIG q,r,w; - ECP P; - FP u; - DBIG dx; - octet OKM = {0,sizeof(okm),okm}; - BIG_rcopy(q,Modulus); - k=BIG_nbits(q); - BIG_rcopy(r, CURVE_Order); - m=BIG_nbits(r); - L=ROUNDUP(k+ROUNDUP(m,2),8); - XMD_Expand(MC_SHA2,HASH_TYPE_ZZZ,&OKM,L,DST,ID); - for (j=0;jval, s); - S->len = MODBYTES_XXX; - return 0; -} - -/* Extract PIN from TOKEN for identity CID */ -int ZZZ::MPIN_EXTRACT_PIN(octet *CID, int pin, octet *TOKEN) -{ - ECP P, R; - int res = 0; - pin %= MAXPIN; - - if (!ECP_fromOctet(&P, TOKEN)) res = MPIN_INVALID_POINT; - if (res == 0) - { - if (!ECP_fromOctet(&R,CID)) res=MPIN_INVALID_POINT; - } - if (res==0) - { - ECP_pinmul(&R, pin, PBLEN); - ECP_sub(&P, &R); - ECP_toOctet(TOKEN, &P, false); - } - return res; -} - -/* Implement step 2 on client side of MPin protocol - SEC=-(x+y)*SEC */ -int ZZZ::MPIN_CLIENT_2(octet *X, octet *Y, octet *SEC) -{ - BIG px, py, r; - ECP P; - int res = 0; - BIG_rcopy(r, CURVE_Order); - if (!ECP_fromOctet(&P, SEC)) res = MPIN_INVALID_POINT; - if (res == 0) - { - BIG_fromBytes(px, X->val); - BIG_fromBytes(py, Y->val); - BIG_add(px, px, py); - BIG_mod(px, r); - PAIR_G1mul(&P, px); - ECP_neg(&P); - ECP_toOctet(SEC, &P, false); /* change to TRUE for point compression */ - } - return res; -} - -/* Client secret CST=s*IDHTC where IDHTC is client ID hashed to a curve point, and s is the master secret */ -int ZZZ::MPIN_GET_CLIENT_SECRET(octet *S, octet *IDHTC, octet *CST) -{ - ECP P; - BIG s; - int res = 0; - BIG_fromBytes(s, S->val); - if (!ECP_fromOctet(&P, IDHTC)) res = MPIN_INVALID_POINT; - - if (res==0) - { - PAIR_G1mul(&P, s); - ECP_toOctet(CST, &P, false); /* change to TRUE for point compression */ - } - return res; -} - -/* Implement step 1 on client side of MPin protocol */ -int ZZZ::MPIN_CLIENT_1(octet *CID, csprng *RNG, octet *X, int pin, octet *TOKEN, octet *SEC, octet *xID) -{ - BIG r, x; - ECP P, T, W; - int res = 0; - - BIG_rcopy(r, CURVE_Order); - if (RNG != NULL) - { - BIG_randtrunc(x, r, 2 * CURVE_SECURITY_ZZZ, RNG); - X->len = MODBYTES_XXX; - BIG_toBytes(X->val, x); - } - else - BIG_fromBytes(x, X->val); - - if (!ECP_fromOctet(&P,CID)) res=MPIN_INVALID_POINT; - - if (res==0) - { - if (!ECP_fromOctet(&T, TOKEN)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - pin %= MAXPIN; - - ECP_copy(&W, &P); // W=H(ID) - ECP_pinmul(&W, pin, PBLEN); // W=alpha.H(ID) - ECP_add(&T, &W); // T=Token+alpha.H(ID) = s.H(ID) - PAIR_G1mul(&P, x); // P=x.H(ID) - ECP_toOctet(xID, &P, false); // xID /* change to TRUE for point compression */ - } - - if (res == 0) - { - ECP_toOctet(SEC, &T, false); // V /* change to TRUE for point compression */ - } - return res; -} - -/* Extract Server Secret SST=S*Q where Q is fixed generator in G2 and S is master secret */ -int ZZZ::MPIN_GET_SERVER_SECRET(octet *S, octet *SST) -{ - BIG r, s; - ECP2 Q; - int res = 0; - BIG_rcopy(r, CURVE_Order); - ECP2_generator(&Q); - if (res == 0) - { - BIG_fromBytes(s, S->val); - PAIR_G2mul(&Q, s); - ECP2_toOctet(SST, &Q, false); - } - return res; -} - -/* Implement M-Pin on server side */ -int ZZZ::MPIN_SERVER(octet *HID, octet *Y, octet *SST, octet *xID, octet *mSEC) -{ - BIG y; - FP12 g; - ECP2 Q, sQ; - ECP P, R; - int res = 0; - - ECP2_generator(&Q); - if (!ECP2_fromOctet(&sQ, SST)) res = MPIN_INVALID_POINT; - if (res == 0) - { - if (!ECP_fromOctet(&R, xID)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - BIG_fromBytes(y, Y->val); - if (!ECP_fromOctet(&P, HID)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - PAIR_G1mul(&P, y); - ECP_add(&P, &R); - if (!ECP_fromOctet(&R, mSEC)) res = MPIN_INVALID_POINT; // V - } - if (res == 0) - { - PAIR_double_ate(&g, &Q, &R, &sQ, &P); - PAIR_fexp(&g); - - if (!FP12_isunity(&g)) - { - res = MPIN_BAD_PIN; - } - } - return res; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin192.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin192.cpp deleted file mode 100644 index 1aa6471..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin192.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* MPIN 192-bit API Functions */ - -/* Version 3.0 */ - -#include -#include -#include -#include -#include "mpin192_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#define ROUNDUP(a,b) ((a)-1)/(b)+1 - -void ZZZ::MPIN_ENCODE_TO_CURVE(octet *DST,octet *ID,octet *HCID) -{ - int j,k,m,L; - char okm[512],fd[256]; - BIG q,r,w; - ECP P; - FP u; - DBIG dx; - octet OKM = {0,sizeof(okm),okm}; - BIG_rcopy(q,Modulus); - k=BIG_nbits(q); - BIG_rcopy(r, CURVE_Order); - m=BIG_nbits(r); - L=ROUNDUP(k+ROUNDUP(m,2),8); - XMD_Expand(MC_SHA2,HASH_TYPE_ZZZ,&OKM,L,DST,ID); - for (j=0;jval, s); - S->len = MODBYTES_XXX; - return 0; -} - -/* Extract PIN from TOKEN for identity CID */ -int ZZZ::MPIN_EXTRACT_PIN(octet *CID, int pin, octet *TOKEN) -{ - ECP P, R; - int res = 0; - pin %= MAXPIN; - - if (!ECP_fromOctet(&P, TOKEN)) res = MPIN_INVALID_POINT; - if (res == 0) - { - if (!ECP_fromOctet(&R,CID)) res=MPIN_INVALID_POINT; - } - if (res==0) - { - ECP_pinmul(&R, pin, PBLEN); - ECP_sub(&P, &R); - ECP_toOctet(TOKEN, &P, false); - } - return res; -} - -/* Implement step 2 on client side of MPin protocol - SEC=-(x+y)*SEC */ -int ZZZ::MPIN_CLIENT_2(octet *X, octet *Y, octet *SEC) -{ - BIG px, py, r; - ECP P; - int res = 0; - BIG_rcopy(r, CURVE_Order); - if (!ECP_fromOctet(&P, SEC)) res = MPIN_INVALID_POINT; - if (res == 0) - { - BIG_fromBytes(px, X->val); - BIG_fromBytes(py, Y->val); - BIG_add(px, px, py); - BIG_mod(px, r); - PAIR_G1mul(&P, px); - ECP_neg(&P); - ECP_toOctet(SEC, &P, false); - } - return res; -} - -/* Client secret CST=s*IDHTC where IDHTC is client ID hashed to a curve point, and s is the master secret */ -int ZZZ::MPIN_GET_CLIENT_SECRET(octet *S, octet *IDHTC, octet *CST) -{ - ECP P; - BIG s; - int res = 0; - BIG_fromBytes(s, S->val); - if (!ECP_fromOctet(&P, IDHTC)) res = MPIN_INVALID_POINT; - if (res==0) - { - PAIR_G1mul(&P, s); - ECP_toOctet(CST, &P, false); /* change to TRUE for point compression */ - } - return res; -} - -/* Implement step 1 on client side of MPin protocol */ -int ZZZ::MPIN_CLIENT_1(octet *CID, csprng *RNG, octet *X, int pin, octet *TOKEN, octet *SEC, octet *xID) -{ - BIG r, x; - ECP P, T, W; - int res = 0; - BIG_rcopy(r, CURVE_Order); - if (RNG != NULL) - { - BIG_randtrunc(x, r, 2 * CURVE_SECURITY_ZZZ, RNG); - X->len = MODBYTES_XXX; - BIG_toBytes(X->val, x); - } - else - BIG_fromBytes(x, X->val); - - if (!ECP_fromOctet(&P,CID)) res=MPIN_INVALID_POINT; - - if (res==0) - { - if (!ECP_fromOctet(&T, TOKEN)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - pin %= MAXPIN; - ECP_copy(&W, &P); // W=H(ID) - ECP_pinmul(&W, pin, PBLEN); // W=alpha.H(ID) - ECP_add(&T, &W); // T=Token+alpha.H(ID) = s.H(ID) - PAIR_G1mul(&P, x); // P=x.H(ID) - ECP_toOctet(xID, &P, false); // xID - } - - if (res == 0) - { - ECP_toOctet(SEC, &T, false); // V - } - return res; -} - -/* Extract Server Secret SST=S*Q where Q is fixed generator in G2 and S is master secret */ -int ZZZ::MPIN_GET_SERVER_SECRET(octet *S, octet *SST) -{ - BIG r, s; - ECP4 Q; - int res = 0; - BIG_rcopy(r, CURVE_Order); - ECP4_generator(&Q); - if (res == 0) - { - BIG_fromBytes(s, S->val); - PAIR_G2mul(&Q, s); - ECP4_toOctet(SST, &Q, false); - } - return res; -} - -/* Implement M-Pin on server side */ -int ZZZ::MPIN_SERVER(octet *HID, octet *Y, octet *SST, octet *xID, octet *mSEC) -{ - BIG y; - FP24 g; - ECP4 Q, sQ; - ECP P, R; - int res = 0; - ECP4_generator(&Q); - - if (!ECP4_fromOctet(&sQ, SST)) res = MPIN_INVALID_POINT; - if (res == 0) - { - if (!ECP_fromOctet(&R, xID)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - BIG_fromBytes(y, Y->val); - if (!ECP_fromOctet(&P, HID)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - PAIR_G1mul(&P, y); // y(A+AT) - ECP_add(&P, &R); // x(A+AT)+y(A+T) - if (!ECP_fromOctet(&R, mSEC)) res = MPIN_INVALID_POINT; // V - } - if (res == 0) - { - PAIR_double_ate(&g, &Q, &R, &sQ, &P); - PAIR_fexp(&g); - if (!FP24_isunity(&g)) - { - res = MPIN_BAD_PIN; - } - } - return res; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin256.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin256.cpp deleted file mode 100644 index 14230c6..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/mpin256.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* MPIN 256-bit API Functions */ - -/* Version 3.0 */ - -#include -#include -#include -#include -#include "mpin256_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -#define ROUNDUP(a,b) ((a)-1)/(b)+1 - -void ZZZ::MPIN_ENCODE_TO_CURVE(octet *DST,octet *ID,octet *HCID) -{ - int j,k,m,L; - char okm[512],fd[256]; - BIG q,r,w; - ECP P; - FP u; - DBIG dx; - octet OKM = {0,sizeof(okm),okm}; - BIG_rcopy(q,Modulus); - k=BIG_nbits(q); - BIG_rcopy(r, CURVE_Order); - m=BIG_nbits(r); - L=ROUNDUP(k+ROUNDUP(m,2),8); - XMD_Expand(MC_SHA2,HASH_TYPE_ZZZ,&OKM,L,DST,ID); - for (j=0;jval, s); - S->len = MODBYTES_XXX; - return 0; -} - -/* Extract PIN from TOKEN for identity CID */ -int ZZZ::MPIN_EXTRACT_PIN(octet *CID, int pin, octet *TOKEN) -{ - ECP P, R; - int res = 0; - pin %= MAXPIN; - if (!ECP_fromOctet(&P, TOKEN)) res = MPIN_INVALID_POINT; - if (res == 0) - { - if (!ECP_fromOctet(&R,CID)) res=MPIN_INVALID_POINT; - } - if (res==0) - { - ECP_pinmul(&R, pin, PBLEN); - ECP_sub(&P, &R); - ECP_toOctet(TOKEN, &P, false); - } - return res; -} - -/* Implement step 2 on client side of MPin protocol - SEC=-(x+y)*SEC */ -int ZZZ::MPIN_CLIENT_2(octet *X, octet *Y, octet *SEC) -{ - BIG px, py, r; - ECP P; - int res = 0; - BIG_rcopy(r, CURVE_Order); - if (!ECP_fromOctet(&P, SEC)) res = MPIN_INVALID_POINT; - if (res == 0) - { - BIG_fromBytes(px, X->val); - BIG_fromBytes(py, Y->val); - BIG_add(px, px, py); - BIG_mod(px, r); - PAIR_G1mul(&P, px); - ECP_neg(&P); - ECP_toOctet(SEC, &P, false); - } - return res; -} - -/* Client secret CST=s*IDHTC where IDHTC is client ID hashed to a curve point, and s is the master secret */ -int ZZZ::MPIN_GET_CLIENT_SECRET(octet *S, octet *IDHTC, octet *CST) -{ - ECP P; - BIG s; - int res = 0; - BIG_fromBytes(s, S->val); - if (!ECP_fromOctet(&P, IDHTC)) res = MPIN_INVALID_POINT; - if (res==0) - { - PAIR_G1mul(&P, s); - ECP_toOctet(CST, &P, false); /* change to TRUE for point compression */ - } - return res; -} - -/* Implement step 1 on client side of MPin protocol */ -int ZZZ::MPIN_CLIENT_1(octet *CID, csprng *RNG, octet *X, int pin, octet *TOKEN, octet *SEC, octet *xID) -{ - BIG r, x; - ECP P, T, W; - int res = 0; - BIG_rcopy(r, CURVE_Order); - if (RNG != NULL) - { - BIG_randtrunc(x, r, 2 * CURVE_SECURITY_ZZZ, RNG); - X->len = MODBYTES_XXX; - BIG_toBytes(X->val, x); - } - else - BIG_fromBytes(x, X->val); - - if (!ECP_fromOctet(&P,CID)) res=MPIN_INVALID_POINT; - - if (res==0) - { - if (!ECP_fromOctet(&T, TOKEN)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - pin %= MAXPIN; - ECP_copy(&W, &P); // W=H(ID) - ECP_pinmul(&W, pin, PBLEN); // W=alpha.H(ID) - ECP_add(&T, &W); // T=Token+alpha.H(ID) = s.H(ID) - PAIR_G1mul(&P, x); // P=x.H(ID) - ECP_toOctet(xID, &P, false); // xID - } - if (res == 0) - { - ECP_toOctet(SEC, &T, false); // V - } - return res; -} - -/* Extract Server Secret SST=S*Q where Q is fixed generator in G2 and S is master secret */ -int ZZZ::MPIN_GET_SERVER_SECRET(octet *S, octet *SST) -{ - BIG r, s; - ECP8 Q; - int res = 0; - BIG_rcopy(r, CURVE_Order); - ECP8_generator(&Q); - if (res == 0) - { - BIG_fromBytes(s, S->val); - PAIR_G2mul(&Q, s); - ECP8_toOctet(SST, &Q, false); - } - return res; -} - -/* Implement M-Pin on server side */ -int ZZZ::MPIN_SERVER(octet *HID, octet *Y, octet *SST, octet *xID, octet *mSEC) -{ - BIG y; - FP48 g; - ECP8 Q, sQ; - ECP P, R; - int res = 0; - ECP8_generator(&Q); - - if (!ECP8_fromOctet(&sQ, SST)) res = MPIN_INVALID_POINT; - - if (res == 0) - { - if (!ECP_fromOctet(&R, xID)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - BIG_fromBytes(y, Y->val); - if (!ECP_fromOctet(&P, HID)) res = MPIN_INVALID_POINT; - } - if (res == 0) - { - PAIR_G1mul(&P, y); // y(A+AT) - ECP_add(&P, &R); // x(A+AT)+y(A+T) - if (!ECP_fromOctet(&R, mSEC)) res = MPIN_INVALID_POINT; // V - } - if (res == 0) - { - PAIR_double_ate(&g, &Q, &R, &sQ, &P); - PAIR_fexp(&g); - if (!FP48_isunity(&g)) - { - res = MPIN_BAD_PIN; - } - } - return res; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/newhope.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/newhope.cpp deleted file mode 100644 index b3b4c4c..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/newhope.cpp +++ /dev/null @@ -1,517 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* NewHope API implementation. Constant time. - - LOOK - no if statements! - - M.Scott 21/07/2017 -*/ - -#include "newhope.h" - -using namespace core; - -const sign16 roots[] = {0x2ac8, 0x2baf, 0x299b, 0x685, 0x2f04, 0x158d, 0x2d49, 0x24b5, 0x1edc, 0xab3, 0x2a95, 0x24d, 0x3cb, 0x6a8, 0x12f9, 0x15ba, 0x1861, 0x2a89, 0x1c5c, 0xbe6, 0xc1e, 0x2024, 0x207, 0x19ce, 0x2710, 0x1744, 0x18bc, 0x2cd7, 0x396, 0x18d5, 0x1c45, 0xc4, 0x21a6, 0xe03, 0x2b3c, 0x2d91, 0xc5d, 0x432, 0x1fbc, 0xcae, 0x2512, 0x2979, 0x3b2, 0x714, 0xb2e, 0x1a97, 0x1a03, 0x1bcd, 0x2216, 0x2701, 0xa, 0x263c, 0x1179, 0x200c, 0x2d08, 0x1c34, 0x291, 0x2c99, 0x2a5a, 0x723, 0xb1d, 0x1ccc, 0x1fb6, 0x2f58, 0x2bfe, 0x1cda, 0x2a0, 0x5f1, 0x2de, 0x1fc7, 0x1ea8, 0x1719, 0x2fa7, 0x27ec, 0x20ff, 0x12c0, 0x1ac1, 0x2232, 0x2f9b, 0xd3e, 0x2aed, 0x15f0, 0x11e8, 0xed0, 0x26a, 0x1de5, 0xa3f, 0xf43, 0xebf, 0x204e, 0xac7, 0x2d9c, 0x5ea, 0x25d1, 0xb6, 0x49c, 0x995, 0x2555, 0x26e2, 0x100, 0x1878, 0x5aa, 0x2e10, 0x271c, 0xcb, 0x1b4c, 0x2fb8, 0x25b7, 0x1543, 0x2c7b, 0x241a, 0x2223, 0x20ca, 0x24ed, 0x137, 0x1b65, 0x1dc2, 0x7c7, 0x2ec3, 0xd0c, 0x1169, 0x1c7a, 0x1ea1, 0xf89, 0x2199, 0x291d, 0x1088, 0x2046, 0x256d, 0x2bc7, 0x2e9b, 0x41f, 0x1b55, 0x2b38, 0xd0, 0x2e6a, 0x1755, 0x6bc, 0x2724, 0x3ba, 0x222e, 0x2c5c, 0x2da5, 0x213c, 0x10fe, 0x169a, 0x1552, 0x5d3, 0x300, 0x1b5d, 0x1342, 0x2004, 0x256f, 0x2039, 0x667, 0x23b5, 0x1123, 0xdb, 0x2da0, 0xe1e, 0x2f54, 0x2767, 0x154a, 0x40a, 0x11d3, 0x2821, 0xc09, 0x974, 0x694, 0xfbf, 0x27ba, 0x132, 0x83f, 0x2d06, 0x10e, 0x183f, 0x29ae, 0x28c3, 0x2dc9, 0x1144, 0x2c70, 0x2a4a, 0xf3c, 0x1e32, 0x1171, 0x1e43, 0xdd4, 0x2ddf, 0x28d2, 0xfac, 0x3c4, 0x2f19, 0x10a6, 0x2f7, 0xe1d, 0x828, 0x138f, 0x1332, 0xfab, 0xcf6, 0x13f8, 0x24a0, 0x112d, 0x2717, 0x6e7, 0x1044, 0x36e, 0xfe8, 0x6a, 0xba7, 0x1d69, 0x29ec, 0x23b2, 0xaee, 0x16df, 0x1068, 0x1a7e, 0x253f, 0x24c, 0xb33, 0x2683, 0x15ce, 0x1ad3, 0x1a36, 0xc96, 0xaea, 0x260a, 0xce, 0x28b1, 0xe4f, 0x2b11, 0x5f8, 0x1fc4, 0xe77, 0x2366, 0x11f9, 0x153c, 0x24eb, 0x20cd, 0x1398, 0x22, 0x2b97, 0x249b, 0x8eb, 0x12b2, 0x2fe3, 0x29c1, 0x1b00, 0x2663, 0xeaa, 0x2e06, 0xe0, 0x1569, 0x10f5, 0x284e, 0xa38, 0x201d, 0x1c53, 0x1681, 0x1f6f, 0x2f95, 0x2fe8, 0xacb, 0x1680, 0x17fd, 0x2c39, 0x165a, 0x10bb, 0x29d8, 0x2622, 0x1196, 0x884, 0x2a79, 0x140e, 0x2d80, 0x6fa, 0x11b2, 0x26c4, 0x355, 0x1054, 0x29e9, 0x23ed, 0xbe3, 0x24fa, 0x1fb3, 0x10ac, 0x2919, 0x2584, 0x10a4, 0xe85, 0x650, 0x1893, 0x1dc1, 0xd8e, 0x12dc, 0x2d42, 0x284d, 0xfff, 0x250f, 0xacd, 0x13c3, 0x6cc, 0x1a79, 0x1221, 0x2614, 0x270a, 0x1ea, 0x155, 0x2818, 0x222c, 0x2e5b, 0x25d8, 0x1dbf, 0x191c, 0xb0f, 0xdac, 0x1082, 0x12ef, 0x11b6, 0xfa8, 0x2b72, 0x159d, 0x209e, 0x31b, 0x2c7c, 0x14f7, 0xe09, 0x1bb2, 0x1ec7, 0x2404, 0x20ae, 0x6ad, 0xed6, 0x2b70, 0x1c7b, 0x18d1, 0x2732, 0x12da, 0xd56, 0x5c1, 0x1648, 0x18b7, 0x1605, 0x1bc4, 0x280, 0x2ece, 0xc, 0x1aae, 0x1c4, 0x1cdb, 0x22d6, 0x21d8, 0x257c, 0x51f, 0x211b, 0xff, 0x2ee0, 0x2585, 0xe1, 0x2c35, 0x26db, 0x2971, 0x2208, 0x17e1, 0x21be, 0x135e, 0x28d6, 0x2891, 0x1689, 0x2138, 0xb86, 0x2e3a, 0x1204, 0x2d10, 0x2324, 0xf3f, 0x2508, 0x33d, 0xcb2, 0x292a, 0xe27, 0x2e64, 0x29f8, 0x2d46, 0x9b7, 0x20eb, 0x1b7c, 0x9eb, 0x2b2a, 0x58c, 0x27d0, 0x121b, 0x272e, 0x29f6, 0x2dbd, 0x2697, 0x2aac, 0xd6f, 0x1c67, 0x2c5b, 0x108d, 0x363, 0x249d, 0x2d5e, 0x2fd, 0x2cb2, 0x1f8f, 0x20a4, 0xa19, 0x2ac9, 0x19b1, 0x1581, 0x17a2, 0x29eb, 0x1b72, 0x13b0, 0xee4, 0xa8f, 0x2315, 0x5e6, 0x951, 0x2e29, 0xdad, 0x1f2b, 0x224e, 0x37f, 0x1a72, 0xa91, 0x1407, 0x2df9, 0x3ad, 0x23f7, 0x1a24, 0x1d2a, 0x234b, 0x1df3, 0x1143, 0x7ff, 0x1a6d, 0x2774, 0x2690, 0x2ab5, 0x586, 0x2781, 0x2009, 0x2fdd, 0x2881, 0x399, 0x2fb6, 0x144, 0x137f, 0xfa0, 0x2e4c, 0x1c7f, 0x2fac, 0xb09, 0x1264, 0x127b, 0x198c, 0x2b40, 0x230, 0x1cf4, 0x180b, 0xb58, 0x144a, 0x2aec, 0xfb, 0x2602, 0x14ee, 0x783, 0x1098, 0x23d8, 0x203, 0xe9, 0x108a, 0x14b8, 0xeec, 0xc58, 0x1248, 0x243c, 0x28aa, 0x6bf, 0x27c4, 0x276e, 0x19b8, 0x1d11, 0x2e16, 0x472, 0x1464, 0x24b9, 0x662, 0x1097, 0x2067, 0x20d6, 0x171c, 0x4, 0x682, 0x17bb, 0x1186, 0x4f2, 0x3ff, 0x2a43, 0x1dc7, 0x1ae5, 0x8cc, 0x2e7c, 0x2ef8, 0x2ae0, 0x2904, 0xed4, 0x6c5, 0x14ae, 0xb72, 0x11c3, 0x337, 0x2da3, 0x2916, 0x6d8, 0x1cf9, 0x10ee, 0x1800, 0x1ae4, 0xa0d, 0x101b, 0x1a8d, 0x2e98, 0x24cd, 0x813, 0x1aa4, 0x9b9, 0x680, 0x2349, 0x24d1, 0x20f8, 0xe31, 0x249f, 0x216b, 0x12d9, 0x1d21, 0x19db, 0x191a, 0x1dd0, 0x5df, 0x55c, 0x2b86, 0x213, 0xe9e, 0x1ef1, 0x268a, 0x1d5e, 0x1e20, 0x28c1, 0x1379, 0x249, 0x19de, 0x18b, 0x1e41, 0x2a1e, 0x2612, 0x297, 0x2e96, 0x2102, 0x46, 0x1b9f, 0x1a4d, 0x2050, 0x1b32, 0x568, 0x11f7, 0x1829, 0x870, 0x1f4, 0x1dca, 0x990, 0x1df6, 0x2b62, 0x13ec, 0x9f2, 0x1260, 0x2997, 0x1412, 0x1e6d, 0x1694, 0x11ac, 0x2d8b, 0x276f, 0x26f5, 0x233e, 0x2b44, 0x2f5a, 0x2d37, 0x2cb1, 0xc75, 0x98d, 0x1d56, 0x7ae, 0x10e6, 0x113f, 0x17b8, 0xad3, 0x737, 0x221e, 0x1b70, 0x1f3e, 0x2966, 0x18b2, 0x4fa, 0x2044, 0x1312, 0x154e, 0x2029, 0x700, 0x1b45, 0x27a6, 0x226a, 0x21bf, 0x58d, 0x2f11, 0x2e02, 0x17fc, 0x4d2, 0x1757, 0xcb1, 0x2ef1, 0x2582, 0x1276, 0x881, 0x2fc0, 0x104a, 0x670, 0x274f, 0x2b53, 0x19dd, 0x752, 0x1663, 0xcbd, 0x2b2b, 0x2fc6, 0x13b6, 0x21e6, 0x15f6, 0x126b, 0x2637, 0x1cd9, 0x2f50, 0xe82, 0x5b0, 0x24e0, 0x1350, 0x2f24, 0x21f7, 0x1a16, 0x2f3e, 0x167e, 0x1f7d, 0x28a0, 0x16f0, 0xe33, 0x53b, 0x28c5, 0x1500, 0x2f88, 0x26cc, 0x2018, 0x1604, 0x218b, 0x2cd1, 0x9ee, 0x17f3, 0x5fd, 0x1f5a, 0x2d0, 0x2b46, 0x23cc, 0x503, 0x1c46, 0x1cc3, 0x28e2, 0x243e, 0x122b, 0x2e0c, 0xe37, 0x2611, 0x85e, 0x9b8, 0x1b24, 0x762, 0x19b6, 0x3bc, 0x2d50, 0x2079, 0x18da, 0x170a, 0x800, 0xaa2, 0x135a, 0x1a15, 0x13d1, 0xca, 0x2113, 0x2db9, 0xdb2, 0x1a5c, 0x29a9, 0x1488, 0x14c1, 0x2c9, 0x917, 0x28e7, 0x265c, 0xdab, 0x2ab9, 0x2bc6, 0x105b, 0x1839, 0x219c, 0x50, 0x11da, 0x1802, 0xf56, 0x2e6, 0x2190, 0xddb, 0x56e, 0x9d9, 0x1c81, 0x1016, 0x12d6, 0x296f, 0x14b4, 0x1014, 0x1e64, 0x1d90, 0x89f, 0x2bc2, 0x2777, 0x2819, 0x1c65, 0x1a41, 0x5a2, 0x2cd2, 0x427, 0xd71, 0x29c8, 0x1e58, 0x53f, 0x7c5, 0x1dcd, 0x4a1, 0x1268, 0x2597, 0x2926, 0xee, 0x111b, 0x1038, 0xe6c, 0x22dc, 0x2f2f, 0x441, 0x2cfd, 0x1cb0, 0x6a4, 0x2224, 0x620, 0x5dc, 0x16b1, 0x2a1d, 0x1787, 0x20c7, 0x641, 0xd84, 0x1c05, 0x2d0d, 0x2f52, 0x1b8c, 0xd7d, 0x17e8, 0x1589, 0xc73, 0x151b, 0x4e2, 0x1ae9, 0x1b18, 0xb9b, 0x949, 0x2c60, 0x1e7a, 0xd5, 0x1bdc, 0x1f57, 0x1753, 0x124a, 0x559, 0xb76, 0x2334, 0x12d1, 0x1de1, 0x14b2, 0x2faa, 0x1697, 0x147a, 0x5a1, 0x2c30, 0x1c02, 0x1043, 0x2ee1, 0x2402, 0x1cc8, 0x2a16, 0xff7, 0x1364, 0x1b9a, 0x2a53, 0x2f94, 0x294c, 0x1ee5, 0x1a87, 0x2141, 0xd66, 0x953, 0x28a3, 0x2f30, 0x2477, 0x18e3, 0x1035, 0x1fc1, 0x1d68, 0x2fb3, 0x138c, 0x2487, 0x1bf8, 0xd96, 0x1018, 0x748, 0x244e, 0x15bd, 0x175e, 0x2be, 0x23d, 0x1da, 0x176d, 0xc17, 0x24be, 0x2ebb, 0x7d8, 0x100a, 0x759, 0x1db4, 0x2259, 0x23f4, 0x2d59, 0x2847, 0xbf5, 0x1cfe, 0xa20, 0x258, 0x1180, 0x279c, 0x54, 0x2abf, 0xc5c, 0x9f9, 0x3d5, 0x2ce4, 0x165f, 0x23d9, 0x27b9, 0x6f9, 0x281a, 0x169e, 0x627, 0x156d, 0x1ff8, 0x211, 0x2e34, 0x1724, 0x2c2e, 0x2790, 0x2dd5, 0x2bf2, 0xdbc, 0x2884, 0x20a9, 0x2390, 0x1e1a, 0x1b6a, 0x5f7, 0xab7, 0x1333, 0x16ab, 0x28dd, 0x20, 0x30f, 0x24b6, 0x5c2, 0x1ce4, 0x1400, 0x2669, 0x60, 0x156c, 0xe20, 0x26d4, 0x26ab, 0x1ebb, 0x223d, 0x5b4, 0x2025, 0x1e1c, 0xaae, 0x2e08, 0x6cd, 0x1677, 0x13d9, 0x17b5, 0x1046, 0x1d8c, 0x14eb, 0x18d8, 0x1ce5, 0x2478, 0x16ae, 0xb79, 0x23d4, 0x684, 0x156b, 0x567, 0x1a, 0x29ce, 0x83a, 0x19e8, 0x58e, 0x294a, 0x1136, 0x2319, 0x2fba, 0x1a29, 0x1d, 0x1879, 0x291b, 0x19f6, 0x2c2f, 0x21c9, 0x19bb, 0xbbc, 0x26f9, 0xc22, 0x708, 0x11a1, 0x18d3, 0x7f8, 0x28f8, 0x2427, 0x1deb, 0xaed, 0x26aa, 0x2482, 0x203b, 0x2f05, 0x2b82, 0x192f, 0x2df4, 0x8dc, 0x2877, 0xd5e, 0x240e, 0x775, 0x2dae, 0x1d3e, 0x20ba, 0x215b, 0x22d1, 0xeba, 0xf50, 0xaa8, 0x184a, 0x1f67, 0x2e04, 0xc6e, 0x6dd, 0x1a09, 0x27f, 0x494, 0x1426, 0xae3, 0xe15, 0x65f, 0x13c4, 0x105, 0x872, 0x2667, 0x1ff6, 0xd9f, 0x2ca1, 0x2f39, 0x2657, 0x23fd, 0x2405, 0xb73, 0x2294, 0x1f1e, 0x2eba, 0x110a, 0x2cae, 0x141f, 0x22cd, 0x25d6, 0x11c1, 0x1c, 0x2d8e, 0x161a, 0x1aa8, 0x229e, 0x1bf9, 0x7cf, 0x106d, 0x2c40, 0xd93, 0x255e, 0x28c2, 0xc1a, 0x2f17, 0x7ca, 0x2f63, 0xbf}; -const sign16 iroots[] = {0x2ac8, 0x452, 0x297c, 0x666, 0xb4c, 0x2b8, 0x1a74, 0xfd, 0x1a47, 0x1d08, 0x2959, 0x2c36, 0x2db4, 0x56c, 0x254e, 0x1125, 0x2f3d, 0x13bc, 0x172c, 0x2c6b, 0x32a, 0x1745, 0x18bd, 0x8f1, 0x1633, 0x2dfa, 0xfdd, 0x23e3, 0x241b, 0x13a5, 0x578, 0x17a0, 0xa9, 0x104b, 0x1335, 0x24e4, 0x28de, 0x5a7, 0x368, 0x2d70, 0x13cd, 0x2f9, 0xff5, 0x1e88, 0x9c5, 0x2ff7, 0x900, 0xdeb, 0x1434, 0x15fe, 0x156a, 0x24d3, 0x28ed, 0x2c4f, 0x688, 0xaef, 0x2353, 0x1045, 0x2bcf, 0x23a4, 0x270, 0x4c5, 0x21fe, 0xe5b, 0xfbb, 0x1f79, 0x6e4, 0xe68, 0x2078, 0x1160, 0x1387, 0x1e98, 0x22f5, 0x13e, 0x283a, 0x123f, 0x149c, 0x2eca, 0xb14, 0xf37, 0xdde, 0xbe7, 0x386, 0x1abe, 0xa4a, 0x49, 0x14b5, 0x2f36, 0x8e5, 0x1f1, 0x2a57, 0x1789, 0x2f01, 0x91f, 0xaac, 0x266c, 0x2b65, 0x2f4b, 0xa30, 0x2a17, 0x265, 0x253a, 0xfb3, 0x2142, 0x20be, 0x25c2, 0x121c, 0x2d97, 0x2131, 0x1e19, 0x1a11, 0x514, 0x22c3, 0x66, 0xdcf, 0x1540, 0x1d41, 0xf02, 0x815, 0x5a, 0x18e8, 0x1159, 0x103a, 0x2d23, 0x2a10, 0x2d61, 0x1327, 0x403, 0x25c9, 0x7b3, 0x1f0c, 0x1a98, 0x2f21, 0x1fb, 0x2157, 0x99e, 0x1501, 0x640, 0x1e, 0x1d4f, 0x2716, 0xb66, 0x46a, 0x2fdf, 0x1c69, 0xf34, 0xb16, 0x1ac5, 0x1e08, 0xc9b, 0x218a, 0x103d, 0x2a09, 0x4f0, 0x21b2, 0x750, 0x2f33, 0x9f7, 0x2517, 0x236b, 0x15cb, 0x152e, 0x1a33, 0x97e, 0x24ce, 0x2db5, 0xac2, 0x1583, 0x1f99, 0x1922, 0x2513, 0xc4f, 0x615, 0x1298, 0x245a, 0x2f97, 0x2019, 0x2c93, 0x1fbd, 0x291a, 0x8ea, 0x1ed4, 0xb61, 0x1c09, 0x230b, 0x2056, 0x1ccf, 0x1c72, 0x27d9, 0x21e4, 0x2d0a, 0x1f5b, 0xe8, 0x2c3d, 0x2055, 0x72f, 0x222, 0x222d, 0x11be, 0x1e90, 0x11cf, 0x20c5, 0x5b7, 0x391, 0x1ebd, 0x238, 0x73e, 0x653, 0x17c2, 0x2ef3, 0x2fb, 0x27c2, 0x2ecf, 0x847, 0x2042, 0x296d, 0x268d, 0x23f8, 0x7e0, 0x1e2e, 0x2bf7, 0x1ab7, 0x89a, 0xad, 0x21e3, 0x261, 0x2f26, 0x1ede, 0xc4c, 0x299a, 0xfc8, 0xa92, 0xffd, 0x1cbf, 0x14a4, 0x2d01, 0x2a2e, 0x1aaf, 0x1967, 0x1f03, 0xec5, 0x25c, 0x3a5, 0xdd3, 0x2c47, 0x8dd, 0x2945, 0x18ac, 0x197, 0x2f31, 0x4c9, 0x14ac, 0x2be2, 0x166, 0x43a, 0xa94, 0x1b53, 0x293c, 0x212d, 0x6fd, 0x521, 0x109, 0x185, 0x2735, 0x151c, 0x123a, 0x5be, 0x2c02, 0x2b0f, 0x1e7b, 0x1846, 0x297f, 0x2ffd, 0x18e5, 0xf2b, 0xf9a, 0x1f6a, 0x299f, 0xb48, 0x1b9d, 0x2b8f, 0x1eb, 0x12f0, 0x1649, 0x893, 0x83d, 0x2942, 0x757, 0xbc5, 0x1db9, 0x23a9, 0x2115, 0x1b49, 0x1f77, 0x2f18, 0x2dfe, 0xc29, 0x1f69, 0x287e, 0x1b13, 0x9ff, 0x2f06, 0x515, 0x1bb7, 0x24a9, 0x17f6, 0x130d, 0x2dd1, 0x4c1, 0x1675, 0x1d86, 0x1d9d, 0x24f8, 0x55, 0x1382, 0x1b5, 0x2061, 0x1c82, 0x2ebd, 0x4b, 0x2c68, 0x780, 0x24, 0xff8, 0x880, 0x2a7b, 0x54c, 0x971, 0x88d, 0x1594, 0x2802, 0x1ebe, 0x120e, 0xcb6, 0x12d7, 0x15dd, 0xc0a, 0x2c54, 0x208, 0x1bfa, 0x2570, 0x158f, 0x2c82, 0xdb3, 0x10d6, 0x2254, 0x1d8, 0x26b0, 0x2a1b, 0xcec, 0x2572, 0x211d, 0x1c51, 0x148f, 0x616, 0x185f, 0x1a80, 0x1650, 0x538, 0x25e8, 0xf5d, 0x1072, 0x34f, 0x2d04, 0x2a3, 0xb64, 0x2c9e, 0x1f74, 0x3a6, 0x139a, 0x2292, 0x555, 0x96a, 0x244, 0x60b, 0x8d3, 0x1de6, 0x831, 0x2a75, 0x4d7, 0x2616, 0x1485, 0xf16, 0x264a, 0x2bb, 0x609, 0x19d, 0x21da, 0x6d7, 0x234f, 0x2cc4, 0xaf9, 0x20c2, 0xcdd, 0x2f1, 0x1dfd, 0x1c7, 0x247b, 0xec9, 0x1978, 0x770, 0x72b, 0x1ca3, 0xe43, 0x1820, 0xdf9, 0x690, 0x926, 0x3cc, 0x2f20, 0xa7c, 0x121, 0x2f02, 0xee6, 0x2ae2, 0xa85, 0xe29, 0xd2b, 0x1326, 0x2e3d, 0x1553, 0x2ff5, 0x133, 0x2d81, 0x143d, 0x19fc, 0x174a, 0x19b9, 0x2a40, 0x22ab, 0x1d27, 0x8cf, 0x1730, 0x1386, 0x491, 0x212b, 0x2954, 0xf53, 0xbfd, 0x113a, 0x144f, 0x21f8, 0x1b0a, 0x385, 0x2ce6, 0xf63, 0x1a64, 0x48f, 0x2059, 0x1e4b, 0x1d12, 0x1f7f, 0x2255, 0x24f2, 0x16e5, 0x1242, 0xa29, 0x1a6, 0xdd5, 0x7e9, 0x2eac, 0x2e17, 0x8f7, 0x9ed, 0x1de0, 0x1588, 0x2935, 0x1c3e, 0x2534, 0xaf2, 0x2002, 0x7b4, 0x2bf, 0x1d25, 0x2273, 0x1240, 0x176e, 0x29b1, 0x217c, 0x1f5d, 0xa7d, 0x6e8, 0x1f55, 0x104e, 0xb07, 0x241e, 0xc14, 0x618, 0x1fad, 0x2cac, 0x93d, 0x1e4f, 0x2907, 0x281, 0x1bf3, 0x588, 0x277d, 0x1e6b, 0x9df, 0x629, 0x1f46, 0x19a7, 0x3c8, 0x1804, 0x1981, 0x2536, 0x19, 0x6c, 0x1092, 0x1980, 0x13ae, 0xfe4, 0x2f42, 0x9e, 0x2837, 0xea, 0x23e7, 0x73f, 0xaa3, 0x226e, 0x3c1, 0x1f94, 0x2832, 0x1408, 0xd63, 0x1559, 0x19e7, 0x273, 0x2fe5, 0x1e40, 0xa2b, 0xd34, 0x1be2, 0x353, 0x1ef7, 0x147, 0x10e3, 0xd6d, 0x248e, 0xbfc, 0xc04, 0x9aa, 0xc8, 0x360, 0x2262, 0x100b, 0x99a, 0x278f, 0x2efc, 0x1c3d, 0x29a2, 0x21ec, 0x251e, 0x1bdb, 0x2b6d, 0x2d82, 0x15f8, 0x2924, 0x2393, 0x1fd, 0x109a, 0x17b7, 0x2559, 0x20b1, 0x2147, 0xd30, 0xea6, 0xf47, 0x12c3, 0x253, 0x288c, 0xbf3, 0x22a3, 0x78a, 0x2725, 0x20d, 0x16d2, 0x47f, 0xfc, 0xfc6, 0xb7f, 0x957, 0x2514, 0x1216, 0xbda, 0x709, 0x2809, 0x172e, 0x1e60, 0x28f9, 0x23df, 0x908, 0x2445, 0x1646, 0xe38, 0x3d2, 0x160b, 0x6e6, 0x1788, 0x2fe4, 0x15d8, 0x47, 0xce8, 0x1ecb, 0x6b7, 0x2a73, 0x1619, 0x27c7, 0x633, 0x2fe7, 0x2a9a, 0x1a96, 0x297d, 0xc2d, 0x2488, 0x1953, 0xb89, 0x131c, 0x1729, 0x1b16, 0x1275, 0x1fbb, 0x184c, 0x1c28, 0x198a, 0x2934, 0x1f9, 0x2553, 0x11e5, 0xfdc, 0x2a4d, 0xdc4, 0x1146, 0x956, 0x92d, 0x21e1, 0x1a95, 0x2fa1, 0x998, 0x1c01, 0x131d, 0x2a3f, 0xb4b, 0x2cf2, 0x2fe1, 0x724, 0x1956, 0x1cce, 0x254a, 0x2a0a, 0x1497, 0x11e7, 0xc71, 0xf58, 0x77d, 0x2245, 0x40f, 0x22c, 0x871, 0x3d3, 0x18dd, 0x1cd, 0x2df0, 0x1009, 0x1a94, 0x29da, 0x1963, 0x7e7, 0x2908, 0x848, 0xc28, 0x19a2, 0x31d, 0x2c2c, 0x2608, 0x23a5, 0x542, 0x2fad, 0x865, 0x1e81, 0x2da9, 0x25e1, 0x1303, 0x240c, 0x7ba, 0x2a8, 0xc0d, 0xda8, 0x124d, 0x28a8, 0x1ff7, 0x2829, 0x146, 0xb43, 0x23ea, 0x1894, 0x2e27, 0x2dc4, 0x2d43, 0x18a3, 0x1a44, 0xbb3, 0x28b9, 0x1fe9, 0x226b, 0x1409, 0xb7a, 0x1c75, 0x4e, 0x1299, 0x1040, 0x1fcc, 0x171e, 0xb8a, 0xd1, 0x75e, 0x26ae, 0x229b, 0xec0, 0x157a, 0x111c, 0x6b5, 0x6d, 0x5ae, 0x1467, 0x1c9d, 0x200a, 0x5eb, 0x1339, 0xbff, 0x120, 0x1fbe, 0x13ff, 0x3d1, 0x2a60, 0x1b87, 0x196a, 0x57, 0x1b4f, 0x1220, 0x1d30, 0xccd, 0x248b, 0x2aa8, 0x1db7, 0x18ae, 0x10aa, 0x1425, 0x2f2c, 0x1187, 0x3a1, 0x26b8, 0x2466, 0x14e9, 0x1518, 0x2b1f, 0x1ae6, 0x238e, 0x1a78, 0x1819, 0x2284, 0x1475, 0xaf, 0x2f4, 0x13fc, 0x227d, 0x29c0, 0xf3a, 0x187a, 0x5e4, 0x1950, 0x2a25, 0x29e1, 0xddd, 0x295d, 0x1351, 0x304, 0x2bc0, 0xd2, 0xd25, 0x2195, 0x1fc9, 0x1ee6, 0x2f13, 0x6db, 0xa6a, 0x1d99, 0x2b60, 0x1234, 0x283c, 0x2ac2, 0x11a9, 0x639, 0x2290, 0x2bda, 0x32f, 0x2a5f, 0x15c0, 0x139c, 0x7e8, 0x88a, 0x43f, 0x2762, 0x1271, 0x119d, 0x1fed, 0x1b4d, 0x692, 0x1d2b, 0x1feb, 0x1380, 0x2628, 0x2a93, 0x2226, 0xe71, 0x2d1b, 0x20ab, 0x17ff, 0x1e27, 0x2fb1, 0xe65, 0x17c8, 0x1fa6, 0x43b, 0x548, 0x2256, 0x9a5, 0x71a, 0x26ea, 0x2d38, 0x1b40, 0x1b79, 0x658, 0x15a5, 0x224f, 0x248, 0xeee, 0x2f37, 0x1c30, 0x15ec, 0x1ca7, 0x255f, 0x2801, 0x18f7, 0x1727, 0xf88, 0x2b1, 0x2c45, 0x164b, 0x289f, 0x14dd, 0x2649, 0x27a3, 0x9f0, 0x21ca, 0x1f5, 0x1dd6, 0xbc3, 0x71f, 0x133e, 0x13bb, 0x2afe, 0xc35, 0x4bb, 0x2d31, 0x10a7, 0x2a04, 0x180e, 0x2613, 0x330, 0xe76, 0x19fd, 0xfe9, 0x935, 0x79, 0x1b01, 0x73c, 0x2ac6, 0x21ce, 0x1911, 0x761, 0x1084, 0x1983, 0xc3, 0x15eb, 0xe0a, 0xdd, 0x1cb1, 0xb21, 0x2a51, 0x217f, 0xb1, 0x1328, 0x9ca, 0x1d96, 0x1a0b, 0xe1b, 0x1c4b, 0x3b, 0x4d6, 0x2344, 0x199e, 0x28af, 0x1624, 0x4ae, 0x8b2, 0x2991, 0x1fb7, 0x41, 0x2780, 0x1d8b, 0xa7f, 0x110, 0x2350, 0x18aa, 0x2b2f, 0x1805, 0x1ff, 0xf0, 0x2a74, 0xe42, 0xd97, 0x85b, 0x14bc, 0x2901, 0xfd8, 0x1ab3, 0x1cef, 0xfbd, 0x2b07, 0x174f, 0x69b, 0x10c3, 0x1491, 0xde3, 0x28ca, 0x252e, 0x1849, 0x1ec2, 0x1f1b, 0x2853, 0x12ab, 0x2674, 0x238c, 0x350, 0x2ca, 0xa7, 0x4bd, 0xcc3, 0x90c, 0x892, 0x276, 0x1e55, 0x196d, 0x1194, 0x1bef, 0x66a, 0x1da1, 0x260f, 0x1c15, 0x49f, 0x120b, 0x2671, 0x1237, 0x2e0d, 0x2791, 0x17d8, 0x1e0a, 0x2a99, 0x14cf, 0xfb1, 0x15b4, 0x1462, 0x2fbb, 0xeff, 0x16b, 0x2d6a, 0x9ef, 0x5e3, 0x11c0, 0x2e76, 0x1623, 0x2db8, 0x1c88, 0x740, 0x11e1, 0x12a3, 0x977, 0x1110, 0x2163, 0x2dee, 0x47b, 0x2aa5, 0x2a22, 0x1231, 0x16e7, 0x1626, 0x12e0, 0x1d28, 0xe96, 0xb62, 0x21d0, 0xf09, 0xb30, 0xcb8, 0x2981, 0x2648, 0x155d, 0x27ee, 0xb34, 0x169, 0x1574, 0x1fe6, 0x25f4, 0x151d, 0x1801, 0x1f13, 0x1308, 0x2929, 0x6eb, 0x25e, 0x2cca, 0x1e3e, 0x248f}; -const sign16 inv = 0xeab; -const sign16 invpr = 0x2c2a; - -#define DEGREE (1<> 31); - return (x + mask)^mask; -} - -/* Montgomery stuff */ - -static sign32 redc(unsign64 T) -{ - unsign32 m = (unsign32)T * (unsign32)RLWE_ND; - return ((unsign64)m * RLWE_PRIME + T) >> WL; -} - -static sign32 nres(unsign32 x) -{ - return redc((unsign64)x * RLWE_R2MODP); -} - -static sign32 modmul(unsign32 a, unsign32 b) -{ - return redc((unsign64)a * b); -} - -/* NTT code */ -/* Cooley-Tukey NTT */ - -static void ntt(sign32 *x) -{ - int m, i, j, k, t = DEGREE / 2; - sign32 S, U, V, W, q = RLWE_PRIME; - - /* Convert to Montgomery form */ - for (j = 0; j < DEGREE; j++) - x[j] = nres(x[j]); - - m = 1; - while (m < DEGREE) - { - k = 0; - for (i = 0; i < m; i++) - { - S = roots[m + i]; - for (j = k; j < k + t; j++) - { - U = x[j]; - V = modmul(x[j + t], S); - x[j] = U + V; - x[j + t] = U + 2 * q - V; - } - k += 2 * t; - } - t /= 2; - m *= 2; - } -} - -/* Gentleman-Sande INTT */ - -static void intt(sign32 *x) -{ - int m, i, j, k, t = 1; - sign32 S, U, V, W, q = RLWE_PRIME; - - m = DEGREE / 2; - while (m > 1) - { - k = 0; - for (i = 0; i < m; i++) - { - S = iroots[m + i]; - for (j = k; j < k + t; j++) - { - U = x[j]; - V = x[j + t]; - x[j] = U + V; - W = U + DEGREE * q - V; - x[j + t] = modmul(W, S); - } - k += 2 * t; - } - t *= 2; - m /= 2; - } - - /* Last iteration merged with n^-1 */ - - t = DEGREE / 2; - for (j = 0; j < t; j++) - { - U = x[j]; - V = x[j + t]; - W = U + DEGREE * q - V; - x[j + t] = modmul(W, (sign32)invpr); - x[j] = modmul(U + V, (sign32)inv); - } - /* convert back from Montgomery to "normal" form */ - for (j = 0; j < DEGREE; j++) - { - x[j] = redc(x[j]); - x[j] -= q; - x[j] += (x[j] >> (WL - 1))&q; - } -} - -/* See https://eprint.iacr.org/2016/1157.pdf */ - -static void NHSEncode(byte *key, sign32 *poly) -{ - int i, j, b, k, kj, q2; - - q2 = RLWE_PRIME / 2; - for (i = j = 0; i < 256;) - { - kj = key[j++]; - for (k = 0; k < 8; k++) - { - b = kj & 1; - poly[i] = b * q2; - poly[i + 256] = b * q2; - poly[i + 512] = b * q2; - poly[i + 768] = b * q2; - kj >>= 1; - i++; - } - } -} - -static void NHSDecode(sign32 *poly, byte *key) -{ - int i, j, k; - sign32 b, t, q2; - q2 = RLWE_PRIME / 2; - for (i = 0; i < 32; i++) - key[i] = 0; - - for (i = j = 0; i < 256;) - { - for (k = 0; k < 8; k++) - { - t = nabs(poly[i] - q2) + nabs(poly[i + 256] - q2) + nabs(poly[i + 512] - q2) + nabs(poly[i + 768] - q2); - - b = t - RLWE_PRIME; - b = (b >> 31) & 1; - key[j] = (key[j] >> 1) + (b << 7); - i++; - } - j++; - } -} - -/* convert 32-byte seed to random polynomial */ - -static void parse(byte *seed, sign32 *poly) -{ - int i, j; - sign32 n; - byte hash[4 * DEGREE]; - sha3 sh; - - SHA3_init(&sh, SHAKE128); - for (i = 0; i < 32; i++) - SHA3_process(&sh, seed[i]); - SHA3_shake(&sh, (char *)hash, 4 * DEGREE); - - for (i = j = 0; i < DEGREE; i++) - { - - n = hash[j] & 0x7f; n <<= 8; - n += hash[j + 1]; n <<= 8; - n += hash[j + 2]; n <<= 8; - n += hash[j + 3]; j += 4; - poly[i] = nres(n); - } -} - -/* Compress 14 bits polynomial coefficients into byte array */ -/* 7 bytes is 3x14 */ - -static void NHSpack(sign32 *poly, byte *array) -{ - int i, j; - sign32 a, b, c, d; - - for (i = j = 0; i < DEGREE; ) - { - a = poly[i++]; b = poly[i++]; c = poly[i++]; d = poly[i++]; - array[j++] = (byte)(a & 0xff); - array[j++] = (byte)(((a >> 8) | (b << 6)) & 0xff); - array[j++] = (byte)((b >> 2) & 0xff); - array[j++] = (byte)(((b >> 10) | (c << 4)) & 0xff); - array[j++] = (byte)((c >> 4) & 0xff); - array[j++] = (byte)(((c >> 12) | (d << 2)) & 0xff); - array[j++] = (byte)(d >> 6); - } -} - -static void NHSunpack(byte *array, sign32 *poly) -{ - int i, j; - sign32 a, b, c, d, e, f, g; - - for (i = j = 0; i < DEGREE; ) - { - a = ((sign32)array[j++]) & 0xff; b = ((sign32)array[j++]) & 0xff; c = ((sign32)array[j++]) & 0xff; d = ((sign32)array[j++]) & 0xff; e = ((sign32)array[j++]) & 0xff; f = ((sign32)array[j++]) & 0xff; g = ((sign32)array[j++]) & 0xff; - poly[i++] = a | ((b & 0x3f) << 8); - poly[i++] = (b >> 6) | (c << 2) | ((d & 0xf) << 10); - poly[i++] = (d >> 4) | (e << 4) | ((f & 3) << 12); - poly[i++] = (f >> 2) | (g << 6); - } -} - -/* See https://eprint.iacr.org/2016/1157.pdf */ - -static void NHSCompress(sign32 *poly, byte *array) -{ - int i, j, k, b; - unsign32 col = 0; - - for (i = j = 0; i < DEGREE;) - { - for (k = 0; k < 8; k++) - { - b = round((poly[i] * 8), RLWE_PRIME) & 7; - col = (col << 3) + b; - i++; - } - array[j] = col & 0xff; - array[j + 1] = (col >> 8) & 0xff; - array[j + 2] = (col >> 16) & 0xff; - j += 3; col = 0; - } -} - -static void NHSDecompress(byte *array, sign32 *poly) -{ - int i, j, k, b; - unsign32 col = 0; - - for (i = j = 0; i < DEGREE;) - { - col = array[j + 2]; - col = (col << 8) + array[j + 1]; - col = (col << 8) + array[j]; - j += 3; - for (k = 0; k < 8; k++) - { - b = (col & 0xe00000) >> 21; col <<= 3; - poly[i] = round((b * RLWE_PRIME), 8); - i++; - } - } -} - -/* generate centered binomial distribution */ - -static void NHSError(csprng *RNG, sign32 *poly) -{ - int i, j; - sign32 n1, n2, r; - for (i = 0; i < DEGREE; i++) - { - n1 = RAND_byte(RNG) + (RAND_byte(RNG) << 8); - n2 = RAND_byte(RNG) + (RAND_byte(RNG) << 8); - r = 0; - for (j = 0; j < 16; j++) - { - r += (n1 & 1) - (n2 & 1); - n1 >>= 1; n2 >>= 1; - } - poly[i] = (r + RLWE_PRIME); - } -} - -static void redc_it(sign32 *p) -{ - int i; - for (i = 0; i < DEGREE; i++) - p[i] = redc(p[i]); -} - -static void nres_it(sign32 *p) -{ - int i; - for (i = 0; i < DEGREE; i++) - p[i] = nres(p[i]); -} - -static void poly_mul(sign32 *p1, sign32 *p2, sign32 *p3) -{ - int i; - for (i = 0; i < DEGREE; i++) - p1[i] = modmul(p2[i], p3[i]); -} - -static void poly_add(sign32 *p1, sign32 *p2, sign32 *p3) -{ - int i; - for (i = 0; i < DEGREE; i++) - p1[i] = (p2[i] + p3[i]); -} - -static void poly_sub(sign32 *p1, sign32 *p2, sign32 *p3) -{ - int i; - for (i = 0; i < DEGREE; i++) - p1[i] = (p2[i] + RLWE_PRIME - p3[i]); -} - -/* reduces inputs < 2q */ -static void poly_soft_reduce(sign32 *poly) -{ - int i; - sign32 e; - for (i = 0; i < DEGREE; i++) - { - e = poly[i] - RLWE_PRIME; - poly[i] = e + ((e >> (WL - 1))&RLWE_PRIME); - } -} - -/* fully reduces modulo q */ -static void poly_hard_reduce(sign32 *poly) -{ - int i; - sign32 e; - for (i = 0; i < DEGREE; i++) - { - e = modmul(poly[i], RLWE_ONE); - e = e - RLWE_PRIME; - poly[i] = e + ((e >> (WL - 1))&RLWE_PRIME); - } -} - -/* API functions. See https://eprint.iacr.org/2016/1157.pdf Protocol 1 */ -// S is secret key key, SB is seed|public key to be sent to client -void core::NHS_SERVER_1(csprng *RNG, octet *SB, octet *S) -{ - int i; - byte seed[32], array[1792]; - sign32 s[DEGREE], e[DEGREE], b[DEGREE]; - - for (i = 0; i < 32; i++) - seed[i] = RAND_byte(RNG); - - parse(seed, b); - - NHSError(RNG, e); - NHSError(RNG, s); - - ntt(s); - ntt(e); - - poly_mul(b, b, s); - poly_add(b, b, e); - poly_hard_reduce(b); - - redc_it(b); - NHSpack(b, array); - - OCT_empty(SB); - OCT_jbytes(SB, (char *)seed, 32); - OCT_jbytes(SB, (char *)array, 1792); - - poly_hard_reduce(s); - - NHSpack(s, array); - OCT_empty(S); - OCT_jbytes(S, (char *)array, 1792); - -} - -// optimized to reduce memory -// UC is U|cbar to be returned to server -// KEY is shared key -void core::NHS_CLIENT(csprng *RNG, octet *SB, octet *UC, octet *KEY) -{ - int i; - sha3 sh; - byte seed[32], array[1792], key[32], cc[384]; - sign32 sd[DEGREE], ed[DEGREE], u[DEGREE]; - NHSError(RNG, sd); - NHSError(RNG, ed); - - ntt(sd); - ntt(ed); - - for (i = 0; i < 32; i++) - seed[i] = SB->val[i]; - - parse(seed, u); - - poly_mul(u, u, sd); - poly_add(u, u, ed); - poly_hard_reduce(u); - - redc_it(u); - NHSpack(u, array); - OCT_empty(UC); - OCT_jbytes(UC, (char *)array, 1792); - - for (i = 0; i < 32; i++) - key[i] = RAND_byte(RNG); - - SHA3_init(&sh, SHA3_HASH256); - for (i = 0; i < 32; i++) - SHA3_process(&sh, key[i]); - SHA3_hash(&sh, (char *)key); - - for (i = 0; i < 1792; i++) - array[i] = SB->val[i + 32]; - - NHSunpack(array, u); - nres_it(u); - - poly_mul(u, u, sd); - intt(u); - NHSError(RNG, ed); - poly_add(u, u, ed); - - NHSEncode(key, sd); - poly_add(u, u, sd); - - NHSCompress(u, cc); - - SHA3_init(&sh, SHA3_HASH256); - for (i = 0; i < 32; i++) - SHA3_process(&sh, key[i]); - SHA3_hash(&sh, (char *)key); - - OCT_empty(KEY); - OCT_jbytes(KEY, (char *)key, 32); - - OCT_jbytes(UC, (char *)cc, 384); -} - -// calculate shared key from UC and secret key S -void core::NHS_SERVER_2(octet *S, octet *UC, octet *KEY) -{ - int i; - sha3 sh; - sign32 c[DEGREE], s[DEGREE], k[DEGREE]; - byte array[1792], key[32], cc[384]; - - for (i = 0; i < 1792; i++) - array[i] = UC->val[i]; - - NHSunpack(array, k); - nres_it(k); - - for (i = 0; i < 384; i++) - cc[i] = UC->val[i + 1792]; - - NHSDecompress(cc, c); - - for (i = 0; i < 1792; i++) - array[i] = S->val[i]; - - NHSunpack(array, s); - - poly_mul(k, k, s); - intt(k); - poly_sub(k, c, k); - poly_soft_reduce(k); - - NHSDecode(k, key); - - SHA3_init(&sh, SHA3_HASH256); - for (i = 0; i < 32; i++) - SHA3_process(&sh, key[i]); - SHA3_hash(&sh, (char *)key); - - OCT_empty(KEY); - OCT_jbytes(KEY, (char *)key, 32); -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/oct.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/oct.cpp deleted file mode 100644 index 9146202..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/oct.cpp +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/*** Basic Octet string maintainance routines ***/ -/* SU=m, m is Stack Usage */ - -#include -#include "core.h" - -#ifdef CORE_ARDUINO -#include -#endif - -using namespace core; - -/* Output an octet string (Debug Only) */ - -/* SU= 16 */ -/* output octet */ -void core::OCT_output(octet *w) -{ - int i; - unsigned char ch; - for (i = 0; i < w->len; i++) - { - ch = w->val[i]; -#ifdef CORE_ARDUINO - char my_data[3]; - sprintf(my_data, "%02x", ch); - Serial.print(my_data); -#else - printf("%02x", ch); -#endif - } -#ifdef CORE_ARDUINO - Serial.println(""); -#else - printf("\n"); -#endif -} - -/* reverse bytes. Useful if dealing with those little-endian bastards */ -void core::OCT_reverse(octet *w) -{ - int i; - unsigned char ch; - for (i = 0; i < w->len/2; i++) { - ch = w->val[i]; - w->val[i] = w->val[w->len - i - 1]; - w->val[w->len - i - 1] = ch; - } -} - -//#define PUT_IN_SPACES - -/* SU= 16 */ -void core::OCT_output_string(octet *w) -{ - int i; - unsigned char ch; - for (i = 0; i < w->len; i++) - { - - ch = w->val[i]; -#ifdef CORE_ARDUINO - char my_data[3]; -#ifdef PUT_IN_SPACES - sprintf(my_data, "%c ", ch); -#else - sprintf(my_data, "%c", ch); -#endif - Serial.print(my_data); -#else -#ifdef PUT_IN_SPACES - printf("%c ", ch); -#else - printf("%c", ch); -#endif -#endif - } -} - -/* Convert C string to octet format - truncates if no room */ -void core::OCT_jstring(octet *y, char *s) -{ - int i, j; - i = y->len; - j = 0; - while (s[j] != 0 && i < y->max) - { - y->val[i] = s[j]; - y->len++; - i++; - j++; - } -} - -/* compare 2 octet strings. - * If x==y return TRUE, else return FALSE */ -/* SU= 8 */ -int core::OCT_comp(octet *x, octet *y) -{ - int i; - if (x->len > y->len) return 0; - if (x->len < y->len) return 0; - for (i = 0; i < x->len; i++) - { - if (x->val[i] != y->val[i]) return 0; - } - return 1; -} - -/* check are first n bytes the same (in constant time) */ - -int core::OCT_ncomp(octet *x, octet *y, int n) -{ - int i, res = 0; - if (n > y->len || n > x->len) return 0; - for (i = 0; i < n; i++) - { - res |= (int)(x->val[i] ^ y->val[i]); - } - if (res == 0) return 1; - return 0; -} - -/* Shift octet to the left by n bytes. Leftmost bytes disappear */ -void core::OCT_shl(octet *x, int n) -{ - int i; - if (n >= x->len) - { - x->len = 0; - return; - } - x->len -= n; - for (i = 0; i < x->len; i++) - x->val[i] = x->val[i + n]; -} - -/* Append binary string to octet - truncates if no room */ -/* SU= 12 */ -void core::OCT_jbytes(octet *y, char *b, int len) -{ - int i, j; - i = y->len; - for (j = 0; j < len && i < y->max; j++) - { - y->val[i] = b[j]; - y->len++; - i++; - } -} - -/* Concatenates two octet strings */ -/* SU= 8 */ -void core::OCT_joctet(octet *y, octet *x) -{ - /* y=y || x */ - int i, j; - if (x == NULL) return; - - for (i = 0; i < x->len; i++) - { - j = y->len + i; - if (j >= y->max) - { - y->len = y->max; - return; - } - y->val[j] = x->val[i]; - } - y->len += x->len; -} - -/* Append byte to octet rep times */ -/* SU= 8 */ -void core::OCT_jbyte(octet *y, int ch, int rep) -{ - int i, j; - i = y->len; - for (j = 0; j < rep && i < y->max; j++) - { - y->val[i] = ch; - y->len++; - i++; - } -} - -/* XOR common bytes of x with y */ -/* SU= 8 */ -void core::OCT_xor(octet *y, octet *x) -{ - /* xor first x->len bytes of y */ - - int i; - for (i = 0; i < x->len && i < y->len; i++) - { - y->val[i] ^= x->val[i]; - } -} - -/* clear an octet */ -void core::OCT_empty(octet *w) -{ - w->len = 0; -} - -/* Kill an octet string - Zeroise it for security */ -void core::OCT_clear(octet *w) -{ - int i; - for (i = 0; i < w->max; i++) w->val[i] = 0; - w->len = 0; -} - -/* appends int x of length len bytes to OCTET string */ -/* SU= 8 */ -void core::OCT_jint(octet *y, unsigned int x, int len) -{ - int i, n; - n = y->len + len; - if (n > y->max || len <= 0) return; - for (i = y->len; i < n; i++) y->val[i] = 0; - y->len = n; - - i = y->len; - while (x > 0 && i > 0) - { - i--; - y->val[i] = x % 256; - x /= 256; - } -} - -/* Pad an octet to a given length */ -/* SU= 8 */ -int core::OCT_pad(octet *w, int n) -{ - int i, d; - if (w->len > n || n > w->max) return 0; - if (n == w->len) return 1; - d = n - w->len; - for (i = n - 1; i >= d; i--) - w->val[i] = w->val[i - d]; - for (i = d - 1; i >= 0; i--) - w->val[i] = 0; - w->len = n; - return 1; -} - - -/* Convert an octet string to base64 string */ -/* SU= 56 */ -void core::OCT_tobase64(char *b, octet *w) -{ - int i, j, k, rem, last; - int c, ch[4]; - unsigned char ptr[3]; - rem = w->len % 3; - j = k = 0; - last = 4; - while (j < w->len) - { - for (i = 0; i < 3; i++) - { - if (j < w->len) ptr[i] = w->val[j++]; - else - { - ptr[i] = 0; - last--; - } - } - ch[0] = (ptr[0] >> 2) & 0x3f; - ch[1] = ((ptr[0] << 4) | (ptr[1] >> 4)) & 0x3f; - ch[2] = ((ptr[1] << 2) | (ptr[2] >> 6)) & 0x3f; - ch[3] = ptr[2] & 0x3f; - for (i = 0; i < last; i++) - { - c = ch[i]; - if (c < 26) c += 65; - if (c >= 26 && c < 52) c += 71; - if (c >= 52 && c < 62) c -= 4; - if (c == 62) c = '+'; - if (c == 63) c = '/'; - b[k++] = c; - } - } - if (rem > 0) for (i = rem; i < 3; i++) b[k++] = '='; - b[k] = '\0'; /* dangerous! */ -} - -/* SU= 56 */ -void core::OCT_frombase64(octet *w, char *b) -{ - int i, j, k, pads, len = (int)strlen(b); - int c, ch[4], ptr[3]; - j = k = 0; - while (j < len && k < w->max) - { - pads = 0; i=0; - while (i<4) - { - c = 80 + b[j++]; - if (c <= 112) continue; /* ignore white space */ - if (c > 144 && c < 171) c -= 145; - if (c > 176 && c < 203) c -= 151; - if (c > 127 && c < 138) c -= 76; - if (c == 123) c = 62; - if (c == 127) c = 63; - if (c == 141) - { - pads++; /* ignore pads '=' */ - i++; - continue; - } - ch[i++] = c; - } - ptr[0] = (ch[0] << 2) | (ch[1] >> 4); - ptr[1] = (ch[1] << 4) | (ch[2] >> 2); - ptr[2] = (ch[2] << 6) | ch[3]; - for (i = 0; i < 3 - pads && k < w->max; i++) - { - /* don't put in leading zeros */ - w->val[k++] = ptr[i]; - } - - } - w->len = k; -} - -/* copy an octet string - truncates if no room */ -/* SU= 16 */ -void core::OCT_copy(octet *y, octet *x) -{ - int i; - OCT_clear(y); - y->len = x->len; - if (y->len > y->max) y->len = y->max; - - for (i = 0; i < y->len; i++) - y->val[i] = x->val[i]; -} - -/* XOR m with all of x */ -void core::OCT_xorbyte(octet *x, int m) -{ - int i; - for (i = 0; i < x->len; i++) x->val[i] ^= m; -} - -/* truncates x to n bytes and places the rest in y (if y is not NULL) */ -/* SU= 8 */ -void core::OCT_chop(octet *x, octet *y, int n) -{ - int i; - if (n >= x->len) - { - if (y != NULL) y->len = 0; - return; - } - if (y != NULL) y->len = x->len - n; - x->len = n; - - if (y != NULL) - { - for (i = 0; i < y->len && i < y->max; i++) y->val[i] = x->val[i + n]; - } -} - -/* set x to len random bytes */ -void core::OCT_rand(octet *x, csprng *RNG, int len) -{ - int i; - if (len > x->max) len = x->max; - x->len = len; - - for (i = 0; i < len; i++) x->val[i] = RAND_byte(RNG); -} - -/* Convert an octet to a hex string */ -void core::OCT_toHex(octet *src, char *dst) -{ - int i,len=src->len; - unsigned char ch; - for (i = 0; i < len; i++) - { - ch = src->val[i]; - sprintf(&dst[i * 2], "%02x", ch); - } - dst[2*len]='\0'; -} - -static int char2int(char input) -{ - if (input >= '0' && input <= '9') - return input - '0'; - if (input >= 'A' && input <= 'F') - return input - 'A' + 10; - if (input >= 'a' && input <= 'f') - return input - 'a' + 10; - return 0; -} - -/* Convert from a hex string */ -void core::OCT_fromHex(octet *dst, char *src) -{ - int i = 0; - int j = 0; - OCT_clear(dst); - while (src[j] != 0) - { - dst->val[i++] = char2int(src[j]) * 16 + char2int(src[j + 1]); - j += 2; - } - dst->len = i; -} - - -/* Convert an octet to a string */ -void core::OCT_toStr(octet *src, char *dst) -{ - int i; - unsigned char ch; - for (i = 0; i < src->len; i++) - { - ch = src->val[i]; - sprintf(&dst[i], "%c", ch); - } -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair.cpp deleted file mode 100644 index 0d202bd..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair.cpp +++ /dev/null @@ -1,1233 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE BN Curve pairing functions */ - -//#define HAS_MAIN - -#include "pair_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -namespace ZZZ { -static void PAIR_line(FP12 *, ECP2 *, ECP2 *, FP *, FP *); -static void PAIR_double(ECP2 *, FP2 *, FP2 *, FP2 *); -static void PAIR_add(ECP2 *, ECP2 *B, FP2 *, FP2 *, FP2 *); -static void PAIR_pack(FP4 *, FP2 *, FP2 *, FP2 *); -static void PAIR_unpack(FP12 *, FP4 *, FP *, FP *); -static void glv(BIG u[2], BIG); -static void gs(BIG u[4], BIG); -} - -// Point doubling for pairings -static void ZZZ::PAIR_double(ECP2 *A, FP2 *AA, FP2 *BB, FP2 *CC) -{ - FP2 YY; - FP2_copy(CC, &(A->x)); //FP2 XX=new FP2(A.getx()); //X - FP2_copy(&YY, &(A->y)); //FP2 YY=new FP2(A.gety()); //Y - FP2_copy(BB, &(A->z)); //FP2 ZZ=new FP2(A.getz()); //Z - - FP2_copy(AA, &YY); //FP2 YZ=new FP2(YY); //Y - FP2_mul(AA, AA, BB); //YZ.mul(ZZ); //YZ - FP2_sqr(CC, CC); //XX.sqr(); //X^2 - FP2_sqr(&YY, &YY); //YY.sqr(); //Y^2 - FP2_sqr(BB, BB); //ZZ.sqr(); //Z^2 - - FP2_add(AA, AA, AA); - FP2_neg(AA, AA); - FP2_norm(AA); // -2YZ - FP2_mul_ip(AA); - FP2_norm(AA); // -2YZi - - FP2_imul(BB, BB, 3 * CURVE_B_I); //3Bz^2 - FP2_imul(CC, CC, 3); //3X^2 - -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP2_mul_ip(&YY); // Y^2.i - FP2_norm(&YY); - FP2_mul_ip(CC); // 3X^2.i - FP2_norm(CC); -#endif - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_mul_ip(BB); // 3Bz^2.i - FP2_norm(BB); -#endif - - FP2_sub(BB, BB, &YY); - FP2_norm(BB); - - ECP2_dbl(A); //A.dbl(); -} - -// Point addition for pairings -static void ZZZ::PAIR_add(ECP2 *A, ECP2 *B, FP2 *AA, FP2 *BB, FP2 *CC) -{ - FP2 T1; - FP2_copy(AA, &(A->x)); //FP2 X1=new FP2(A.getx()); // X1 - FP2_copy(CC, &(A->y)); //FP2 Y1=new FP2(A.gety()); // Y1 - FP2_copy(&T1, &(A->z)); //FP2 T1=new FP2(A.getz()); // Z1 - - FP2_copy(BB, &T1); //FP2 T2=new FP2(A.getz()); // Z1 - - FP2_mul(&T1, &T1, &(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2 - FP2_mul(BB, BB, &(B->x)); //T2.mul(B.getx()); // T2=Z1.X2 - - FP2_sub(AA, AA, BB); //X1.sub(T2); - FP2_norm(AA); //X1.norm(); // X1=X1-Z1.X2 - FP2_sub(CC, CC, &T1); //Y1.sub(T1); - FP2_norm(CC); //Y1.norm(); // Y1=Y1-Z1.Y2 - - FP2_copy(&T1, AA); //T1.copy(X1); // T1=X1-Z1.X2 - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_mul_ip(AA); - FP2_norm(AA); -#endif - - FP2_mul(&T1, &T1, &(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2 - - FP2_copy(BB, CC); //T2.copy(Y1); // T2=Y1-Z1.Y2 - FP2_mul(BB, BB, &(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2 - FP2_sub(BB, BB, &T1); //T2.sub(T1); - FP2_norm(BB); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 - - FP2_neg(CC, CC); //Y1.neg(); - FP2_norm(CC); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs - *** - - ECP2_add(A, B); //A.add(B); -} - -/* Line function */ -static void ZZZ::PAIR_line(FP12 *v, ECP2 *A, ECP2 *B, FP *Qx, FP *Qy) -{ - FP2 AA, BB, CC; - FP4 a, b, c; - - if (A == B) - PAIR_double(A, &AA, &BB, &CC); - else - PAIR_add(A, B, &AA, &BB, &CC); - - FP2_pmul(&CC, &CC, Qx); - FP2_pmul(&AA, &AA, Qy); - - FP4_from_FP2s(&a, &AA, &BB); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_from_FP2(&b, &CC); - FP4_zero(&c); -#endif -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_zero(&b); - FP4_from_FP2H(&c, &CC); -#endif - - FP12_from_FP4s(v, &a, &b, &c); - v->type = FP_SPARSER; -} - -/* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */ -int ZZZ::PAIR_nbits(BIG n3, BIG n) -{ - BIG x; - BIG_rcopy(x, CURVE_Bnx); - -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - BIG_pmul(n, x, 6); -#if SIGN_OF_X_ZZZ==POSITIVEX - BIG_inc(n, 2); -#else - BIG_dec(n, 2); -#endif - -#else - BIG_copy(n, x); -#endif - - BIG_norm(n); - BIG_pmul(n3, n, 3); - BIG_norm(n3); - - return BIG_nbits(n3); -} - -/* - For multi-pairing, product of n pairings - 1. Declare FP12 array of length number of bits in Ate parameter - 2. Initialise this array by calling PAIR_initmp() - 3. Accumulate each pairing by calling PAIR_another() n times - 4. Call PAIR_miller() - 5. Call final exponentiation PAIR_fexp() -*/ - -/* prepare for multi-pairing */ -void ZZZ::PAIR_initmp(FP12 r[]) -{ - int i; - for (i = ATE_BITS_ZZZ - 1; i >= 0; i--) - FP12_one(&r[i]); - return; -} - -/* basic Miller loop */ -void ZZZ::PAIR_miller(FP12 *res, FP12 r[]) -{ - int i; - FP12_one(res); - for (i = ATE_BITS_ZZZ - 1; i >= 1; i--) - { - FP12_sqr(res, res); - FP12_ssmul(res, &r[i]); - FP12_zero(&r[i]); - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(res, res); -#endif - FP12_ssmul(res, &r[0]); - FP12_zero(&r[0]); - return; -} - -// Store precomputed line details in an FP4 -static void ZZZ::PAIR_pack(FP4 *T, FP2* AA, FP2* BB, FP2 *CC) -{ - FP2 I, A, B; - FP2_inv(&I, CC, NULL); - FP2_mul(&A, AA, &I); - FP2_mul(&B, BB, &I); - FP4_from_FP2s(T, &A, &B); -} - -// Unpack G2 line function details and include G1 -static void ZZZ::PAIR_unpack(FP12 *v, FP4* T, FP *Qx, FP *Qy) -{ - FP4 a, b, c; - FP2 t; - FP4_copy(&a, T); - FP2_pmul(&a.a, &a.a, Qy); - FP2_from_FP(&t, Qx); - -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_from_FP2(&b, &t); - FP4_zero(&c); -#endif -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_zero(&b); - FP4_from_FP2H(&c, &t); -#endif - - FP12_from_FP4s(v, &a, &b, &c); - v->type = FP_SPARSEST; -} - -// Precompute table of line functions for fixed G2 value -void ZZZ::PAIR_precomp(FP4 T[], ECP2* GV) -{ - int i, j, nb, bt; - BIG n, n3; - FP2 AA, BB, CC; - ECP2 A, G, NG; -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - ECP2 K; - FP2 X; - FP Qx, Qy; - FP_rcopy(&Qx, Fra); - FP_rcopy(&Qy, Frb); - FP2_from_FPs(&X, &Qx, &Qy); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X, NULL); - FP2_norm(&X); -#endif -#endif - - ECP2_copy(&A, GV); - ECP2_copy(&G, GV); - ECP2_copy(&NG, GV); - ECP2_neg(&NG); - - nb = PAIR_nbits(n3, n); - j = 0; - - for (i = nb - 2; i >= 1; i--) - { - PAIR_double(&A, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_add(&A, &G, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - } - if (bt == -1) - { - PAIR_add(&A, &NG, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - } - } -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&A); -#endif - - ECP2_copy(&K, &G); - ECP2_frob(&K, &X); - PAIR_add(&A, &K, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - ECP2_frob(&K, &X); - ECP2_neg(&K); - PAIR_add(&A, &K, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - -#endif - -} - -/* Accumulate another set of line functions for n-pairing, assuming precomputation on G2 */ -void ZZZ::PAIR_another_pc(FP12 r[], FP4 T[], ECP *QV) -{ - int i, j, nb, bt; - BIG n, n3; - FP12 lv, lv2; - ECP Q; - FP Qx, Qy; - - if (ECP_isinf(QV)) return; - - nb = PAIR_nbits(n3, n); - - ECP_copy(&Q, QV); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - j = 0; - for (i = nb - 2; i >= 1; i--) - { - PAIR_unpack(&lv, &T[j++], &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP12_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP12_smul(&lv, &lv2); - } - FP12_ssmul(&r[i], &lv); - } - -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - PAIR_unpack(&lv, &T[j++], &Qx, &Qy); - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP12_smul(&lv, &lv2); - FP12_ssmul(&r[0], &lv); -#endif -} - -/* Accumulate another set of line functions for n-pairing */ -void ZZZ::PAIR_another(FP12 r[], ECP2* PV, ECP* QV) -{ - int i, nb, bt; - BIG n, n3; - FP12 lv, lv2; - ECP2 A, NP, P; - ECP Q; - FP Qx, Qy; -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - ECP2 K; - FP2 X; - FP_rcopy(&Qx, Fra); - FP_rcopy(&Qy, Frb); - FP2_from_FPs(&X, &Qx, &Qy); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X, NULL); - FP2_norm(&X); -#endif -#endif - - if (ECP_isinf(QV)) return; - - nb = PAIR_nbits(n3, n); - - ECP2_copy(&P, PV); - ECP_copy(&Q, QV); - - ECP2_affine(&P); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - ECP2_copy(&A, &P); - ECP2_copy(&NP, &P); ECP2_neg(&NP); - - for (i = nb - 2; i >= 1; i--) - { - PAIR_line(&lv, &A, &A, &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv2, &A, &P, &Qx, &Qy); - FP12_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_line(&lv2, &A, &NP, &Qx, &Qy); - FP12_smul(&lv, &lv2); - } - FP12_ssmul(&r[i], &lv); - } - -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&A); -#endif - - ECP2_copy(&K, &P); - ECP2_frob(&K, &X); - PAIR_line(&lv, &A, &K, &Qx, &Qy); - ECP2_frob(&K, &X); - ECP2_neg(&K); - PAIR_line(&lv2, &A, &K, &Qx, &Qy); - FP12_smul(&lv, &lv2); - FP12_ssmul(&r[0], &lv); - -#endif -} - -/* Optimal single R-ate pairing r=e(P,Q) */ -void ZZZ::PAIR_ate(FP12 *r, ECP2 *P1, ECP *Q1) -{ - BIG n, n3; - FP Qx, Qy; - int i, nb, bt; - ECP2 A, NP, P; - ECP Q; - FP12 lv, lv2; -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - ECP2 KA; - FP2 X; - - FP_rcopy(&Qx, Fra); - FP_rcopy(&Qy, Frb); - FP2_from_FPs(&X, &Qx, &Qy); - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X, NULL); - FP2_norm(&X); -#endif - -#endif - - FP12_one(r); - if (ECP_isinf(Q1)) return; - - nb = PAIR_nbits(n3, n); - - ECP2_copy(&P, P1); - ECP_copy(&Q, Q1); - - ECP2_affine(&P); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - ECP2_copy(&A, &P); - ECP2_copy(&NP, &P); ECP2_neg(&NP); - - /* Main Miller Loop */ - for (i = nb - 2; i >= 1; i--) - { - FP12_sqr(r, r); - PAIR_line(&lv, &A, &A, &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv2, &A, &P, &Qx, &Qy); - FP12_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_line(&lv2, &A, &NP, &Qx, &Qy); - FP12_smul(&lv, &lv2); - } - FP12_ssmul(r, &lv); - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(r, r); -#endif - - /* R-ate fixup required for BN curves */ -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&A); -#endif - - ECP2_copy(&KA, &P); - ECP2_frob(&KA, &X); - PAIR_line(&lv, &A, &KA, &Qx, &Qy); - ECP2_frob(&KA, &X); - ECP2_neg(&KA); - PAIR_line(&lv2, &A, &KA, &Qx, &Qy); - FP12_smul(&lv, &lv2); - FP12_ssmul(r, &lv); -#endif -} - -/* Optimal R-ate double pairing e(P,Q).e(R,S) */ -void ZZZ::PAIR_double_ate(FP12 *r, ECP2 *P1, ECP *Q1, ECP2 *R1, ECP *S1) -{ - - BIG n, n3; - FP Qx, Qy, Sx, Sy; - int i, nb, bt; - ECP2 A, B, NP, NR, P, R; - ECP Q, S; - FP12 lv, lv2; -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - ECP2 K; - FP2 X; - - FP_rcopy(&Qx, Fra); - FP_rcopy(&Qy, Frb); - FP2_from_FPs(&X, &Qx, &Qy); - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X, NULL); - FP2_norm(&X); -#endif - -#endif - - if (ECP_isinf(Q1)) - { - PAIR_ate(r, R1, S1); - return; - } - if (ECP_isinf(S1)) - { - PAIR_ate(r, P1, Q1); - return; - } - - nb = PAIR_nbits(n3, n); - - ECP2_copy(&P, P1); - ECP_copy(&Q, Q1); - - ECP2_affine(&P); - ECP_affine(&Q); - - ECP2_copy(&R, R1); - ECP_copy(&S, S1); - - ECP2_affine(&R); - ECP_affine(&S); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - FP_copy(&Sx, &(S.x)); - FP_copy(&Sy, &(S.y)); - - ECP2_copy(&A, &P); - ECP2_copy(&B, &R); - - ECP2_copy(&NP, &P); ECP2_neg(&NP); - ECP2_copy(&NR, &R); ECP2_neg(&NR); - - FP12_one(r); - - /* Main Miller Loop */ - for (i = nb - 2; i >= 1; i--) - { - FP12_sqr(r, r); - PAIR_line(&lv, &A, &A, &Qx, &Qy); - PAIR_line(&lv2, &B, &B, &Sx, &Sy); - FP12_smul(&lv, &lv2); - FP12_ssmul(r, &lv); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv, &A, &P, &Qx, &Qy); - PAIR_line(&lv2, &B, &R, &Sx, &Sy); - FP12_smul(&lv, &lv2); - FP12_ssmul(r, &lv); - } - if (bt == -1) - { - PAIR_line(&lv, &A, &NP, &Qx, &Qy); - PAIR_line(&lv2, &B, &NR, &Sx, &Sy); - FP12_smul(&lv, &lv2); - FP12_ssmul(r, &lv); - } - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(r, r); -#endif - /* R-ate fixup required for BN curves */ -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&A); - ECP2_neg(&B); -#endif - - ECP2_copy(&K, &P); - ECP2_frob(&K, &X); - PAIR_line(&lv, &A, &K, &Qx, &Qy); - ECP2_frob(&K, &X); - ECP2_neg(&K); - PAIR_line(&lv2, &A, &K, &Qx, &Qy); - FP12_smul(&lv, &lv2); - FP12_ssmul(r, &lv); - - ECP2_copy(&K, &R); - ECP2_frob(&K, &X); - PAIR_line(&lv, &B, &K, &Sx, &Sy); - ECP2_frob(&K, &X); - ECP2_neg(&K); - PAIR_line(&lv2, &B, &K, &Sx, &Sy); - FP12_smul(&lv, &lv2); - FP12_ssmul(r, &lv); -#endif -} - -/* final exponentiation - keep separate for multi-pairings and to avoid thrashing stack */ -void ZZZ::PAIR_fexp(FP12 *r) -{ - FP2 X; - BIG x; - FP a, b; - FP12 t0, y0, y1; -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - FP12 y2, y3; -#endif - BIG_rcopy(x, CURVE_Bnx); - FP_rcopy(&a, Fra); - FP_rcopy(&b, Frb); - FP2_from_FPs(&X, &a, &b); - - /* Easy part of final exp */ - - FP12_inv(&t0, r); - FP12_conj(r, r); - - FP12_mul(r, &t0); - FP12_copy(&t0, r); - - FP12_frob(r, &X); - FP12_frob(r, &X); - FP12_mul(r, &t0); - - /* Hard part of final exp - see Duquesne & Ghamman eprint 2015/192.pdf */ -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - FP12_pow(&t0, r, x); // t0=f^-u -#if SIGN_OF_X_ZZZ==POSITIVEX - FP12_conj(&t0, &t0); -#endif - FP12_usqr(&y3, &t0); // y3=t0^2 - FP12_copy(&y0, &t0); - FP12_mul(&y0, &y3); // y0=t0*y3 - FP12_copy(&y2, &y3); - FP12_frob(&y2, &X); // y2=y3^p - FP12_mul(&y2, &y3); //y2=y2*y3 - FP12_usqr(&y2, &y2); //y2=y2^2 - FP12_mul(&y2, &y3); // y2=y2*y3 - - FP12_pow(&t0, &y0, x); //t0=y0^-u -#if SIGN_OF_X_ZZZ==POSITIVEX - FP12_conj(&t0, &t0); -#endif - FP12_conj(&y0, r); //y0=~r - FP12_copy(&y1, &t0); - FP12_frob(&y1, &X); - FP12_frob(&y1, &X); //y1=t0^p^2 - FP12_mul(&y1, &y0); // y1=y0*y1 - FP12_conj(&t0, &t0); // t0=~t0 - FP12_copy(&y3, &t0); - FP12_frob(&y3, &X); //y3=t0^p - FP12_mul(&y3, &t0); // y3=t0*y3 - FP12_usqr(&t0, &t0); // t0=t0^2 - FP12_mul(&y1, &t0); // y1=t0*y1 - - FP12_pow(&t0, &y3, x); // t0=y3^-u -#if SIGN_OF_X_ZZZ==POSITIVEX - FP12_conj(&t0, &t0); -#endif - FP12_usqr(&t0, &t0); //t0=t0^2 - FP12_conj(&t0, &t0); //t0=~t0 - FP12_mul(&y3, &t0); // y3=t0*y3 - - FP12_frob(r, &X); - FP12_copy(&y0, r); - FP12_frob(r, &X); - FP12_mul(&y0, r); - FP12_frob(r, &X); - FP12_mul(&y0, r); - - FP12_usqr(r, &y3); //r=y3^2 - FP12_mul(r, &y2); //r=y2*r - FP12_copy(&y3, r); - FP12_mul(&y3, &y0); // y3=r*y0 - FP12_mul(r, &y1); // r=r*y1 - FP12_usqr(r, r); // r=r^2 - FP12_mul(r, &y3); // r=r*y3 - FP12_reduce(r); -#else - -// See https://eprint.iacr.org/2020/875.pdf - FP12_usqr(&y1,r); - FP12_mul(&y1,r); // y1=r^3 - - FP12_pow(&y0,r,x); // y0=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(&y0, &y0); -#endif - FP12_conj(&t0,r); // t0=r^-1 - FP12_copy(r,&y0); - FP12_mul(r,&t0); // r=r^(x-1) - - FP12_pow(&y0,r,x); // y0=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(&y0, &y0); -#endif - FP12_conj(&t0,r); // t0=r^-1 - FP12_copy(r,&y0); - FP12_mul(r,&t0); // r=r^(x-1) - -// ^(x+p) - FP12_pow(&y0,r,x); // y0=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(&y0, &y0); -#endif - FP12_copy(&t0,r); - FP12_frob(&t0,&X); // t0=r^p - FP12_copy(r,&y0); - FP12_mul(r,&t0); // r=r^x.r^p - -// ^(x^2+p^2-1) - FP12_pow(&y0,r,x); - FP12_pow(&y0,&y0,x); // y0=r^x^2 - FP12_copy(&t0,r); - FP12_frob(&t0,&X); - FP12_frob(&t0,&X); // t0=r^p^2 - FP12_mul(&y0,&t0); // y0=r^x^2.r^p^2 - FP12_conj(&t0,r); // t0=r^-1 - FP12_copy(r,&y0); // - FP12_mul(r,&t0); // r=r^x^2.r^p^2.r^-1 - - FP12_mul(r,&y1); - FP12_reduce(r); -#endif -} - -#ifdef USE_GLV_ZZZ -/* GLV method */ -static void ZZZ::glv(BIG u[2], BIG ee) -{ - BIG q; - BIG_rcopy(q, CURVE_Order); -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - int i, j; - BIG v[2], t; - DBIG d; - - for (i = 0; i < 2; i++) - { - BIG_rcopy(t, CURVE_W[i]); - BIG_mul(d, t, ee); - BIG_ctddiv(v[i],d,q,BIG_nbits(t)); - BIG_zero(u[i]); - } - BIG_copy(u[0], ee); - for (i = 0; i < 2; i++) - for (j = 0; j < 2; j++) - { - BIG_rcopy(t, CURVE_SB[j][i]); - BIG_modmul(t, v[j], t, q); - BIG_add(u[i], u[i], q); - BIG_sub(u[i], u[i], t); - BIG_ctmod(u[i],q,1); - } - - //BIG x, x2; - //BIG_rcopy(x, CURVE_Bnx); - //BIG_smul(x2, x, x); - //BIG_imul(x2,x2,6); - //printf("bits(6x^2) = %d \n",BIG_nbits(x2)); - -#else -// -(x^2).P = (Beta.x,y) - int bd; - BIG x, x2; - BIG_rcopy(x, CURVE_Bnx); - - BIG_smul(x2, x, x); - bd=BIG_nbits(q)-BIG_nbits(x2); // fixed - BIG_copy(u[0], ee); - BIG_ctmod(u[0], x2, bd); - BIG_copy(u[1], ee); - BIG_ctsdiv(u[1], x2, bd); - - BIG_sub(u[1], q, u[1]); - -#endif - - return; -} -#endif // USE_GLV - -/* Galbraith & Scott Method */ -static void ZZZ::gs(BIG u[4], BIG ee) -{ - int i; - BIG q; - BIG_rcopy(q, CURVE_Order); - -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE - int j; - BIG v[4], t; - DBIG d; - - for (i = 0; i < 4; i++) - { - BIG_rcopy(t, CURVE_WB[i]); - BIG_mul(d, t, ee); - BIG_ctddiv(v[i],d,q,BIG_nbits(t)); - BIG_zero(u[i]); - } - - BIG_copy(u[0], ee); - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - { - BIG_rcopy(t, CURVE_BB[j][i]); - BIG_modmul(t, v[j], t, q); - BIG_add(u[i], u[i], q); - BIG_sub(u[i], u[i], t); - BIG_ctmod(u[i],q,1); - } - - //BIG x; - //BIG_rcopy(x, CURVE_Bnx); - //BIG_imul(x,x,3); - //printf("bits(3x) = %d \n",BIG_nbits(x)); - -#else - int bd; - BIG x, w; - - BIG_rcopy(x, CURVE_Bnx); - BIG_copy(w, ee); - bd=BIG_nbits(q)-BIG_nbits(x); // fixed - - for (i = 0; i < 3; i++) - { - BIG_copy(u[i], w); - BIG_ctmod(u[i],x,bd); - BIG_ctsdiv(w,x,bd); - } - BIG_copy(u[3], w); - - /* */ -#if SIGN_OF_X_ZZZ==NEGATIVEX - BIG_modneg(u[1], u[1], q); - BIG_modneg(u[3], u[3], q); -#endif - -#endif - return; -} - -/* Multiply P by e in group G1 */ -void ZZZ::PAIR_G1mul(ECP *P, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GLV_ZZZ /* Note this method is patented */ - int np, nn; - ECP Q; - FP cru; - BIG t; - BIG u[2]; - glv(u, ee); - - ECP_copy(&Q, P); ECP_affine(&Q); - FP_rcopy(&cru, CRu); - FP_mul(&(Q.x), &(Q.x), &cru); - - /* note that -a.B = a.(-B). Use a or -a depending on which is smaller */ - - np = BIG_nbits(u[0]); - BIG_modneg(t, u[0], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[0], t); - ECP_neg(P); - } - - np = BIG_nbits(u[1]); - BIG_modneg(t, u[1], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[1], t); - ECP_neg(&Q); - } - BIG_norm(u[0]); - BIG_norm(u[1]); - ECP_mul2(P, &Q, u[0], u[1]); - - //printf("nbits(q) = %d\n",BIG_nbits(q)); - //printf("nbits(q)/2 = %d\n",BIG_nbits(q)/2); - //printf("u[0] %d = ",BIG_nbits(u[0]));BIG_output(u[0]); printf("\n"); - //printf("u[1] %d = ",BIG_nbits(u[1]));BIG_output(u[1]); printf("\n"); -#else - ECP_clmul(P, ee, q); -#endif -} - -/* Multiply P by e in group G2 */ -void ZZZ::PAIR_G2mul(ECP2 *P, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GS_G2_ZZZ /* Well I didn't patent it :) */ - int i, np, nn; - ECP2 Q[4]; - FP2 X; - FP fx, fy; - BIG x, u[4]; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X, NULL); - FP2_norm(&X); -#endif - - gs(u, ee); - - ECP2_copy(&Q[0], P); - for (i = 1; i < 4; i++) - { - ECP2_copy(&Q[i], &Q[i - 1]); - ECP2_frob(&Q[i], &X); - } - - for (i = 0; i < 4; i++) - { - np = BIG_nbits(u[i]); - BIG_modneg(x, u[i], q); - nn = BIG_nbits(x); - if (nn < np) - { - BIG_copy(u[i], x); - ECP2_neg(&Q[i]); - } - BIG_norm(u[i]); - } - ECP2_mul4(P, Q, u); - - //printf("nbits(q) = %d\n",BIG_nbits(q)); - //printf("nbits(q)/4 = %d\n",BIG_nbits(q)/4); - //printf("u[0] %d = ",BIG_nbits(u[0]));BIG_output(u[0]); printf("\n"); - //printf("u[1] %d = ",BIG_nbits(u[1]));BIG_output(u[1]); printf("\n"); - //printf("u[2] %d = ",BIG_nbits(u[2]));BIG_output(u[2]); printf("\n"); - //printf("u[3] %d = ",BIG_nbits(u[3]));BIG_output(u[3]); printf("\n"); - - -#else - ECP2_mul(P, ee); -#endif -} - -/* f=f^e */ -void ZZZ::PAIR_GTpow(FP12 *f, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GS_GT_ZZZ /* Note that this option requires a lot of RAM! Maybe better to use compressed XTR method, see fp4.c */ - int i, np, nn; - FP12 g[4]; - FP2 X; - BIG t; - FP fx, fy; - BIG u[4]; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - - gs(u, ee); - - FP12_copy(&g[0], f); - for (i = 1; i < 4; i++) - { - FP12_copy(&g[i], &g[i - 1]); - FP12_frob(&g[i], &X); - } - - for (i = 0; i < 4; i++) - { - np = BIG_nbits(u[i]); - BIG_modneg(t, u[i], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[i], t); - FP12_conj(&g[i], &g[i]); - } - BIG_norm(u[i]); - } - FP12_pow4(f, g, u); - -#else - FP12_pow(f, f, ee); -#endif -} - -/* test G1 group membership */ - -int ZZZ::PAIR_G1member(ECP *P) -{ - ECP W,T; - BIG x; - FP cru; - if (ECP_isinf(P)) return 0; -#if PAIRING_FRIENDLY_ZZZ!=BN_CURVE - BIG_rcopy(x, CURVE_Bnx); - ECP_copy(&W,P); - ECP_copy(&T,P); - ECP_mul(&T,x); - if (ECP_equals(P,&T)) return 0; // P is of low order - ECP_mul(&T,x); - ECP_neg(&T); - - FP_rcopy(&cru, CRu); - FP_mul(&(W.x), &(W.x), &cru); - if (!ECP_equals(&W,&T)) return 0; // check that Endomorphism works - -// Not needed -// ECP_add(&W,P); -// FP_mul(&(T.x), &(T.x), &cru); -// ECP_add(&W,&T); -// if (!ECP_isinf(&W)) return 0; // use it to check order -/* - BIG_rcopy(q, CURVE_Order); - ECP_copy(&W,P); - ECP_mul(&W,q); - if (!ECP_isinf(&W)) return 0; */ -#endif - return 1; -} - -/* test G2 group membership */ -int ZZZ::PAIR_G2member(ECP2 *P) -{ - ECP2 W,T; - BIG x; - FP2 X; - FP fx, fy; - - if (ECP2_isinf(P)) return 0; - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP2_inv(&X, &X, NULL); - FP2_norm(&X); -#endif - BIG_rcopy(x, CURVE_Bnx); - - ECP2_copy(&T,P); - ECP2_mul(&T,x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP2_neg(&T); -#endif - -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE -//https://eprint.iacr.org/2022/348.pdf - ECP2_copy(&W,&T); - ECP2_frob(&W,&X); // W=\psi(xP) - ECP2_add(&T,P); // T=xP+P - ECP2_add(&T,&W); // T=xP+P+\psi(xP) - ECP2_frob(&W,&X); // W=\psi^2(xP) - ECP2_add(&T,&W); // T=xp+P+\psi(xP)+\psi^2(xP) - ECP2_frob(&W,&X); // W=\psi^3(xP) - ECP2_dbl(&W); // W=\psi^3(2xP) -#else -//https://eprint.iacr.org/2021/1130 - ECP2_copy(&W,P); - ECP2_frob(&W, &X); // W=\psi(P) -#endif - - if (ECP2_equals(&W,&T)) return 1; - return 0; -} - -/* Check that m is in cyclotomic sub-group */ -/* Check that m!=1, conj(m)*m==1, and m.m^{p^4}=m^{p^2} */ -int ZZZ::PAIR_GTcyclotomic(FP12 *m) -{ - FP fx,fy; - FP2 X; - FP12 r,w; - if (FP12_isunity(m)) return 0; - FP12_conj(&r,m); - FP12_mul(&r,m); - if (!FP12_isunity(&r)) return 0; - - FP_rcopy(&fx,Fra); - FP_rcopy(&fy,Frb); - FP2_from_FPs(&X,&fx,&fy); - - FP12_copy(&r,m); FP12_frob(&r,&X); FP12_frob(&r,&X); - FP12_copy(&w,&r); FP12_frob(&w,&X); FP12_frob(&w,&X); - FP12_mul(&w,m); - - if (!FP12_equals(&w,&r)) return 0; - return 1; -} - -/* test for full GT group membership */ -int ZZZ::PAIR_GTmember(FP12 *m) -{ - BIG x; - FP2 X; - FP fx, fy; - FP12 r,t; - if (!PAIR_GTcyclotomic(m)) return 0; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - BIG_rcopy(x, CURVE_Bnx); - - FP12_pow(&t,m,x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP12_conj(&t,&t); -#endif - -#if PAIRING_FRIENDLY_ZZZ==BN_CURVE -//https://eprint.iacr.org/2022/348.pdf - FP12_copy(&r,&t); - FP12_frob(&r,&X); // r=(m^x)^p - FP12_mul(&t,m); // t=(m^x).m - FP12_mul(&t,&r); // t=(m^x).m.(m^x)^p - FP12_frob(&r,&X); // r=(m^x)^p^2 - FP12_mul(&t,&r); // t=(m^x).m.(m^x)^p.(m^x)^p^2 - FP12_frob(&r,&X); // r=(m^x)^p^3 - FP12_usqr(&r,&r); // r=(m^2x)^p^3 -#else -//https://eprint.iacr.org/2021/1130 - FP12_copy(&r,m); - FP12_frob(&r, &X); -#endif - - if (FP12_equals(&r,&t)) return 1; - return 0; -} - -#ifdef HAS_MAIN - -int main() -{ - int i; - char byt[32]; - csprng rng; - BIG xa, xb, ya, yb, w, a, b, t1, q, u[2], v[4], m, r; - ECP2 P, G; - ECP Q, R; - FP12 g, gp; - FP4 t, c, cp, cpm1, cpm2; - FP2 x, y, X; - - - BIG_rcopy(a, CURVE_Fra); - BIG_rcopy(b, CURVE_Frb); - FP2_from_BIGs(&X, a, b); - - BIG_rcopy(xa, CURVE_Gx); - BIG_rcopy(ya, CURVE_Gy); - - ECP_set(&Q, xa, ya); - if (Q.inf) printf("Failed to set - point not on curve\n"); - else printf("G1 set success\n"); - - printf("Q= "); - ECP_output(&Q); - printf("\n"); - - BIG_rcopy(xa, CURVE_Pxa); - BIG_rcopy(xb, CURVE_Pxb); - BIG_rcopy(ya, CURVE_Pya); - BIG_rcopy(yb, CURVE_Pyb); - - FP2_from_BIGs(&x, xa, xb); - FP2_from_BIGs(&y, ya, yb); - - ECP2_set(&P, &x, &y); - if (P.inf) printf("Failed to set - point not on curve\n"); - else printf("G2 set success\n"); - - printf("P= "); - ECP2_output(&P); - printf("\n"); - - for (i = 0; i < 1000; i++ ) - { - PAIR_ate(&g, &P, &Q); - PAIR_fexp(&g); - } - printf("g= "); - FP12_output(&g); - printf("\n"); - -} - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair4.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair4.cpp deleted file mode 100644 index 53b53e0..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair4.cpp +++ /dev/null @@ -1,1087 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE BLS Curve pairing functions */ - -//#define HAS_MAIN - -#include "pair4_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -namespace ZZZ { -static void PAIR_line(FP24 *, ECP4 *, ECP4 *, FP *, FP *); -static void PAIR_double(ECP4 *, FP4 *, FP4 *, FP4 *); -static void PAIR_add(ECP4 *, ECP4 *B, FP4 *, FP4 *, FP4 *); -static void PAIR_pack(FP8 *, FP4 *, FP4 *, FP4 *); -static void PAIR_unpack(FP24 *, FP8 *, FP *, FP *); -static void glv(BIG u[2], BIG); -static void gs(BIG u[4], BIG); -} - - -// Point doubling for pairings -static void ZZZ::PAIR_double(ECP4 *A, FP4 *AA, FP4 *BB, FP4 *CC) -{ - FP4 YY; - FP4_copy(CC, &(A->x)); //FP4 XX=new FP4(A.getx()); //X - FP4_copy(&YY, &(A->y)); //FP4 YY=new FP4(A.gety()); //Y - FP4_copy(BB, &(A->z)); //FP4 ZZ=new FP4(A.getz()); //Z - - FP4_copy(AA, &YY); //FP4 YZ=new FP4(YY); //Y - FP4_mul(AA, AA, BB); //YZ.mul(ZZ); //YZ - FP4_sqr(CC, CC); //XX.sqr(); //X^2 - FP4_sqr(&YY, &YY); //YY.sqr(); //Y^2 - FP4_sqr(BB, BB); //ZZ.sqr(); //Z^2 - - FP4_add(AA, AA, AA); - FP4_neg(AA, AA); - FP4_norm(AA); // -2YZ - FP4_times_i(AA); // -2YZi - - FP4_imul(BB, BB, 3 * CURVE_B_I); //3Bz^2 - FP4_imul(CC, CC, 3); //3X^2 - -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP4_times_i(&YY); // Y^2.i - FP4_times_i(CC); // 3X^2.i -#endif - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_times_i(BB); // 3Bz^2.i -#endif - - FP4_sub(BB, BB, &YY); - FP4_norm(BB); - - ECP4_dbl(A); //A.dbl(); - -} - -// Point addition for pairings -static void ZZZ::PAIR_add(ECP4 *A, ECP4 *B, FP4 *AA, FP4 *BB, FP4 *CC) -{ - FP4 T1; - FP4_copy(AA, &(A->x)); //FP4 X1=new FP4(A.getx()); // X1 - FP4_copy(CC, &(A->y)); //FP4 Y1=new FP4(A.gety()); // Y1 - FP4_copy(&T1, &(A->z)); //FP4 T1=new FP4(A.getz()); // Z1 - - FP4_copy(BB, &T1); //FP4 T2=new FP4(A.getz()); // Z1 - - FP4_mul(&T1, &T1, &(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2 - FP4_mul(BB, BB, &(B->x)); //T2.mul(B.getx()); // T2=Z1.X2 - - FP4_sub(AA, AA, BB); //X1.sub(T2); - FP4_norm(AA); //X1.norm(); // X1=X1-Z1.X2 - FP4_sub(CC, CC, &T1); //Y1.sub(T1); - FP4_norm(CC); //Y1.norm(); // Y1=Y1-Z1.Y2 - - FP4_copy(&T1, AA); //T1.copy(X1); // T1=X1-Z1.X2 - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP4_times_i(AA); - FP4_norm(AA); -#endif - - FP4_mul(&T1, &T1, &(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2 - - FP4_copy(BB, CC); //T2.copy(Y1); // T2=Y1-Z1.Y2 - FP4_mul(BB, BB, &(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2 - FP4_sub(BB, BB, &T1); //T2.sub(T1); - FP4_norm(BB); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 - - FP4_neg(CC, CC); //Y1.neg(); - FP4_norm(CC); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs - *** - - ECP4_add(A, B); //A.add(B); -} - -/* Line function */ -static void ZZZ::PAIR_line(FP24 *v, ECP4 *A, ECP4 *B, FP *Qx, FP *Qy) -{ - FP4 AA, BB, CC; - FP8 a, b, c; - - if (A == B) - PAIR_double(A, &AA, &BB, &CC); - else - PAIR_add(A, B, &AA, &BB, &CC); - - FP4_qmul(&CC, &CC, Qx); - FP4_qmul(&AA, &AA, Qy); - - FP8_from_FP4s(&a, &AA, &BB); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_from_FP4(&b, &CC); - FP8_zero(&c); -#endif -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_zero(&b); - FP8_from_FP4H(&c, &CC); -#endif - - FP24_from_FP8s(v, &a, &b, &c); - v->type = FP_SPARSER; -} - -/* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */ -int ZZZ::PAIR_nbits(BIG n3, BIG n) -{ - BIG x; - BIG_rcopy(x, CURVE_Bnx); - - BIG_copy(n, x); - BIG_norm(n); - BIG_pmul(n3, n, 3); - BIG_norm(n3); - - return BIG_nbits(n3); -} - -/* - For multi-pairing, product of n pairings - 1. Declare FP24 array of length number of bits in Ate parameter - 2. Initialise this array by calling PAIR_initmp() - 3. Accumulate each pairing by calling PAIR_another() n times - 4. Call PAIR_miller() - 5. Call final exponentiation PAIR_fexp() -*/ - -/* prepare for multi-pairing */ -void ZZZ::PAIR_initmp(FP24 r[]) -{ - int i; - for (i = ATE_BITS_ZZZ - 1; i >= 0; i--) - FP24_one(&r[i]); - return; -} - -/* basic Miller loop */ -void ZZZ::PAIR_miller(FP24 *res, FP24 r[]) -{ - int i; - FP24_one(res); - for (i = ATE_BITS_ZZZ - 1; i >= 1; i--) - { - FP24_sqr(res, res); - FP24_ssmul(res, &r[i]); - FP24_zero(&r[i]); - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(res, res); -#endif - FP24_ssmul(res, &r[0]); - FP24_zero(&r[0]); - return; -} - - -// Store precomputed line details in an FP4 -static void ZZZ::PAIR_pack(FP8 *T, FP4* AA, FP4* BB, FP4 *CC) -{ - FP4 I, A, B; - FP4_inv(&I, CC, NULL); - FP4_mul(&A, AA, &I); - FP4_mul(&B, BB, &I); - FP8_from_FP4s(T, &A, &B); -} - -// Unpack G2 line function details and include G1 -static void ZZZ::PAIR_unpack(FP24 *v, FP8* T, FP *Qx, FP *Qy) -{ - FP8 a, b, c; - FP4 t; - FP8_copy(&a, T); - FP4_qmul(&a.a, &a.a, Qy); - FP4_from_FP(&t, Qx); - -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_from_FP4(&b, &t); - FP8_zero(&c); -#endif -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_zero(&b); - FP8_from_FP4H(&c, &t); -#endif - - FP24_from_FP8s(v, &a, &b, &c); - v->type = FP_SPARSEST; -} - - -// Precompute table of line functions for fixed G2 value -void ZZZ::PAIR_precomp(FP8 T[], ECP4* GV) -{ - int i, j, nb, bt; - BIG n, n3; - FP4 AA, BB, CC; - ECP4 A, G, NG; - - ECP4_copy(&A, GV); - ECP4_copy(&G, GV); - ECP4_copy(&NG, GV); - ECP4_neg(&NG); - - nb = PAIR_nbits(n3, n); - j = 0; - - for (i = nb - 2; i >= 1; i--) - { - PAIR_double(&A, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_add(&A, &G, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - } - if (bt == -1) - { - PAIR_add(&A, &NG, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - } - } -} - -/* Accumulate another set of line functions for n-pairing, assuming precomputation on G2 */ -void ZZZ::PAIR_another_pc(FP24 r[], FP8 T[], ECP *QV) -{ - int i, j, nb, bt; - BIG x, n, n3; - FP24 lv, lv2; - ECP Q; - FP Qx, Qy; - - if (ECP_isinf(QV)) return; - - nb = PAIR_nbits(n3, n); - - ECP_copy(&Q, QV); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - j = 0; - for (i = nb - 2; i >= 1; i--) - { - PAIR_unpack(&lv, &T[j++], &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP24_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP24_smul(&lv, &lv2); - } - FP24_ssmul(&r[i], &lv); - } -} - -/* Accumulate another set of line functions for n-pairing */ -void ZZZ::PAIR_another(FP24 r[], ECP4* PV, ECP* QV) -{ - int i, j, nb, bt; - BIG x, n, n3; - FP24 lv, lv2; - ECP4 A, NP, P; - ECP Q; - FP Qx, Qy; - - if (ECP_isinf(QV)) return; - - nb = PAIR_nbits(n3, n); - - ECP4_copy(&P, PV); - ECP_copy(&Q, QV); - - ECP4_affine(&P); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - ECP4_copy(&A, &P); - ECP4_copy(&NP, &P); ECP4_neg(&NP); - - for (i = nb - 2; i >= 1; i--) - { - PAIR_line(&lv, &A, &A, &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv2, &A, &P, &Qx, &Qy); - FP24_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_line(&lv2, &A, &NP, &Qx, &Qy); - FP24_smul(&lv, &lv2); - } - FP24_ssmul(&r[i], &lv); - } -} - -/* Optimal R-ate pairing r=e(P,Q) */ -void ZZZ::PAIR_ate(FP24 *r, ECP4 *P1, ECP *Q1) -{ - BIG x, n, n3; - FP Qx, Qy; - int i, nb, bt; - ECP4 A, NP, P; - ECP Q; - FP24 lv, lv2; - - FP24_one(r); - if (ECP_isinf(Q1)) return; - - nb = PAIR_nbits(n3, n); - - ECP4_copy(&P, P1); - ECP_copy(&Q, Q1); - - ECP4_affine(&P); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - ECP4_copy(&A, &P); - ECP4_copy(&NP, &P); ECP4_neg(&NP); - - /* Main Miller Loop */ - for (i = nb - 2; i >= 1; i--) - { - FP24_sqr(r, r); - PAIR_line(&lv, &A, &A, &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv2, &A, &P, &Qx, &Qy); - FP24_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_line(&lv2, &A, &NP, &Qx, &Qy); - FP24_smul(&lv, &lv2); - } - FP24_ssmul(r, &lv); - - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(r, r); -#endif - -} - -/* Optimal R-ate double pairing e(P,Q).e(R,S) */ -void ZZZ::PAIR_double_ate(FP24 *r, ECP4 *P1, ECP *Q1, ECP4 *R1, ECP *S1) -{ - BIG x, n, n3; - FP Qx, Qy, Sx, Sy; - int i, nb, bt; - ECP4 A, B, NP, NR, P, R; - ECP Q, S; - FP24 lv, lv2; - - if (ECP_isinf(Q1)) - { - PAIR_ate(r, R1, S1); - return; - } - if (ECP_isinf(S1)) - { - PAIR_ate(r, P1, Q1); - return; - } - nb = PAIR_nbits(n3, n); - - ECP4_copy(&P, P1); - ECP_copy(&Q, Q1); - - ECP4_affine(&P); - ECP_affine(&Q); - - ECP4_copy(&R, R1); - ECP_copy(&S, S1); - - ECP4_affine(&R); - ECP_affine(&S); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - FP_copy(&Sx, &(S.x)); - FP_copy(&Sy, &(S.y)); - - ECP4_copy(&A, &P); - ECP4_copy(&B, &R); - - ECP4_copy(&NP, &P); ECP4_neg(&NP); - ECP4_copy(&NR, &R); ECP4_neg(&NR); - - - FP24_one(r); - - /* Main Miller Loop */ - for (i = nb - 2; i >= 1; i--) - { - FP24_sqr(r, r); - PAIR_line(&lv, &A, &A, &Qx, &Qy); - PAIR_line(&lv2, &B, &B, &Sx, &Sy); - FP24_smul(&lv, &lv2); - FP24_ssmul(r, &lv); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv, &A, &P, &Qx, &Qy); - PAIR_line(&lv2, &B, &R, &Sx, &Sy); - FP24_smul(&lv, &lv2); - FP24_ssmul(r, &lv); - } - if (bt == -1) - { - PAIR_line(&lv, &A, &NP, &Qx, &Qy); - PAIR_line(&lv2, &B, &NR, &Sx, &Sy); - FP24_smul(&lv, &lv2); - FP24_ssmul(r, &lv); - } - } - - - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(r, r); -#endif - -} - -/* final exponentiation - keep separate for multi-pairings and to avoid thrashing stack */ - -void ZZZ::PAIR_fexp(FP24 *r) -{ - FP2 X; - BIG x; - FP a, b; - FP24 t0, t1, t2; //, t3, t4, t5, t6, t7; // could lose one of these - r=t3 - - BIG_rcopy(x, CURVE_Bnx); - FP_rcopy(&a, Fra); - FP_rcopy(&b, Frb); - FP2_from_FPs(&X, &a, &b); - - /* Easy part of final exp - r^(p^12-1)(p^4+1)*/ - - FP24_inv(&t0, r); - FP24_conj(r, r); - - FP24_mul(r, &t0); - FP24_copy(&t0, r); - - FP24_frob(r, &X, 4); - - FP24_mul(r, &t0); - -// See https://eprint.iacr.org/2020/875.pdf - FP24_usqr(&t2,r); - FP24_mul(&t2,r); // t2=r^3 - - FP24_pow(&t1,r,x); // t1=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t1, &t1); -#endif - FP24_conj(&t0,r); // t0=r^-1 - FP24_copy(r,&t1); - FP24_mul(r,&t0); // r=r^(x-1) - - FP24_pow(&t1,r,x); // t1=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t1, &t1); -#endif - FP24_conj(&t0,r); // t0=r^-1 - FP24_copy(r,&t1); - FP24_mul(r,&t0); // r=r^(x-1) - -// ^(x+p) - FP24_pow(&t1,r,x); // t1=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t1, &t1); -#endif - FP24_copy(&t0,r); - FP24_frob(&t0,&X,1); // t0=r^p - FP24_copy(r,&t1); - FP24_mul(r,&t0); // r=r^x.r^p - -// ^(x^2+p^2) - FP24_pow(&t1,r,x); - FP24_pow(&t1,&t1,x); // t1=r^x^2 - FP24_copy(&t0,r); - FP24_frob(&t0,&X,2); // t0=r^p^2 - FP24_mul(&t1,&t0); // t1=r^x^2.r^p^2 - FP24_copy(r,&t1); - -// ^(x^4+p^4-1) - FP24_pow(&t1,r,x); - FP24_pow(&t1,&t1,x); - FP24_pow(&t1,&t1,x); - FP24_pow(&t1,&t1,x); // t1=r^x^4 - FP24_copy(&t0,r); - FP24_frob(&t0,&X,4); // t0=r^p^4 - FP24_mul(&t1,&t0); // t1=r^x^4.r^p^4 - FP24_conj(&t0,r); // t0=r^-1 - FP24_copy(r,&t1); - FP24_mul(r,&t0); // r=r^x^4.r^p^4.r^-1 - - FP24_mul(r,&t2); - FP24_reduce(r); - -/* -// Ghamman & Fouotsa Method - (completely garbled in https://eprint.iacr.org/2016/130) - - FP24_usqr(&t7, r); // t7=f^2 - FP24_pow(&t1, &t7, x); // t1=t7^u - - BIG_fshr(x, 1); - FP24_pow(&t2, &t1, x); // t2=t1^(u/2) - BIG_fshl(x, 1); // x must be even - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t1, &t1); -#endif - - FP24_conj(&t3, &t1); // t3=1/t1 - FP24_mul(&t2, &t3); // t2=t1*t3 - FP24_mul(&t2, r); // t2=t2*f - - - FP24_pow(&t3, &t2, x); // t3=t2^u - FP24_pow(&t4, &t3, x); // t4=t3^u - FP24_pow(&t5, &t4, x); // t5=t4^u - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t3, &t3); - FP24_conj(&t5, &t5); -#endif - - FP24_frob(&t3, &X, 6); - FP24_frob(&t4, &X, 5); - - FP24_mul(&t3, &t4); // t3=t3.t4 - - - FP24_pow(&t6, &t5, x); // t6=t5^u -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t6, &t6); -#endif - - - FP24_frob(&t5, &X, 4); - FP24_mul(&t3, &t5); // ?? - - - FP24_conj(&t0, &t2); // t0=1/t2 - FP24_mul(&t6, &t0); // t6=t6*t0 - - FP24_copy(&t5, &t6); - FP24_frob(&t5, &X, 3); - - FP24_mul(&t3, &t5); // t3=t3*t5 - FP24_pow(&t5, &t6, x); // t5=t6^x - FP24_pow(&t6, &t5, x); // t6=t5^x - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t5, &t5); -#endif - - FP24_copy(&t0, &t5); - FP24_frob(&t0, &X, 2); - FP24_mul(&t3, &t0); // t3=t3*t0 - FP24_copy(&t0, &t6); // - FP24_frob(&t0, &X, 1); - - FP24_mul(&t3, &t0); // t3=t3*t0 - FP24_pow(&t5, &t6, x); // t5=t6*x - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t5, &t5); -#endif - - FP24_frob(&t2, &X, 7); - - FP24_mul(&t5, &t7); // t5=t5*t7 - FP24_mul(&t3, &t2); // t3=t3*t2 - FP24_mul(&t3, &t5); // t3=t3*t5 - - FP24_mul(r, &t3); - FP24_reduce(r); -*/ -} - -#ifdef USE_GLV_ZZZ -/* GLV method */ -static void ZZZ::glv(BIG u[2], BIG ee) -{ - int bd; - BIG q,x,x2; - BIG_rcopy(q, CURVE_Order); - -// -(x^4).P = (Beta.x,y) - - BIG_rcopy(x, CURVE_Bnx); - - BIG_smul(x2, x, x); - BIG_smul(x, x2, x2); - bd=BIG_nbits(q)-BIG_nbits(x); // fixed x^4 - - BIG_copy(u[0], ee); - BIG_ctmod(u[0], x, bd); - BIG_copy(u[1], ee); - BIG_ctsdiv(u[1], x, bd); - - BIG_sub(u[1], q, u[1]); - - - return; -} -#endif // USE_GLV - -/* Galbraith & Scott Method */ -static void ZZZ::gs(BIG u[8], BIG ee) -{ - int i,bd; - BIG q,x,w; - BIG_rcopy(q, CURVE_Order); - - BIG_rcopy(x, CURVE_Bnx); - BIG_copy(w, ee); - bd=BIG_nbits(q)-BIG_nbits(x); // fixed - - for (i = 0; i < 7; i++) - { - BIG_copy(u[i], w); - BIG_ctmod(u[i], x, bd); - BIG_ctsdiv(w, x, bd); - } - BIG_copy(u[7], w); - - /* */ -#if SIGN_OF_X_ZZZ==NEGATIVEX - BIG_modneg(u[1], u[1], q); - BIG_modneg(u[3], u[3], q); - BIG_modneg(u[5], u[5], q); - BIG_modneg(u[7], u[7], q); -#endif - - return; -} - -/* Multiply P by e in group G1 */ -void ZZZ::PAIR_G1mul(ECP *P, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GLV_ZZZ /* Note this method is patented */ - int np, nn; - ECP Q; - FP cru; - BIG t; - BIG u[2]; - - glv(u, ee); - - ECP_copy(&Q, P); ECP_affine(&Q); - FP_rcopy(&cru, CRu); - FP_mul(&(Q.x), &(Q.x), &cru); - - /* note that -a.B = a.(-B). Use a or -a depending on which is smaller */ - - np = BIG_nbits(u[0]); - BIG_modneg(t, u[0], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[0], t); - ECP_neg(P); - } - - np = BIG_nbits(u[1]); - BIG_modneg(t, u[1], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[1], t); - ECP_neg(&Q); - } - BIG_norm(u[0]); - BIG_norm(u[1]); - ECP_mul2(P, &Q, u[0], u[1]); - -#else - ECP_clmul(P, ee, q); -#endif -} - -/* Multiply P by e in group G2 */ -void ZZZ::PAIR_G2mul(ECP4 *P, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GS_G2_ZZZ /* Well I didn't patent it :) */ - int i, np, nn; - ECP4 Q[8]; - FP2 X[3]; - BIG x, u[8]; - - ECP4_frob_constants(X); - - gs(u, ee); - - ECP4_copy(&Q[0], P); - for (i = 1; i < 8; i++) - { - ECP4_copy(&Q[i], &Q[i - 1]); - ECP4_frob(&Q[i], X, 1); - } - - for (i = 0; i < 8; i++) - { - np = BIG_nbits(u[i]); - BIG_modneg(x, u[i], q); - nn = BIG_nbits(x); - if (nn < np) - { - BIG_copy(u[i], x); - ECP4_neg(&Q[i]); - } - BIG_norm(u[i]); - } - - ECP4_mul8(P, Q, u); - -#else - ECP4_mul(P, ee); -#endif -} - -/* f=f^e */ -void ZZZ::PAIR_GTpow(FP24 *f, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GS_GT_ZZZ /* Note that this option requires a lot of RAM! Maybe better to use compressed XTR method, see FP8.c */ - int i, np, nn; - FP24 g[8]; - FP2 X; - BIG t; - FP fx, fy; - BIG u[8]; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - - gs(u, ee); - - FP24_copy(&g[0], f); - for (i = 1; i < 8; i++) - { - FP24_copy(&g[i], &g[i - 1]); - FP24_frob(&g[i], &X, 1); - } - - for (i = 0; i < 8; i++) - { - np = BIG_nbits(u[i]); - BIG_modneg(t, u[i], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[i], t); - FP24_conj(&g[i], &g[i]); - } - BIG_norm(u[i]); - } - FP24_pow8(f, g, u); - -#else - FP24_pow(f, f, ee); -#endif -} - -/* test G1 group membership */ - -int ZZZ::PAIR_G1member(ECP *P) -{ - ECP W,T; - BIG x; - FP cru; - if (ECP_isinf(P)) return 0; - - BIG_rcopy(x, CURVE_Bnx); - ECP_copy(&W,P); - ECP_copy(&T,P); - ECP_mul(&T,x); - if (ECP_equals(P,&T)) return 0; // P is of low order - ECP_mul(&T,x); - ECP_mul(&T,x); ECP_mul(&T,x); - ECP_neg(&T); - - FP_rcopy(&cru, CRu); - FP_mul(&(W.x), &(W.x), &cru); - if (!ECP_equals(&W,&T)) return 0; // check that Endomorphism works - -// Not needed -// ECP_add(&W,P); -// FP_mul(&(T.x), &(T.x), &cru); -// ECP_add(&W,&T); -// if (!ECP_isinf(&W)) return 0; // use it to check order - -/* - BIG q; - ECP W; - if (ECP_isinf(P)) return 0; - BIG_rcopy(q, CURVE_Order); - ECP_copy(&W,P); - ECP_mul(&W,q); - if (!ECP_isinf(&W)) return 0; */ - return 1; -} - -/* test G2 group membership */ - -int ZZZ::PAIR_G2member(ECP4 *P) -{ - ECP4 W,T; - BIG x; - FP2 X[3]; - - if (ECP4_isinf(P)) return 0; - ECP4_frob_constants(X); - BIG_rcopy(x, CURVE_Bnx); - - ECP4_copy(&W,P); - ECP4_frob(&W, X, 1); - - ECP4_copy(&T,P); - ECP4_mul(&T,x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP4_neg(&T); -#endif -/* - ECP4_copy(&R,&W); - ECP4_frob(&R,X,1); // R=\psi^2(P) - ECP4_sub(&W,&R); - ECP4_copy(&R,&T); // R=xP - ECP4_frob(&R,X,1); - ECP4_add(&W,&R); // W=\psi(P)-\psi^2(P)+\psi(xP) -*/ - if (ECP4_equals(&W,&T)) return 1; - return 0; - -/* - BIG q; - ECP4 W; - if (ECP4_isinf(P)) return 0; - BIG_rcopy(q, CURVE_Order); - ECP4_copy(&W,P); - ECP4_mul(&W,q); - if (!ECP4_isinf(&W)) return 0; - return 1; */ -} - -/* Check that m is in cyclotomic sub-group */ -/* Check that m!=1, conj(m)*m==1, and m.m^{p^8}=m^{p^4} */ -int ZZZ::PAIR_GTcyclotomic(FP24 *m) -{ - FP fx,fy; - FP2 X; - FP24 r,w; - if (FP24_isunity(m)) return 0; - FP24_conj(&r,m); - FP24_mul(&r,m); - if (!FP24_isunity(&r)) return 0; - - FP_rcopy(&fx,Fra); - FP_rcopy(&fy,Frb); - FP2_from_FPs(&X,&fx,&fy); - - FP24_copy(&r,m); FP24_frob(&r,&X,4); - FP24_copy(&w,&r); FP24_frob(&w,&X,4); - FP24_mul(&w,m); - - if (!FP24_equals(&w,&r)) return 0; - return 1; -} -/* test for full GT group membership */ - -int ZZZ::PAIR_GTmember(FP24 *m) -{ - BIG x; - FP2 X; - FP fx, fy; - FP24 r,t; - if (!PAIR_GTcyclotomic(m)) return 0; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - BIG_rcopy(x, CURVE_Bnx); - - FP24_copy(&r,m); - FP24_frob(&r, &X, 1); - - FP24_pow(&t,m,x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP24_conj(&t,&t); -#endif - - if (FP24_equals(&r,&t)) return 1; - return 0; -/* - BIG_rcopy(q, CURVE_Order); - FP24_pow(&r, m, q); - if (!FP24_isunity(&r)) return 0; - return 1; */ -} - -#ifdef HAS_MAIN - -using namespace std; -using namespace ZZZ; - - -// g++ -O2 pair4_BLS24.cpp ecp4_BLS24.cpp fp24_BLS24.cpp fp8_BLS24.cpp fp4_BLS24.cpp fp2_BLS24.cpp ecp_BLS24.cpp fp_BLS24.cpp big_XXX.cpp rom_curve_BLS24.cpp rom_field_BLS24.cpp rand.cpp hash.cpp oct.cpp -o pair4_BLS24.exe - -int main() -{ - int i; - char byt[32]; - csprng rng; - BIG xa, xb, ya, yb, w, a, b, t1, q, u[2], v[4], m, r, xx, x2, x4, p; - ECP4 P, G; - ECP Q, R; - FP24 g, gp; - FP8 t, c, cp, cpm1, cpm2; - FP4 X, Y; - FP2 x, y, f, Aa, Bb; - FP cru; - - for (i = 0; i < 32; i++) - byt[i] = i + 9; - RAND_seed(&rng, 32, byt); - - BIG_rcopy(r, CURVE_Order); - BIG_rcopy(p, Modulus); - - - BIG_rcopy(xa, CURVE_Gx); - BIG_rcopy(ya, CURVE_Gy); - - ECP_set(&Q, xa, ya); - if (Q.inf) printf("Failed to set - point not on curve\n"); - else printf("G1 set success\n"); - - printf("Q= "); - ECP_output(&Q); - printf("\n"); - - ECP4_generator(&P); - - if (P.inf) printf("Failed to set - point not on curve\n"); - else printf("G2 set success\n"); - - BIG_rcopy(a, Fra); - BIG_rcopy(b, Frb); - FP2_from_BIGs(&f, a, b); - - PAIR_ate(&g, &P, &Q); - - printf("gb= "); - FP24_output(&g); - printf("\n"); - PAIR_fexp(&g); - - printf("g= "); - FP24_output(&g); - printf("\n"); - - ECP_copy(&R, &Q); - ECP4_copy(&G, &P); - - ECP4_dbl(&G); - ECP_dbl(&R); - ECP_affine(&R); - - PAIR_ate(&g, &G, &Q); - PAIR_fexp(&g); - - printf("g1= "); - FP24_output(&g); - printf("\n"); - - PAIR_ate(&g, &P, &R); - PAIR_fexp(&g); - - printf("g2= "); - FP24_output(&g); - printf("\n"); - - - PAIR_G1mul(&Q, r); - printf("rQ= "); ECP_output(&Q); printf("\n"); - - PAIR_G2mul(&P, r); - printf("rP= "); ECP4_output(&P); printf("\n"); - - BIG_randomnum(w, r, &rng); - - FP24_copy(&gp, &g); - - PAIR_GTpow(&g, w); - - FP24_trace(&t, &g); - - printf("g^r= "); FP8_output(&t); printf("\n"); - - FP24_compow(&t, &gp, w, r); - - printf("t(g)= "); FP8_output(&t); printf("\n"); - -} - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair8.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair8.cpp deleted file mode 100644 index 7bfba83..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/pair8.cpp +++ /dev/null @@ -1,1181 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE BLS Curve pairing functions */ - -//#define HAS_MAIN - -#include "pair8_ZZZ.h" - -using namespace XXX; -using namespace YYY; - -namespace ZZZ { -static void PAIR_line(FP48 *, ECP8 *, ECP8 *, FP *, FP *); -static void PAIR_double(ECP8 *, FP8 *, FP8 *, FP8 *); -static void PAIR_add(ECP8 *, ECP8 *B, FP8 *, FP8 *, FP8 *); -static void PAIR_pack(FP16 *, FP8 *, FP8 *, FP8 *); -static void PAIR_unpack(FP48 *, FP16 *, FP *, FP *); -static void glv(BIG u[2], BIG); -static void gs(BIG u[4], BIG); -} - - -// Point doubling for pairings -static void ZZZ::PAIR_double(ECP8 *A, FP8 *AA, FP8 *BB, FP8 *CC) -{ - FP8 YY; - FP8_copy(CC, &(A->x)); //FP8 XX=new FP8(A.getx()); //X - FP8_copy(&YY, &(A->y)); //FP8 YY=new FP8(A.gety()); //Y - FP8_copy(BB, &(A->z)); //FP8 ZZ=new FP8(A.getz()); //Z - - FP8_copy(AA, &YY); //FP8 YZ=new FP8(YY); //Y - FP8_mul(AA, AA, BB); //YZ.mul(ZZ); //YZ - FP8_sqr(CC, CC); //XX.sqr(); //X^2 - FP8_sqr(&YY, &YY); //YY.sqr(); //Y^2 - FP8_sqr(BB, BB); //ZZ.sqr(); //Z^2 - - FP8_add(AA, AA, AA); - FP8_neg(AA, AA); - FP8_norm(AA); // -2YZ - FP8_times_i(AA); // -2YZi - - FP8_imul(BB, BB, 3 * CURVE_B_I); //3Bz^2 - FP8_imul(CC, CC, 3); //3X^2 - -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP8_times_i(&YY); // Y^2.i - FP8_times_i(CC); // 3X^2.i -#endif - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_times_i(BB); // 3Bz^2.i -#endif - - FP8_sub(BB, BB, &YY); - FP8_norm(BB); - - ECP8_dbl(A); //A.dbl(); - -} - -// Point addition for pairings -static void ZZZ::PAIR_add(ECP8 *A, ECP8 *B, FP8 *AA, FP8 *BB, FP8 *CC) -{ - FP8 T1; - FP8_copy(AA, &(A->x)); //FP8 X1=new FP8(A.getx()); // X1 - FP8_copy(CC, &(A->y)); //FP8 Y1=new FP8(A.gety()); // Y1 - FP8_copy(&T1, &(A->z)); //FP8 T1=new FP8(A.getz()); // Z1 - - FP8_copy(BB, &T1); //FP8 T2=new FP8(A.getz()); // Z1 - - FP8_mul(&T1, &T1, &(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2 - FP8_mul(BB, BB, &(B->x)); //T2.mul(B.getx()); // T2=Z1.X2 - - FP8_sub(AA, AA, BB); //X1.sub(T2); - FP8_norm(AA); //X1.norm(); // X1=X1-Z1.X2 - FP8_sub(CC, CC, &T1); //Y1.sub(T1); - FP8_norm(CC); //Y1.norm(); // Y1=Y1-Z1.Y2 - - FP8_copy(&T1, AA); //T1.copy(X1); // T1=X1-Z1.X2 - -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP8_times_i(AA); - FP8_norm(AA); -#endif - - FP8_mul(&T1, &T1, &(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2 - - FP8_copy(BB, CC); //T2.copy(Y1); // T2=Y1-Z1.Y2 - FP8_mul(BB, BB, &(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2 - FP8_sub(BB, BB, &T1); //T2.sub(T1); - FP8_norm(BB); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 - - FP8_neg(CC, CC); //Y1.neg(); - FP8_norm(CC); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs - *** - - ECP8_add(A, B); //A.add(B); -} - -/* Line function */ -static void ZZZ::PAIR_line(FP48 *v, ECP8 *A, ECP8 *B, FP *Qx, FP *Qy) -{ - FP8 AA, BB, CC; - FP16 a, b, c; - - if (A == B) - PAIR_double(A, &AA, &BB, &CC); - else - PAIR_add(A, B, &AA, &BB, &CC); - - FP8_tmul(&CC, &CC, Qx); - FP8_tmul(&AA, &AA, Qy); - - FP16_from_FP8s(&a, &AA, &BB); -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP16_from_FP8(&b, &CC); - FP16_zero(&c); -#endif -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP16_zero(&b); - FP16_from_FP8H(&c, &CC); -#endif - - FP48_from_FP16s(v, &a, &b, &c); - v->type = FP_SPARSER; -} - - -/* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */ -int ZZZ::PAIR_nbits(BIG n3, BIG n) -{ - BIG x; - BIG_rcopy(x, CURVE_Bnx); - - BIG_copy(n, x); - BIG_norm(n); - BIG_pmul(n3, n, 3); - BIG_norm(n3); - - return BIG_nbits(n3); -} - -/* - For multi-pairing, product of n pairings - 1. Declare FP48 array of length number of bits in Ate parameter - 2. Initialise this array by calling PAIR_initmp() - 3. Accumulate each pairing by calling PAIR_another() n times - 4. Call PAIR_miller() - 5. Call final exponentiation PAIR_fexp() -*/ - -/* prepare for multi-pairing */ -void ZZZ::PAIR_initmp(FP48 r[]) -{ - int i; - for (i = ATE_BITS_ZZZ - 1; i >= 0; i--) - FP48_one(&r[i]); - return; -} - -/* basic Miller loop */ -void ZZZ::PAIR_miller(FP48 *res, FP48 r[]) -{ - int i; - FP48_one(res); - for (i = ATE_BITS_ZZZ - 1; i >= 1; i--) - { - FP48_sqr(res, res); - FP48_ssmul(res, &r[i]); - FP48_zero(&r[i]); - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(res, res); -#endif - FP48_ssmul(res, &r[0]); - FP48_zero(&r[0]); - return; -} - - -// Store precomputed line details in an FP4 -static void ZZZ::PAIR_pack(FP16 *T, FP8* AA, FP8* BB, FP8 *CC) -{ - FP8 I, A, B; - FP8_inv(&I, CC, NULL); - FP8_mul(&A, AA, &I); - FP8_mul(&B, BB, &I); - FP16_from_FP8s(T, &A, &B); -} - -// Unpack G2 line function details and include G1 -static void ZZZ::PAIR_unpack(FP48 *v, FP16* T, FP *Qx, FP *Qy) -{ - FP16 a, b, c; - FP8 t; - FP16_copy(&a, T); - FP8_tmul(&a.a, &a.a, Qy); - FP8_from_FP(&t, Qx); - -#if SEXTIC_TWIST_ZZZ==D_TYPE - FP16_from_FP8(&b, &t); - FP16_zero(&c); -#endif -#if SEXTIC_TWIST_ZZZ==M_TYPE - FP16_zero(&b); - FP16_from_FP8H(&c, &t); -#endif - - FP48_from_FP16s(v, &a, &b, &c); - v->type = FP_SPARSEST; -} - -// Precompute table of line functions for fixed G2 value -void ZZZ::PAIR_precomp(FP16 T[], ECP8* GV) -{ - int i, j, nb, bt; - BIG n, n3; - FP8 AA, BB, CC; - ECP8 A, G, NG; - - ECP8_copy(&A, GV); - ECP8_copy(&G, GV); - ECP8_copy(&NG, GV); - ECP8_neg(&NG); - - nb = PAIR_nbits(n3, n); - j = 0; - - for (i = nb - 2; i >= 1; i--) - { - PAIR_double(&A, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_add(&A, &G, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - } - if (bt == -1) - { - PAIR_add(&A, &NG, &AA, &BB, &CC); - PAIR_pack(&T[j++], &AA, &BB, &CC); - } - } -} - -/* Accumulate another set of line functions for n-pairing, assuming precomputation on G2 */ -void ZZZ::PAIR_another_pc(FP48 r[], FP16 T[], ECP *QV) -{ - int i, j, nb, bt; - BIG x, n, n3; - FP48 lv, lv2; - ECP Q; - FP Qx, Qy; - - if (ECP_isinf(QV)) return; - - nb = PAIR_nbits(n3, n); - - ECP_copy(&Q, QV); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - j = 0; - for (i = nb - 2; i >= 1; i--) - { - PAIR_unpack(&lv, &T[j++], &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP48_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_unpack(&lv2, &T[j++], &Qx, &Qy); - FP48_smul(&lv, &lv2); - } - FP48_ssmul(&r[i], &lv); - } -} - -/* Accumulate another set of line functions for n-pairing */ -void ZZZ::PAIR_another(FP48 r[], ECP8* PV, ECP* QV) -{ - int i, j, nb, bt; - BIG x, n, n3; - FP48 lv, lv2; - ECP8 A, NP, P; - ECP Q; - FP Qx, Qy; - - if (ECP_isinf(QV)) return; - - nb = PAIR_nbits(n3, n); - - ECP8_copy(&P, PV); - ECP_copy(&Q, QV); - - ECP8_affine(&P); - ECP_affine(&Q); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - ECP8_copy(&A, &P); - ECP8_copy(&NP, &P); ECP8_neg(&NP); - - for (i = nb - 2; i >= 1; i--) - { - PAIR_line(&lv, &A, &A, &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv2, &A, &P, &Qx, &Qy); - FP48_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_line(&lv2, &A, &NP, &Qx, &Qy); - FP48_smul(&lv, &lv2); - } - FP48_ssmul(&r[i], &lv); - } -} - -/* Optimal R-ate pairing r=e(P,Q) */ -void ZZZ::PAIR_ate(FP48 *r, ECP8 *P1, ECP *Q1) -{ - BIG x, n, n3; - FP Qx, Qy; - int i, nb, bt; - ECP8 A, NP, P; - ECP Q; - FP48 lv, lv2; - - FP48_one(r); - if (ECP_isinf(Q1)) return; - - nb = PAIR_nbits(n3, n); - - ECP8_copy(&P, P1); - ECP_copy(&Q, Q1); - - ECP8_affine(&P); - ECP_affine(&Q); - - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - ECP8_copy(&A, &P); - ECP8_copy(&NP, &P); ECP8_neg(&NP); - - /* Main Miller Loop */ - for (i = nb - 2; i >= 1; i--) - { - FP48_sqr(r, r); - PAIR_line(&lv, &A, &A, &Qx, &Qy); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv2, &A, &P, &Qx, &Qy); - FP48_smul(&lv, &lv2); - } - if (bt == -1) - { - PAIR_line(&lv2, &A, &NP, &Qx, &Qy); - FP48_smul(&lv, &lv2); - } - FP48_ssmul(r, &lv); - - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(r, r); -#endif - -} - -/* Optimal R-ate double pairing e(P,Q).e(R,S) */ -void ZZZ::PAIR_double_ate(FP48 *r, ECP8 *P1, ECP *Q1, ECP8 *R1, ECP *S1) -{ - BIG x, n, n3; - FP Qx, Qy, Sx, Sy; - int i, nb, bt; - ECP8 A, B, NP, NR, P, R; - ECP Q, S; - FP48 lv, lv2; - - if (ECP_isinf(Q1)) - { - PAIR_ate(r, R1, S1); - return; - } - if (ECP_isinf(S1)) - { - PAIR_ate(r, P1, Q1); - return; - } - nb = PAIR_nbits(n3, n); - - ECP8_copy(&P, P1); - ECP_copy(&Q, Q1); - - ECP8_affine(&P); - ECP_affine(&Q); - - ECP8_copy(&R, R1); - ECP_copy(&S, S1); - - ECP8_affine(&R); - ECP_affine(&S); - - FP_copy(&Qx, &(Q.x)); - FP_copy(&Qy, &(Q.y)); - - FP_copy(&Sx, &(S.x)); - FP_copy(&Sy, &(S.y)); - - ECP8_copy(&A, &P); - ECP8_copy(&B, &R); - - ECP8_copy(&NP, &P); ECP8_neg(&NP); - ECP8_copy(&NR, &R); ECP8_neg(&NR); - - FP48_one(r); - - /* Main Miller Loop */ - for (i = nb - 2; i >= 1; i--) - { - FP48_sqr(r, r); - PAIR_line(&lv, &A, &A, &Qx, &Qy); - PAIR_line(&lv2, &B, &B, &Sx, &Sy); - FP48_smul(&lv, &lv2); - FP48_ssmul(r, &lv); - - bt = BIG_bit(n3, i) - BIG_bit(n, i); // bt=BIG_bit(n,i); - if (bt == 1) - { - PAIR_line(&lv, &A, &P, &Qx, &Qy); - PAIR_line(&lv2, &B, &R, &Sx, &Sy); - FP48_smul(&lv, &lv2); - FP48_ssmul(r, &lv); - } - if (bt == -1) - { - PAIR_line(&lv, &A, &NP, &Qx, &Qy); - PAIR_line(&lv2, &B, &NR, &Sx, &Sy); - FP48_smul(&lv, &lv2); - FP48_ssmul(r, &lv); - } - } - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(r, r); -#endif - -} - -/* final exponentiation - keep separate for multi-pairings and to avoid thrashing stack */ - -void ZZZ::PAIR_fexp(FP48 *r) -{ - FP2 X; - BIG x; - FP a, b; - FP48 t0, t1, t2;//, t3; - - BIG_rcopy(x, CURVE_Bnx); - FP_rcopy(&a, Fra); - FP_rcopy(&b, Frb); - FP2_from_FPs(&X, &a, &b); - - /* Easy part of final exp - r^(p^24-1)(p^8+1)*/ - - FP48_inv(&t0, r); - FP48_conj(r, r); - - FP48_mul(r, &t0); - FP48_copy(&t0, r); - - FP48_frob(r, &X, 8); - - FP48_mul(r, &t0); - -// See https://eprint.iacr.org/2020/875.pdf - FP48_usqr(&t2,r); - FP48_mul(&t2,r); // t2=r^3 - - FP48_pow(&t1,r,x); // t1=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_conj(&t0,r); // t0=r^-1 - FP48_copy(r,&t1); - FP48_mul(r,&t0); // r=r^(x-1) - - FP48_pow(&t1,r,x); // t1=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_conj(&t0,r); // t0=r^-1 - FP48_copy(r,&t1); - FP48_mul(r,&t0); // r=r^(x-1) - -// ^(x+p) - FP48_pow(&t1,r,x); // t1=r^x -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t0,r); - FP48_frob(&t0,&X,1); // t0=r^p - FP48_copy(r,&t1); - FP48_mul(r,&t0); // r=r^x.r^p - -// ^(x^2+p^2) - FP48_pow(&t1,r,x); - FP48_pow(&t1,&t1,x); // t1=r^x^2 - FP48_copy(&t0,r); - FP48_frob(&t0,&X,2); // t0=r^p^2 - FP48_mul(&t1,&t0); // t1=r^x^2.r^p^2 - FP48_copy(r,&t1); - -// ^(x^4+p^4) - FP48_pow(&t1,r,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); // t1=r^x^4 - FP48_copy(&t0,r); - FP48_frob(&t0,&X,4); // t0=r^p^4 - FP48_mul(&t1,&t0); // t1=r^x^4.r^p^4 - FP48_copy(r,&t1); - -// ^(x^8+p^8-1) - FP48_pow(&t1,r,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); - FP48_pow(&t1,&t1,x); // t1=r^x^8 - FP48_copy(&t0,r); - FP48_frob(&t0,&X,8); // t0=r^p^8 - FP48_mul(&t1,&t0); // t1=r^x^8.r^p^8 - FP48_conj(&t0,r); // t0=r^-1 - FP48_copy(r,&t1); - FP48_mul(r,&t0); // r=r^x^4.r^p^4.r^-1 - - FP48_mul(r,&t2); - FP48_reduce(r); -/* -// f^e0.f^e1^p.f^e2^p^2.. .. f^e14^p^14.f^e15^p^15 - - FP48_usqr(&t7, r); // t7=f^2 - - if (BIG_parity(x) == 1) - { - FP48_pow(&t2, r, x); // f^u - FP48_usqr(&t1, &t2); // f^(2u) - FP48_pow(&t2, &t2, x); // f^u^2 - } else { - FP48_pow(&t1, &t7, x); // t1=f^2u - BIG_fshr(x, 1); - FP48_pow(&t2, &t1, x); // t2=f^2u^(u/2) = f^u^2 - BIG_fshl(x, 1); // x must be even - } -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - - FP48_conj(&t3, &t1); // t3=f^-2u - FP48_mul(&t2, &t3); // t2=f^u^2.f^-2u - FP48_mul(&t2, r); // t2=f^u^2.f^-2u.f = f^(u^2-2u+1) = f^e15 - - FP48_mul(r, &t7); // f^3 - - FP48_pow(&t1, &t2, x); // f^e15^u = f^(u.e15) = f^(u^3-2u^2+u) = f^(e14) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 14); // f^(u^3-2u^2+u)^p^14 - FP48_mul(r, &t3); // f^3.f^(u^3-2u^2+u)^p^14 - - FP48_pow(&t1, &t1, x); // f^(u.e14) = f^(u^4-2u^3+u^2) = f^(e13) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 13); // f^(e13)^p^13 - FP48_mul(r, &t3); // f^3.f^(u^3-2u^2+u)^p^14.f^(u^4-2u^3+u^2)^p^13 - - FP48_pow(&t1, &t1, x); // f^(u.e13) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 12); // f^(e12)^p^12 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e12) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 11); // f^(e11)^p^11 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e11) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 10); // f^(e10)^p^10 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e10) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 9); // f^(e9)^p^9 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e9) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 8); // f^(e8)^p^8 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e8) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_conj(&t3, &t2); - FP48_mul(&t1, &t3); // f^(u.e8).f^-e15 - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 7); // f^(e7)^p^7 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e7) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 6); // f^(e6)^p^6 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e6) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 5); // f^(e5)^p^5 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e5) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 4); // f^(e4)^p^4 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e4) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 3); // f^(e3)^p^3 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e3) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 2); // f^(e2)^p^2 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e2) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_copy(&t3, &t1); - FP48_frob(&t3, &X, 1); // f^(e1)^p^1 - FP48_mul(r, &t3); - - FP48_pow(&t1, &t1, x); // f^(u.e1) -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t1, &t1); -#endif - FP48_mul(r, &t1); // r.f^e0 - - FP48_frob(&t2, &X, 15); // f^(e15.p^15) - FP48_mul(r, &t2); - - FP48_reduce(r); -*/ -} - -#ifdef USE_GLV_ZZZ -/* GLV method */ -static void ZZZ::glv(BIG u[2], BIG ee) -{ - - int bd; - BIG q,x,x2; - BIG_rcopy(q, CURVE_Order); - -// -(x^8).P = (Beta.x,y) - - BIG_rcopy(x, CURVE_Bnx); - - BIG_smul(x2, x, x); - BIG_smul(x, x2, x2); - BIG_smul(x2, x, x); - bd=BIG_nbits(q)-BIG_nbits(x2); // fixed x^8 - - BIG_copy(u[0], ee); - BIG_ctmod(u[0], x2, bd); - BIG_copy(u[1], ee); - BIG_ctsdiv(u[1], x2, bd); - - BIG_sub(u[1], q, u[1]); - - return; -} -#endif // USE_GLV - -/* Galbraith & Scott Method */ -static void ZZZ::gs(BIG u[16], BIG ee) -{ - int i,bd; - BIG q,x,w; - BIG_rcopy(q, CURVE_Order); - - BIG_rcopy(x, CURVE_Bnx); - BIG_copy(w, ee); - bd=BIG_nbits(q)-BIG_nbits(x); // fixed - - for (i = 0; i < 15; i++) - { - BIG_copy(u[i], w); - BIG_ctmod(u[i], x, bd); - BIG_ctsdiv(w, x, bd); - } - BIG_copy(u[15], w); - - /* */ -#if SIGN_OF_X_ZZZ==NEGATIVEX - BIG_modneg(u[1], u[1], q); - BIG_modneg(u[3], u[3], q); - BIG_modneg(u[5], u[5], q); - BIG_modneg(u[7], u[7], q); - BIG_modneg(u[9], u[9], q); - BIG_modneg(u[11], u[11], q); - BIG_modneg(u[13], u[13], q); - BIG_modneg(u[15], u[15], q); -#endif - - - return; -} - -/* Multiply P by e in group G1 */ -void ZZZ::PAIR_G1mul(ECP *P, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GLV_ZZZ /* Note this method is patented */ - int np, nn; - ECP Q; - FP cru; - BIG t; - BIG u[2]; - - glv(u, ee); - - ECP_copy(&Q, P); ECP_affine(&Q); - FP_rcopy(&cru, CRu); - FP_mul(&(Q.x), &(Q.x), &cru); - - /* note that -a.B = a.(-B). Use a or -a depending on which is smaller */ - - np = BIG_nbits(u[0]); - BIG_modneg(t, u[0], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[0], t); - ECP_neg(P); - } - - np = BIG_nbits(u[1]); - BIG_modneg(t, u[1], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[1], t); - ECP_neg(&Q); - } - BIG_norm(u[0]); - BIG_norm(u[1]); - ECP_mul2(P, &Q, u[0], u[1]); - -#else - ECP_clmul(P, ee, q); -#endif -} - -/* Multiply P by e in group G2 */ -void ZZZ::PAIR_G2mul(ECP8 *P, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GS_G2_ZZZ /* Well we didn't patent it :) */ - int i, np, nn; - ECP8 Q[16], T; - FP2 X[3]; - BIG x, u[16]; - - ECP8_frob_constants(X); - - gs(u, ee); - - ECP8_copy(&Q[0], P); - - for (i = 1; i < 16; i++) - { - ECP8_copy(&Q[i], &Q[i - 1]); - ECP8_frob(&Q[i], X, 1); - } - - for (i = 0; i < 16; i++) - { - np = BIG_nbits(u[i]); - BIG_modneg(x, u[i], q); - BIG_norm(x); - nn = BIG_nbits(x); - if (nn < np) - { - BIG_copy(u[i], x); - ECP8_neg(&Q[i]); - } - BIG_norm(u[i]); - } - - ECP8_mul16(P, Q, u); - -#else - ECP8_mul(P, ee); -#endif -} - -/* f=f^e */ -void ZZZ::PAIR_GTpow(FP48 *f, BIG e) -{ - BIG ee,q; - BIG_copy(ee,e); - BIG_rcopy(q, CURVE_Order); - BIG_mod(ee,q); -#ifdef USE_GS_GT_ZZZ /* Note that this option requires a lot of RAM! Maybe better to use compressed XTR method, see FP16.cpp */ - int i, np, nn; - FP48 g[16]; - FP2 X; - BIG t; - FP fx, fy; - BIG u[16]; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - - gs(u, ee); - - FP48_copy(&g[0], f); - for (i = 1; i < 16; i++) - { - FP48_copy(&g[i], &g[i - 1]); - FP48_frob(&g[i], &X, 1); - } - - for (i = 0; i < 16; i++) - { - np = BIG_nbits(u[i]); - BIG_modneg(t, u[i], q); - nn = BIG_nbits(t); - if (nn < np) - { - BIG_copy(u[i], t); - FP48_conj(&g[i], &g[i]); - } - BIG_norm(u[i]); - } - FP48_pow16(f, g, u); - -#else - FP48_pow(f, f, ee); -#endif -} - -/* test G1 group membership */ - -int ZZZ::PAIR_G1member(ECP *P) -{ - ECP W,T; - BIG x; - FP cru; - if (ECP_isinf(P)) return 0; - - BIG_rcopy(x, CURVE_Bnx); - ECP_copy(&W,P); - ECP_copy(&T,P); - ECP_mul(&T,x); - if (ECP_equals(P,&T)) return 0; // P is of low order - ECP_mul(&T,x); - ECP_mul(&T,x); ECP_mul(&T,x); - ECP_mul(&T,x); ECP_mul(&T,x); - ECP_mul(&T,x); ECP_mul(&T,x); - ECP_neg(&T); - - FP_rcopy(&cru, CRu); - FP_mul(&(W.x), &(W.x), &cru); - if (!ECP_equals(&W,&T)) return 0; // check that Endomorphism works - -// Not needed -// ECP_add(&W,P); -// FP_mul(&(T.x), &(T.x), &cru); -// ECP_add(&W,&T); -// if (!ECP_isinf(&W)) return 0; // use it to check order -/* - BIG q; - ECP W; - if (ECP_isinf(P)) return 0; - BIG_rcopy(q, CURVE_Order); - ECP_copy(&W,P); - ECP_mul(&W,q); - if (!ECP_isinf(&W)) return 0; */ - return 1; -} - -/* test G2 group membership */ - -int ZZZ::PAIR_G2member(ECP8 *P) -{ - ECP8 W,T; - BIG x; - FP2 X[3]; - - if (ECP8_isinf(P)) return 0; - ECP8_frob_constants(X); - BIG_rcopy(x, CURVE_Bnx); - - ECP8_copy(&W,P); - ECP8_frob(&W, X, 1); - - ECP8_copy(&T,P); - ECP8_mul(&T,x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - ECP8_neg(&T); -#endif -/* - ECP8_copy(&R,&W); - ECP8_frob(&R,X,1); // R=\psi^2(P) - ECP8_sub(&W,&R); - ECP8_copy(&R,&T); // R=xP - ECP8_frob(&R,X,1); - ECP8_add(&W,&R); // W=\psi(P)-\psi^2(P)+\psi(xP) -*/ - if (ECP8_equals(&W,&T)) return 1; - return 0; - - -/* BIG q; - ECP8 W; - if (ECP8_isinf(P)) return 0; - BIG_rcopy(q, CURVE_Order); - ECP8_copy(&W,P); - ECP8_mul(&W,q); - if (!ECP8_isinf(&W)) return 0; - return 1; */ -} - - -/* Check that m is in cyclotomic sub-group */ -/* Check that m!=1, conj(m)*m==1, and m.m^{p^16}=m^{p^8} */ -int ZZZ::PAIR_GTcyclotomic(FP48 *m) -{ - FP fx,fy; - FP2 X; - FP48 r,w; - if (FP48_isunity(m)) return 0; - FP48_conj(&r,m); - FP48_mul(&r,m); - if (!FP48_isunity(&r)) return 0; - - FP_rcopy(&fx,Fra); - FP_rcopy(&fy,Frb); - FP2_from_FPs(&X,&fx,&fy); - - FP48_copy(&r,m); FP48_frob(&r,&X,8); - FP48_copy(&w,&r); FP48_frob(&w,&X,8); - FP48_mul(&w,m); - - if (!FP48_equals(&w,&r)) return 0; - return 1; -} - -/* test for full GT group membership */ -int ZZZ::PAIR_GTmember(FP48 *m) -{ - BIG x; - FP2 X; - FP fx, fy; - FP48 r,t; - if (!PAIR_GTcyclotomic(m)) return 0; - - FP_rcopy(&fx, Fra); - FP_rcopy(&fy, Frb); - FP2_from_FPs(&X, &fx, &fy); - BIG_rcopy(x, CURVE_Bnx); - - FP48_copy(&r,m); - FP48_frob(&r, &X, 1); - - FP48_pow(&t,m,x); - -#if SIGN_OF_X_ZZZ==NEGATIVEX - FP48_conj(&t,&t); -#endif - - if (FP48_equals(&r,&t)) return 1; - return 0; -/* - BIG_rcopy(q, CURVE_Order); - FP48_pow(&r, m, q); - if (!FP48_isunity(&r)) return 0; - return 1; */ -} - -#ifdef HAS_MAIN - -using namespace std; -using namespace ZZZ; - - -// g++ -O2 pair8_BLS48.cpp ecp8_BLS48.cpp fp48_BLS48.cpp fp16_BLS48.cpp fp8_BLS48.cpp fp4_BLS48.cpp fp2_BLS48.cpp ecp_BLS48.cpp fp_BLS48.cpp big_B560_29.cpp rom_curve_BLS48.cpp rom_field_BLS48.cpp rand.cpp hash.cpp oct.cpp -o pair8_BLS48.exe - -int main() -{ - int i; - char byt[32]; - csprng rng; - BIG xa, xb, ya, yb, w, a, b, t1, q, u[2], v[4], m, r, xx, x2, x4, p; - ECP8 P, G; - ECP Q, R; - FP48 g, gp; - FP16 t, c, cp, cpm1, cpm2; - FP8 X, Y; - FP2 x, y, f, Aa, Bb; - FP cru; - - for (i = 0; i < 32; i++) - byt[i] = i + 9; - RAND_seed(&rng, 32, byt); - - BIG_rcopy(r, CURVE_Order); - BIG_rcopy(p, Modulus); - - - BIG_rcopy(xa, CURVE_Gx); - BIG_rcopy(ya, CURVE_Gy); - - ECP_set(&Q, xa, ya); - if (Q.inf) printf("Failed to set - point not on curve\n"); - else printf("G1 set success\n"); - - printf("Q= "); - ECP_output(&Q); - printf("\n"); - - ECP8_generator(&P); - - if (P.inf) printf("Failed to set - point not on curve\n"); - else printf("G2 set success\n"); - - BIG_rcopy(a, Fra); - BIG_rcopy(b, Frb); - FP2_from_BIGs(&f, a, b); - - PAIR_ate(&g, &P, &Q); - - printf("gb= "); - FP48_output(&g); - printf("\n"); - PAIR_fexp(&g); - - printf("g= "); - FP48_output(&g); - printf("\n"); - - ECP_copy(&R, &Q); - ECP8_copy(&G, &P); - - ECP8_dbl(&G); - ECP_dbl(&R); - ECP_affine(&R); - - PAIR_ate(&g, &G, &Q); - PAIR_fexp(&g); - - printf("g1= "); - FP48_output(&g); - printf("\n"); - - PAIR_ate(&g, &P, &R); - PAIR_fexp(&g); - - printf("g2= "); - FP48_output(&g); - printf("\n"); - - PAIR_G1mul(&Q, r); - printf("rQ= "); ECP_output(&Q); printf("\n"); - - PAIR_G2mul(&P, r); - printf("rP= "); ECP8_output(&P); printf("\n"); - - PAIR_GTpow(&g, r); - printf("g^r= "); FP48_output(&g); printf("\n"); - - BIG_randomnum(w, r, &rng); - - FP48_copy(&gp, &g); - - PAIR_GTpow(&g, w); - - FP48_trace(&t, &g); - - printf("g^r= "); FP16_output(&t); printf("\n"); - - FP48_compow(&t, &gp, w, r); - - printf("t(g)= "); FP16_output(&t); printf("\n"); - -} - -#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rand.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rand.cpp deleted file mode 100644 index a3bda7b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rand.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Cryptographic strong random number generator - * - * Unguessable seed -> SHA -> PRNG internal state -> SHA -> random numbers - * Slow - but secure - * - * See ftp://ftp.rsasecurity.com/pub/pdfs/bull-1.pdf for a justification - */ -/* SU=m, m is Stack Usage */ - -#include "core.h" - -using namespace core; - -/* SU= 20 */ -static unsign32 sbrand(csprng *rng) -{ - /* Marsaglia & Zaman random number generator */ - int i, k; - unsign32 pdiff, t; - rng->rndptr++; - if (rng->rndptr < NK) return rng->ira[rng->rndptr]; - rng->rndptr = 0; - for (i = 0, k = NK - NJ; i < NK; i++, k++) - { - /* calculate next NK values */ - if (k == NK) k = 0; - t = rng->ira[k]; - pdiff = t - rng->ira[i] - rng->borrow; - - if (pdiff < t) rng->borrow = 0; - if (pdiff > t) rng->borrow = 1; - rng->ira[i] = pdiff; - } - return rng->ira[0]; -} - -/* SU= 20 */ -static void sirand(csprng* rng, unsign32 seed) -{ - /* initialise random number system */ - /* modified so that a subsequent call "stirs" in another seed value */ - /* in this way as many seed bits as desired may be used */ - int i, in; - unsign32 t, m = 1; - rng->borrow = 0L; - rng->rndptr = 0; - rng->ira[0] ^= seed; - for (i = 1; i < NK; i++) - { - /* fill initialisation vector */ - in = (NV * i) % NK; - rng->ira[in] ^= m; /* note XOR */ - t = m; - m = seed - m; - seed = t; - } - for (i = 0; i < 10000; i++) sbrand(rng ); /* "warm-up" & stir the generator */ -} - -/* SU= 312 */ -static void fill_pool(csprng *rng) -{ - /* hash down output of RNG to re-fill the pool */ - int i; - hash256 sh; - HASH256_init(&sh); - for (i = 0; i < 128; i++) HASH256_process(&sh, sbrand(rng)); - HASH256_hash(&sh, rng->pool); - rng->pool_ptr = 0; -} - -static unsign32 pack(const uchar *b) -{ - /* pack bytes into a 32-bit Word */ - return ((unsign32)b[3] << 24) | ((unsign32)b[2] << 16) | ((unsign32)b[1] << 8) | (unsign32)b[0]; -} - -/* SU= 360 */ -/* Initialize RNG with some real entropy from some external source */ -void core::RAND_seed(csprng *rng, int rawlen, char *raw) -{ - /* initialise from at least 128 byte string of raw * - * random (keyboard?) input, and 32-bit time-of-day */ - int i; - char digest[32]; - uchar b[4]; - hash256 sh; - rng->pool_ptr = 0; - for (i = 0; i < NK; i++) rng->ira[i] = 0; - if (rawlen > 0) - { - HASH256_init(&sh); - for (i = 0; i < rawlen; i++) - HASH256_process(&sh, raw[i]); - HASH256_hash(&sh, digest); - - /* initialise PRNG from distilled randomness */ - - for (i = 0; i < 8; i++) - { - b[0] = digest[4 * i]; - b[1] = digest[4 * i + 1]; - b[2] = digest[4 * i + 2]; - b[3] = digest[4 * i + 3]; - // printf("%08x\n",pack(b)); - sirand(rng, pack(b)); - } - } - fill_pool(rng); -} - -/* Terminate and clean up */ -void core::RAND_clean(csprng *rng) -{ - /* kill internal state */ - int i; - rng->pool_ptr = rng->rndptr = 0; - for (i = 0; i < 32; i++) rng->pool[i] = 0; - for (i = 0; i < NK; i++) rng->ira[i] = 0; - rng->borrow = 0; -} - -/* get random byte */ -/* SU= 8 */ -int core::RAND_byte(csprng *rng) -{ - int r; - r = rng->pool[rng->pool_ptr++]; - if (rng->pool_ptr >= 32) fill_pool(rng); - return (r & 0xff); -} - -/* test main program */ -/* -#include -#include - -void main() -{ - int i; - char raw[256]; - csprng rng; - - RAND_clean(&rng); - - - for (i=0;i<256;i++) raw[i]=(char)i; - RAND_seed(&rng,256,raw); - - for (i=0;i<1000;i++) - printf("%02x ",(unsigned char)RAND_byte(&rng)); -} - -*/ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/randapi.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/randapi.cpp deleted file mode 100644 index 9f2d5c5..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/randapi.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "randapi.h" - -using namespace core; - -/* Initialise a Cryptographically Strong Random Number Generator from - an octet of raw random data */ - -void core::CREATE_CSPRNG(csprng *RNG, octet *RAW) -{ - RAND_seed(RNG, RAW->len, RAW->val); -} - -void core::KILL_CSPRNG(csprng *RNG) -{ - RAND_clean(RNG); -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/readme.md b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/readme.md deleted file mode 100644 index a998d83..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/readme.md +++ /dev/null @@ -1,124 +0,0 @@ -# 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. diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_ANSSI.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_ANSSI.cpp deleted file mode 100644 index 2414943..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_ANSSI.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_ANSSI.h" - - -namespace ANSSI { -/* ANSSI Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xB7BB73F,0x75ED967,0x1A18030,0xC9AE4B,0xFDFEC,0x754A44C,0xD4ABA,0x5428A93,0xE353FCA,0xE}; -const BIG CURVE_Order= {0x6D655E1,0xFDD459C,0x2BF941F,0x67E140D,0x35B53DC,0xE8CE424,0xF10126D,0xB3AD58,0x1FD178C,0xF}; -const BIG CURVE_Gx= {0x98F5CFF,0xC97A2DD,0x8B70164,0xD2DCAF9,0x3958C27,0x4749D42,0xB31183D,0x56C139E,0x6B3D4C3,0xB}; -const BIG CURVE_Gy= {0x4062CFB,0x115A155,0x4C9E183,0xC307E8E,0xF8C2701,0xF0F3ECE,0x11F9271,0xC8B2049,0x142E0F7,0x6}; -const BIG CURVE_HTPC= {0x1A725D0,0xA8983E2,0x77B349E,0x66D2BB4,0x676B54C,0x119A095,0xCAC6DC7,0xFD18A3A,0x2906D4D,0x7}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x75ED967B7BB73FL,0xC9AE4B1A18030L,0x754A44C00FDFECL,0x5428A9300D4ABAL,0xEE353FCAL}; -const BIG CURVE_Order= {0xFDD459C6D655E1L,0x67E140D2BF941FL,0xE8CE42435B53DCL,0xB3AD58F10126DL,0xF1FD178CL}; -const BIG CURVE_Gx= {0xC97A2DD98F5CFFL,0xD2DCAF98B70164L,0x4749D423958C27L,0x56C139EB31183DL,0xB6B3D4C3L}; -const BIG CURVE_Gy= {0x115A1554062CFBL,0xC307E8E4C9E183L,0xF0F3ECEF8C2701L,0xC8B204911F9271L,0x6142E0F7L}; -const BIG CURVE_HTPC= {0xA8983E21A725D0L,0x66D2BB477B349EL,0x119A095676B54CL,0xFD18A3ACAC6DC7L,0x72906D4DL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12381.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12381.cpp deleted file mode 100644 index 016b7af..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12381.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS12381.h" - -namespace BLS12381 { -/* Curve BLS12381 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 4; -const BIG CURVE_B= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1,0x1FFFFFF8,0x1F96FFBF,0x1B4805FF,0x1D80553B,0xC0404D0,0x1520CCE7,0xA6533AF,0x73EDA7,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gx= {0x1B22C6BB,0x19D78056,0x1E86BBFE,0xBD07FF2,0x1AC586C5,0x1D1F8B8D,0x4168538,0x9F2EE97,0xFC3688C,0x27D4D60,0x9A558E3,0x32FAF28,0x1F1D3A73,0xB}; -const BIG CURVE_Gy= {0x6C5E7E1,0x551194A,0x222B903,0x198E8945,0xB3EDD03,0xC659602,0xBD8036C,0x12BABA01,0x4FCF5E0,0xBA0EC57,0x8278C3B,0x75541E3,0xB3F481E,0x4}; -//const BIG CURVE_HTPC= {0x1AAAE,0xFD80000,0xFFFFED7,0x189FAFDA,0x1C912627,0x14945F,0xBA6AF26,0xEC3ECC4,0x13EFA3BF,0x1422F081,0x33A3655,0x12FFCD33,0x111EA3,0xD}; -const BIG CURVE_HTPC= {0x1DE821B8,0x6288315,0x1715FEDF,0xD2A41DC,0x1C31088B,0xDEEA01F,0x7FC11BB,0x1E9291A1,0x1A12F01D,0xD1EB8DE,0x16CE3D2A,0x16D97EE9,0x1F7462C8,0x0}; -const BIG CURVE_Bnx= {0x10000,0x10080000,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x10001,0x10080000,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -//const BIG CURVE_Cof= {0xAAAB,0x55558,0x157855A3,0x191800AA,0x396,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0x121BDB8,0x402B646,0x16EFBF5,0x18064D50,0x1D1770BA,0x5B23D71,0xC0AD144,0x1A9F4807,0x11C6E47A,0x196E2882,0x9820149,0x11E1522,0x4AA2B2F,0x1}; -const BIG CURVE_Pxb= {0x1D042B7E,0xD63E82A,0x51755F9,0x19E22427,0x15049334,0x10DDEE3F,0x186AD769,0x1A132416,0x5596BD0,0x4413A7B,0x1F6B34E8,0x4E33EC0,0x1E02B605,0x9}; -const BIG CURVE_Pya= {0x8B82801,0xC9AA430,0xB28A278,0x15939877,0xD12C923,0xD34A8B0,0xE9DB50A,0x155197BA,0x1AADFD9B,0x16D171A8,0x3327371,0x4FADC23,0xE5D5277,0x6}; -const BIG CURVE_Pyb= {0x105F79BE,0x15483AFF,0x1B07686A,0xE1A4EB9,0x99AB3F3,0x955AB97,0xEBC99D2,0xFD0B4EC,0x19CB3E28,0x15E145C,0xCAB34AC,0x1D4E6998,0x6C4A02,0x3}; - -#if HTC_ISO_BLS12381 != 0 - -const BIG CURVE_Ad= {0xD584C1D,0x7A14041,0x183E5FD7,0x6DF1B41,0x81AC989,0xC0D77EC,0x1AA363A2,0xA707DCC,0x2B0EA98,0x164B6A4C,0xF5A4E80,0x771D286,0x144698A,0x0}; -const BIG CURVE_Bd= {0xE172BE0,0xE62474C,0x1B3AA974,0x642B462,0x15EF55A2,0xA7E779,0x1C282E7,0x1E1E49E8,0x1B2016C1,0x3A9F771,0x62C4BA,0x2D10060,0xE2908D1,0x9}; -const BIG PC[53]= {{0xBA2D229,0xE45D174,0x134E47EA,0x1637016C,0x6B68C24,0x1F8DE126,0x1EF08F02,0xFC45906,0x1D31D79D,0x1C0F6F71,0xF47A588,0x1C4C1CE1,0xE08C248,0x3},{0x1605FB7B,0x133EF9F8,0xA177B32,0x16EE3F18,0x14866F69,0x19B001D8,0x1E5B542B,0x1BBCCF0F,0xDFA7DCC,0xE92B2D8,0x1CB63B02,0x139C0FC4,0x321DA07,0x8},{0x1E390C9E,0x1920833D,0xC9DE5F,0x12165DB8,0x11B7FA31,0xA5D7A5D,0x12659D8C,0x1007418B,0x2DD2ECB,0xAE89C79,0xB830DD4,0x179F4F88,0x9B1F8E1,0xB},{0x497E317,0xB8CC354,0xDD3A55B,0x52BE52D,0x1D1DE4FA,0xB649462,0x15D28B16,0xD9CF3EA,0xDC43B75,0xB1DF4C8,0x1EE42CCD,0x134F1F88,0xD3CF1F,0x4},{0x3F0C88E,0x65AB0C7,0x1D1D6BE7,0xF91F191,0x753339B,0x3177879,0x16C69A0B,0x1564EB69,0x13356DE5,0x6888BF2,0x1A1D0E21,0x357B7C5,0x1B81E770,0xB},{0x139ED84,0xEBF912D,0x14BB2B7,0x4A25182,0x6B2A8DA,0x110C7CE4,0x13864023,0x4C9E1F1,0x1FB11586,0x1C573295,0x1A8DC9B0,0x1FC89A52,0x16ED6553,0x6},{0xF652983,0x89E0E33,0x19CF4673,0xE1A5B95,0x8F90A08,0x15C84BF3,0x66E7B4E,0xFBB2A4F,0x15DB3CB1,0x1FBD3A55,0x744806,0x1AE627FE,0x30C3250,0xB},{0xC8895D9,0x8AA674D,0x79DF114,0x1450DE60,0x1AC18985,0x15B2CC17,0xCFC21BB,0xB424AFF,0x1499DB99,0x1F208C72,0x1990AD2C,0x333E886,0x99726A3,0x7},{0x1D9B6861,0xD9C4320,0x41C64F1,0xDC4B9C6,0x13083533,0x1944F8D9,0x1C97C6CC,0xCAD51B7,0x12D7F5E4,0x183F2AA0,0x13818274,0x1F98DB6E,0x178E7166,0xB},{0xC9EDCB0,0xBCFCED,0x25CA7F8,0x187C7A54,0xE25C958,0x1280F634,0xF95A1E3,0xE652B30,0x1BCE0324,0xE8854D0,0x7441231,0x12ECF1D8,0x154005DB,0x6},{0x13CB83BB,0x1A7778D,0x630D5BA,0x11E54DE6,0x1E86B483,0x119E3868,0x105FD597,0xB65ED50,0x1C7C17E7,0x110A3D40,0x1622EAC,0x1287565E,0x1294ED3E,0xB},{0x134649B7,0x1560B313,0x198B5BAB,0x185ABE5,0xE2C8561,0x1DAB66DA,0x17FC989,0x11145AE0,0x56B303E,0xECCC0AC,0xE024407,0x1D066681,0x1A05F2B1,0x8},{0x8ECDD0A,0xB1C268B,0x1E19400B,0xE9C9696,0x11C15931,0x99CBC79,0xDDDB7D,0x1DD2DEFA,0xF682B4,0x159D2B34,0x11DB5B8F,0x13D255A8,0x15FC13AB,0x4},{0x19A1D641,0x1BB761D3,0xE90DC11,0x4CD2557,0x18835038,0x6D33F9C,0x19ADD040,0x3AE2C26,0xCE07F8D,0xD7E3D1E,0x17A482CF,0x1B4A9F04,0x10ECF6A,0x5},{0x1DCC5A5E,0xFBECCDD,0x478B4C4,0xB72913A,0x2C580FA,0x10E6FCC1,0x2A0665B,0x1843794D,0x196E7F63,0x3A6780C,0xC2CFD6C,0x1AC95164,0xA7AC2A9,0xA},{0xEE84A3A,0x12BA24B,0x3781B3B,0x766A71E,0xDE9CEA7,0x3983157,0x62538B8,0x1335EA74,0x1570F57,0x1F02CB39,0x3CF8318,0x2D26C32,0x172CAACF,0x3},{0x1F6304A5,0x16FCD14,0x8A3C470,0x1A49788,0x982F740,0x1E77925C,0x1534290E,0x1D39D395,0x9395735,0x18283637,0x154E43DF,0x9CCCF72,0x7355F8E,0x7},{0x1532A21E,0x1CE9CAD9,0xD5E0754,0x537503E,0x106DA9BD,0x27419D9,0xAEE35AD,0xB34240C,0x1DFFDFC7,0x1A1F3D03,0x29BC757,0x4522950,0x1A8E1620,0x9},{0xDC62CD8,0x186F449C,0x1B3D7104,0xDAA487D,0x16FD0497,0x1455E146,0x15455332,0x7E2D62C,0x145B0824,0x1BE2075A,0x120EABFB,0xB15C5FD,0x1425581A,0x1},{0x1CB83E19,0x611CDD2,0x53FB73F,0x7A12CF9,0xCEACD6A,0x700588D,0x1347F299,0xDEB4E31,0x1F6F8941,0xDFF94C8,0x4DF98A,0xF4644BD,0x12962FE5,0x5},{0x82B3BFF,0xE413B76,0xC09BA79,0x155108D9,0xBF5713D,0x12C4624,0x30049B,0x19419E10,0x167041E8,0x14C729B1,0x122D1C44,0x16AB3886,0x561A5DE,0x9},{0xD21B1C,0x9E7CFD2,0xD0F7E26,0x11AD037C,0xAC62B55,0x430BFE4,0x2EA7256,0x9746B69,0xF01D5EF,0x1A5E9FD3,0x62CB98B,0x19FE335C,0xCA8D548,0x4},{0x9C8B604,0x5A2B5F3,0x10071DC1,0xA04FDFD,0x101B2B66,0xA7D4AD7,0x8E55EB7,0x11F092CB,0x15CB181D,0x1A16F975,0x13A942CE,0x121E079C,0x1E6BE4E9,0xA},{0x1475224B,0x1358F38A,0x1E6BEDE1,0x20936CA,0x7CE46BA,0x7AE9CB5,0x15A366AC,0x103AFD0C,0x1C5E673D,0x1A46251F,0xA8567D,0x1C899E22,0x1C129645,0x2},{0x1B980133,0x16CE9FAE,0x8CA9910,0x1F215A38,0x659CC6C,0x11969E20,0x16004F99,0x101A982,0x1C757B3B,0x13DF18AE,0x1CBF002B,0x1A3D9536,0x45A394A,0x1},{0xB971EF8,0xA602780,0x4847C83,0x10A38323,0x633F06C,0x87403DA,0x23B009C,0x54684D6,0x47AA7B1,0x27A9FA,0x14554258,0x372733,0x1182CAC1,0x5},{0x10074D8E,0x103E4526,0x113581B3,0x139BE836,0x1643249D,0x1F3FC88F,0x918B9AF,0x17155E18,0xC523559,0x1FF6976E,0xE463050,0x1E6DEDBD,0xB46A908,0xC},{0x1011C132,0x9B88D6,0xFEEBF3A,0x1E74B99C,0x1E61031B,0x1F20B1C4,0x4FF4460,0x196D95E9,0x13CD2FCB,0x18EA1FDC,0x37F42E3,0x6F9A37C,0x1713E479,0xC},{0xA731C30,0x1D7D575E,0x13AE9BCA,0x1EE0ABBA,0xD43B9B3,0xF3F68F2,0x1BF81A61,0x14F22B5E,0x3C42A0C,0x1D6D0A51,0x88EAF79,0x30D7B6A,0x1BBA7A1,0x7},{0x1BDBA587,0x1B872BB,0x181E8D8,0xCA4038F,0xCABE69D,0x17350F90,0x9B07A2D,0x2CCF3B8,0x1B8F3ABD,0x10F26D0D,0x1A232788,0x1B2CD097,0x1FC4018B,0x4},{0x1870FB29,0xAF26518,0x17FA4D68,0xC8AA1FD,0x842642F,0x6D36136,0x7FF40E,0x17FC77BB,0x14170A05,0x9653633,0x17A649AF,0x67570DF,0x187C8D53,0x4},{0x1FE9D6F2,0xB0FC42A,0x3D057B2,0x10F5848C,0x14F3747A,0x9E26B1,0x132D48C5,0x19457C30,0x1CE75BB8,0x13BCB59,0xCB25DF4,0x1F583779,0xAB0B9BC,0x2},{0x1633A5F0,0xD91D589,0x16A01CA6,0x1EC64D92,0x1544E203,0xE1E9D6A,0x1EF5D941,0x1A95F5B6,0x74A7D0,0xDC78535,0x8847847,0xC696D4,0x603FCA4,0xB},{0x12E8FEDB,0xDB6D767,0x4102A10,0xFF1B813,0x11ADC2EE,0x1FE9109A,0x2E1E60C,0x1F7C79CA,0x4195536,0x1510A94E,0x172BD3F8,0x1FC1FE26,0xCC03FDE,0x4},{0x10E5F4CB,0x11AAE3BD,0x11877B29,0xB5753D,0x11CF9DE4,0x11F60192,0x4702792,0x1721DD6F,0x17D42AA7,0x16C3A33A,0x1E261D46,0x11303842,0x1F86376E,0x0},{0x72DE1F6,0x6FF1206,0xC0148EE,0x1AA42C51,0xDA7D26,0x1F25C8A0,0x138B0D12,0x1ACB1463,0x142552E2,0x351DA4C,0x1D28E132,0x152CDCCD,0xCC786BA,0x0},{0xE41C696,0x4BF3AD1,0xBEA2FF8,0xACE232C,0x1AD34D6C,0x11A1F5B3,0xF43E41,0xD84A9E7,0x31223E9,0x1BB7DA34,0x15440DB5,0x9DCB023,0x14996A10,0x9},{0x1707BB33,0x14C22B8C,0xEE8F0AF,0x18F5DD36,0x143D3CD0,0x17B64AB2,0x548AD4A,0x11C9150D,0x1A11AD13,0xA4C06E7,0x96747C2,0x17449DC0,0x10D97C81,0x4},{0x1D634B8F,0xAA39D0,0xD25E011,0x5EAE1E2,0xAA205CA,0x1E6B1AB6,0x14CC93B,0xCBC4E77,0x171C40F,0x106BC0CE,0x1AC90957,0xDBB807C,0xFA1D81,0x7},{0x6ED06F7,0xFD6E099,0x5332034,0xA2F7B0E,0x480E420,0x6F93CA1,0x1F072DD2,0x129CE524,0x12BF565B,0xA9E6BB7,0x18A2F743,0x165C9E76,0x660400E,0x1},{0x173345CC,0x14CD89C2,0xE42B047,0xEC7C7,0x19B86930,0x177CD006,0x899F573,0x1B315BE0,0x16543346,0x5A2F8A4,0x10D84C51,0x18ECFFC7,0xD6B9514,0x5},{0x2561092,0x1425A94F,0x1FAEFAA5,0x12D130DE,0x1913516F,0xD446753,0xB4A303E,0x115DF9C8,0x77F94FF,0x12462862,0x1D614B07,0x103A067F,0xCCBB674,0x5},{0x1A8F6AA8,0x7C5A4E5,0xC18100,0xB853E9F,0xA5C871A,0xD9B731B,0x18A43964,0x7376C34,0x1D9C6DD0,0xD69488,0x123C0428,0x1D480B7A,0xD2F259E,0x2},{0x18913F55,0x377A45D,0xA6CD78D,0x10BD47AA,0x1D4FBC73,0xC973F53,0x1EED4C21,0xC7C27B0,0x103216F7,0x1ECA5424,0x1AA08165,0xE14DC39,0x7A55CDA,0xB},{0x15535D4A,0x1919ECEA,0x49220DA,0x1FC5EF77,0x19B4852C,0x1A8625F9,0x482AF15,0x1C98D5EB,0x4F9FB0C,0x1E8EBA66,0x686F953,0x6D8C246,0x66C8ED3,0xC},{0x15812ED9,0x7720AD0,0x77B918,0x1EB6010,0x17132B92,0x7E9031A,0x1F5FFACD,0xBDF43E9,0xEE5A437,0x15DD37FB,0xEF377E,0x1C7D4FD4,0xA3EF08B,0xB},{0x126A775C,0x8D09CC8,0x2C7EE4F,0x1538034B,0x51D5F,0x12DE2005,0x3BD774D,0x1F51A19F,0xB5EECFD,0x5674C12,0x10EEA1CD,0x1533B65F,0x6007C08,0xB},{0xAF9B7AC,0x16323BFD,0xA733880,0x71B73BF,0x15A6449F,0xC3DB787,0x20717B3,0x18CAAA1B,0x2B70152,0x1563C18C,0x7EC99BA,0x30DB65B,0xD9E5297,0x4},{0x11A5001D,0x11C8A118,0x14BB7B76,0x162BB81F,0xC916A20,0xD07E4EF,0xEC150BB,0x13E1ED37,0x1CC6D19C,0x17C1146E,0xC033244,0x8BE87C9,0x1E0E0795,0x5},{0x45F5416,0x6936CC2,0xA5EB6A,0x6C9E585,0xAF41727,0x1244F393,0xC3848F6,0x1B7BB79A,0x11D115C5,0x1C4F6DA6,0x1C8348EF,0x131CA72B,0xB7D2887,0xB},{0x1DBF67F2,0x1129C5A9,0x1E5BE247,0xAF9AC6D,0xD2ECA67,0x12EE93CE,0x1CC430D6,0xAAA35CF,0x1778C485,0xB74758A,0x1BEAAB9F,0xC81B44E,0x18DF3306,0x2},{0xE49A03D,0x17B08161,0x14A78D4C,0x84C0EC6,0x1E01F78A,0x1AB7A29,0x16729284,0x1EE6389A,0x1885C84F,0x21E1A45,0x6832F5B,0x702403C,0x162D75C2,0xC},{0x103663C1,0xA3C929D,0x3081B40,0x6D11DEC,0x12E7A07F,0x1195ADF3,0xF9BBB0C,0x1CAF1301,0x9601A6D,0x7D68757,0x14860450,0x15393164,0x112C4C3,0xB}}; - -#endif - -#if HTC_ISO_G2_BLS12381 != 0 -const BIG CURVE_HTPC2= {0xF8492B,0x13B89D4,0x1AA68D1F,0x108A10FD,0x16D9723B,0x1B0EEA65,0x1CD7D27C,0xDC4EA3A,0x149FAD53,0x10F6735,0x4075923,0x180F008F,0x52988B9,0x0}; -const BIG CURVE_Adr= {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Adi= {0xF0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Bdr= {0x3F4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Bdi= {0x3F4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG PCR[13]= {{0xAAA5ED1,0x7155555,0x19C71C62,0x11C71A1E,0x18575709,0x8478A15,0x2A88B58,0x1CFE9D02,0x14CB14B4,0x8FAFDB0,0x1B5B7A9A,0x147199F5,0x11D6541F,0xB},{0x1FFFC71E,0x154FFFFF,0x3555549,0x5555397,0xA418147,0x635A790,0x11FE6882,0x15BEF5C1,0xF984F87,0x16BC3E44,0xC849BF3,0x17553378,0x1560BF17,0x8},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xAAA97D6,0x11C55555,0x1671C718,0xC71C687,0xE15D5C2,0x211E285,0x10AA22D6,0x73FA740,0x532C52D,0x123EBF6C,0xED6DEA6,0x1D1C667D,0x1C759507,0x2},{0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1C718B10,0xD9B8E38,0x1712F678,0x1212F4AD,0x74524E7,0x1BE34D51,0xA1AC3A5,0x6F43C4C,0x10761B0F,0xF1C08D6,0x1EFDC10F,0x16D9EF37,0x4C9AD43,0x9},{0x1FFFC71C,0x154FFFFF,0x3555549,0x5555397,0xA418147,0x635A790,0x11FE6882,0x15BEF5C1,0xF984F87,0x16BC3E44,0xC849BF3,0x17553378,0x1560BF17,0x8},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x11C6D706,0x167E38E3,0x124BDA04,0x184BD7F1,0x1E500FC8,0x1CEC3E93,0x126FD510,0x1A940FEC,0x130F7DA5,0x183B688C,0x16693062,0x15682276,0x130477C7,0xA},{0x12,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1FFFA8FB,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD}}; -const BIG PCI[13]= {{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1FFFE38D,0x1AA7FFFF,0x11AAAAA4,0x12AAA9CB,0x520C0A3,0x31AD3C8,0x18FF3441,0x1ADF7AE0,0x7CC27C3,0x1B5E1F22,0x6424DF9,0x1BAA99BC,0xAB05F8B,0x4},{0x1FFFC71A,0x154FFFFF,0x3555549,0x5555397,0xA418147,0x635A790,0x11FE6882,0x15BEF5C1,0xF984F87,0x16BC3E44,0xC849BF3,0x17553378,0x1560BF17,0x8},{0xAAA97D6,0x11C55555,0x1671C718,0xC71C687,0xE15D5C2,0x211E285,0x10AA22D6,0x73FA740,0x532C52D,0x123EBF6C,0xED6DEA6,0x1D1C667D,0x1C759507,0x2},{0x1FFFAA9F,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x1FFFAA63,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1FFFE38F,0x1AA7FFFF,0x11AAAAA4,0x12AAA9CB,0x520C0A3,0x31AD3C8,0x18FF3441,0x1ADF7AE0,0x7CC27C3,0x1B5E1F22,0x6424DF9,0x1BAA99BC,0xAB05F8B,0x4},{0xAAA97BE,0x11C55555,0x1671C718,0xC71C687,0xE15D5C2,0x211E285,0x10AA22D6,0x73FA740,0x532C52D,0x123EBF6C,0xED6DEA6,0x1D1C667D,0x1C759507,0x2},{0x11C6D706,0x167E38E3,0x124BDA04,0x184BD7F1,0x1E500FC8,0x1CEC3E93,0x126FD510,0x1A940FEC,0x130F7DA5,0x183B688C,0x16693062,0x15682276,0x130477C7,0xA},{0x1FFFAA99,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x1FFFA9D3,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x1FFFA8FB,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD}}; - -#endif - -#endif - -#if CHUNK==64 - -using namespace B384_58; - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 4; -const BIG CURVE_B= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x3FFFFFF00000001L,0x36900BFFF96FFBFL,0x180809A1D80553BL,0x14CA675F520CCE7L,0x73EDA7L,0x0L,0x0L}; -const BIG CURVE_Gx= {0x33AF00ADB22C6BBL,0x17A0FFE5E86BBFEL,0x3A3F171BAC586C5L,0x13E5DD2E4168538L,0x4FA9AC0FC3688CL,0x65F5E509A558E3L,0x17F1D3A73L}; -const BIG CURVE_Gy= {0xAA232946C5E7E1L,0x331D128A222B903L,0x18CB2C04B3EDD03L,0x25757402BD8036CL,0x1741D8AE4FCF5E0L,0xEAA83C68278C3BL,0x8B3F481EL}; -//const BIG CURVE_HTPC= {0x1FB00000001AAAEL,0x313F5FB4FFFFED7L,0x2928BFC912627L,0x1D87D988BA6AF26L,0x2845E1033EFA3BFL,0x25FF9A6633A3655L,0x1A0111EA3L}; -const BIG CURVE_HTPC= {0xC51062BDE821B8L,0x1A5483B9715FEDFL,0x1BDD403FC31088BL,0x3D2523427FC11BBL,0x1A3D71BDA12F01DL,0x2DB2FDD36CE3D2AL,0x1F7462C8L}; - -const BIG CURVE_Bnx= {0x201000000010000L,0x34L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x201000000010001L,0x34L,0x0L,0x0L,0x0L,0x0L,0x0L}; -//const BIG CURVE_Cof= {0xAAAB0000AAABL,0x3230015557855A3L,0x396L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxa= {0x8056C8C121BDB8L,0x300C9AA016EFBF5L,0xB647AE3D1770BAL,0x353E900EC0AD144L,0x32DC51051C6E47AL,0x23C2A449820149L,0x24AA2B2FL}; -const BIG CURVE_Pxb= {0x1AC7D055D042B7EL,0x33C4484E51755F9L,0x21BBDC7F5049334L,0x3426482D86AD769L,0x88274F65596BD0L,0x9C67D81F6B34E8L,0x13E02B605L}; -const BIG CURVE_Pya= {0x193548608B82801L,0x2B2730EEB28A278L,0x1A695160D12C923L,0x2AA32F74E9DB50AL,0x2DA2E351AADFD9BL,0x9F5B8463327371L,0xCE5D5277L}; -const BIG CURVE_Pyb= {0x2A9075FF05F79BEL,0x1C349D73B07686AL,0x12AB572E99AB3F3L,0x1FA169D8EBC99D2L,0x2BC28B99CB3E28L,0x3A9CD330CAB34ACL,0x606C4A02L}; - -#if HTC_ISO_BLS12381 != 0 -const BIG CURVE_Ad= {0xF428082D584C1DL,0xDBE368383E5FD7L,0x181AEFD881AC989L,0x14E0FB99AA363A2L,0x2C96D4982B0EA98L,0xEE3A50CF5A4E80L,0x144698AL}; -const BIG CURVE_Bd= {0x1CC48E98E172BE0L,0xC8568C5B3AA974L,0x14FCEF35EF55A2L,0x3C3C93D01C282E7L,0x753EEE3B2016C1L,0x5A200C0062C4BAL,0x12E2908D1L}; -const BIG PC[53]= {{0x1C8BA2E8BA2D229L,0x2C6E02D934E47EAL,0x3F1BC24C6B68C24L,0x1F88B20DEF08F02L,0x381EDEE3D31D79DL,0x389839C2F47A588L,0x6E08C248L},{0x267DF3F1605FB7BL,0x2DDC7E30A177B32L,0x336003B14866F69L,0x37799E1FE5B542BL,0x1D2565B0DFA7DCCL,0x27381F89CB63B02L,0x10321DA07L},{0x3241067BE390C9EL,0x242CBB700C9DE5FL,0x14BAF4BB1B7FA31L,0x200E83172659D8CL,0x15D138F22DD2ECBL,0x2F3E9F10B830DD4L,0x169B1F8E1L},{0x171986A8497E317L,0xA57CA5ADD3A55BL,0x16C928C5D1DE4FAL,0x1B39E7D55D28B16L,0x163BE990DC43B75L,0x269E3F11EE42CCDL,0x80D3CF1FL},{0xCB5618E3F0C88EL,0x1F23E323D1D6BE7L,0x62EF0F2753339BL,0x2AC9D6D36C69A0BL,0xD1117E53356DE5L,0x6AF6F8BA1D0E21L,0x17B81E770L},{0x1D7F225A139ED84L,0x944A30414BB2B7L,0x2218F9C86B2A8DAL,0x993C3E33864023L,0x38AE652BFB11586L,0x3F9134A5A8DC9B0L,0xD6ED6553L},{0x113C1C66F652983L,0x1C34B72B9CF4673L,0x2B9097E68F90A08L,0x1F76549E66E7B4EL,0x3F7A74AB5DB3CB1L,0x35CC4FFC0744806L,0x1630C3250L},{0x1154CE9AC8895D9L,0x28A1BCC079DF114L,0x2B65982FAC18985L,0x168495FECFC21BBL,0x3E4118E5499DB99L,0x667D10D990AD2CL,0xE99726A3L},{0x1B388641D9B6861L,0x1B89738C41C64F1L,0x3289F1B33083533L,0x195AA36FC97C6CCL,0x307E55412D7F5E4L,0x3F31B6DD3818274L,0x1778E7166L},{0x179F9DAC9EDCB0L,0x30F8F4A825CA7F8L,0x2501EC68E25C958L,0x1CCA5660F95A1E3L,0x1D10A9A1BCE0324L,0x25D9E3B07441231L,0xD54005DBL},{0x34EEF1B3CB83BBL,0x23CA9BCC630D5BAL,0x233C70D1E86B483L,0x16CBDAA105FD597L,0x22147A81C7C17E7L,0x250EACBC1622EACL,0x17294ED3EL},{0x2AC1662734649B7L,0x30B57CB98B5BABL,0x3B56CDB4E2C8561L,0x2228B5C017FC989L,0x1D99815856B303EL,0x3A0CCD02E024407L,0x11A05F2B1L},{0x16384D168ECDD0AL,0x1D392D2DE19400BL,0x133978F31C15931L,0x3BA5BDF40DDDB7DL,0x2B3A56680F682B4L,0x27A4AB511DB5B8FL,0x95FC13ABL},{0x376EC3A79A1D641L,0x99A4AAEE90DC11L,0xDA67F398835038L,0x75C584D9ADD040L,0x1AFC7A3CCE07F8DL,0x36953E097A482CFL,0xA10ECF6AL},{0x1F7D99BBDCC5A5EL,0x16E52274478B4C4L,0x21CDF9822C580FAL,0x3086F29A2A0665BL,0x74CF01996E7F63L,0x3592A2C8C2CFD6CL,0x14A7AC2A9L},{0x2574496EE84A3AL,0xECD4E3C3781B3BL,0x73062AEDE9CEA7L,0x266BD4E862538B8L,0x3E0596721570F57L,0x5A4D8643CF8318L,0x772CAACFL},{0x2DF9A29F6304A5L,0x3492F108A3C470L,0x3CEF24B8982F740L,0x3A73A72B534290EL,0x30506C6E9395735L,0x13999EE554E43DFL,0xE7355F8EL},{0x39D395B3532A21EL,0xA6EA07CD5E0754L,0x4E833B306DA9BDL,0x16684818AEE35ADL,0x343E7A07DFFDFC7L,0x8A452A029BC757L,0x13A8E1620L},{0x30DE8938DC62CD8L,0x1B5490FBB3D7104L,0x28ABC28D6FD0497L,0xFC5AC595455332L,0x37C40EB545B0824L,0x162B8BFB20EABFBL,0x3425581AL},{0xC239BA5CB83E19L,0xF4259F253FB73FL,0xE00B11ACEACD6AL,0x1BD69C63347F299L,0x1BFF2991F6F8941L,0x1E8C897A04DF98AL,0xB2962FE5L},{0x1C8276EC82B3BFFL,0x2AA211B2C09BA79L,0x2588C48BF5713DL,0x32833C20030049BL,0x298E536367041E8L,0x2D56710D22D1C44L,0x12561A5DEL},{0x13CF9FA40D21B1CL,0x235A06F8D0F7E26L,0x8617FC8AC62B55L,0x12E8D6D22EA7256L,0x34BD3FA6F01D5EFL,0x33FC66B862CB98BL,0x8CA8D548L},{0xB456BE69C8B604L,0x1409FBFB0071DC1L,0x14FA95AF01B2B66L,0x23E125968E55EB7L,0x342DF2EB5CB181DL,0x243C0F393A942CEL,0x15E6BE4E9L},{0x26B1E715475224BL,0x4126D95E6BEDE1L,0xF5D396A7CE46BAL,0x2075FA195A366ACL,0x348C4A3FC5E673DL,0x39133C440A8567DL,0x5C129645L},{0x2D9D3F5DB980133L,0x3E42B4708CA9910L,0x232D3C40659CC6CL,0x20353056004F99L,0x27BE315DC757B3BL,0x347B2A6DCBF002BL,0x245A394AL},{0x14C04F00B971EF8L,0x214706464847C83L,0x10E807B4633F06CL,0xA8D09AC23B009CL,0x4F53F447AA7B1L,0x6E4E674554258L,0xB182CAC1L},{0x207C8A4D0074D8EL,0x2737D06D13581B3L,0x3E7F911F643249DL,0x2E2ABC30918B9AFL,0x3FED2EDCC523559L,0x3CDBDB7AE463050L,0x18B46A908L},{0x13711AD011C132L,0x3CE97338FEEBF3AL,0x3E416389E61031BL,0x32DB2BD24FF4460L,0x31D43FB93CD2FCBL,0xDF346F837F42E3L,0x19713E479L},{0x3AFAAEBCA731C30L,0x3DC157753AE9BCAL,0x1E7ED1E4D43B9B3L,0x29E456BDBF81A61L,0x3ADA14A23C42A0CL,0x61AF6D488EAF79L,0xE1BBA7A1L},{0x370E577BDBA587L,0x1948071E181E8D8L,0x2E6A1F20CABE69DL,0x599E7709B07A2DL,0x21E4DA1BB8F3ABDL,0x3659A12FA232788L,0x9FC4018BL},{0x15E4CA31870FB29L,0x191543FB7FA4D68L,0xDA6C26C842642FL,0x2FF8EF7607FF40EL,0x12CA6C674170A05L,0xCEAE1BF7A649AFL,0x987C8D53L},{0x161F8855FE9D6F2L,0x21EB09183D057B2L,0x13C4D634F3747AL,0x328AF86132D48C5L,0x27796B3CE75BB8L,0x3EB06EF2CB25DF4L,0x4AB0B9BCL},{0x1B23AB13633A5F0L,0x3D8C9B256A01CA6L,0x1C3D3AD5544E203L,0x352BEB6DEF5D941L,0x1B8F0A6A074A7D0L,0x18D2DA88847847L,0x16603FCA4L},{0x1B6DAECF2E8FEDBL,0x1FE370264102A10L,0x3FD221351ADC2EEL,0x3EF8F3942E1E60CL,0x2A21529C4195536L,0x3F83FC4D72BD3F8L,0x8CC03FDEL},{0x2355C77B0E5F4CBL,0x16AEA7B1877B29L,0x23EC03251CF9DE4L,0x2E43BADE4702792L,0x2D8746757D42AA7L,0x22607085E261D46L,0x1F86376EL},{0xDFE240C72DE1F6L,0x354858A2C0148EEL,0x3E4B91400DA7D26L,0x359628C738B0D12L,0x6A3B49942552E2L,0x2A59B99BD28E132L,0xCC786BAL},{0x97E75A2E41C696L,0x159C4658BEA2FF8L,0x2343EB67AD34D6CL,0x1B0953CE0F43E41L,0x376FB46831223E9L,0x13B960475440DB5L,0x134996A10L},{0x29845719707BB33L,0x31EBBA6CEE8F0AFL,0x2F6C956543D3CD0L,0x23922A1A548AD4AL,0x14980DCFA11AD13L,0x2E893B8096747C2L,0x90D97C81L},{0x15473A1D634B8FL,0xBD5C3C4D25E011L,0x3CD6356CAA205CAL,0x19789CEE14CC93BL,0x20D7819C171C40FL,0x1B7700F9AC90957L,0xE0FA1D81L},{0x1FADC1326ED06F7L,0x145EF61C5332034L,0xDF27942480E420L,0x2539CA49F072DD2L,0x153CD76F2BF565BL,0x2CB93CED8A2F743L,0x2660400EL},{0x299B138573345CCL,0x1D8F8EE42B047L,0x2EF9A00D9B86930L,0x3662B7C0899F573L,0xB45F1496543346L,0x31D9FF8F0D84C51L,0xAD6B9514L},{0x284B529E2561092L,0x25A261BDFAEFAA5L,0x1A88CEA7913516FL,0x22BBF390B4A303EL,0x248C50C477F94FFL,0x20740CFFD614B07L,0xACCBB674L},{0xF8B49CBA8F6AA8L,0x170A7D3E0C18100L,0x1B36E636A5C871AL,0xE6ED8698A43964L,0x1AD2911D9C6DD0L,0x3A9016F523C0428L,0x4D2F259EL},{0x6EF48BB8913F55L,0x217A8F54A6CD78DL,0x192E7EA7D4FBC73L,0x18F84F61EED4C21L,0x3D94A84903216F7L,0x1C29B873AA08165L,0x167A55CDAL},{0x3233D9D55535D4AL,0x3F8BDEEE49220DAL,0x350C4BF39B4852CL,0x3931ABD6482AF15L,0x3D1D74CC4F9FB0CL,0xDB1848C686F953L,0x1866C8ED3L},{0xEE415A15812ED9L,0x3D6C020077B918L,0xFD206357132B92L,0x17BE87D3F5FFACDL,0x2BBA6FF6EE5A437L,0x38FA9FA80EF377EL,0x16A3EF08BL},{0x11A1399126A775CL,0x2A7006962C7EE4FL,0x25BC400A0051D5FL,0x3EA3433E3BD774DL,0xACE9824B5EECFDL,0x2A676CBF0EEA1CDL,0x166007C08L},{0x2C6477FAAF9B7ACL,0xE36E77EA733880L,0x187B6F0F5A6449FL,0x3195543620717B3L,0x2AC783182B70152L,0x61B6CB67EC99BAL,0x8D9E5297L},{0x239142311A5001DL,0x2C57703F4BB7B76L,0x1A0FC9DEC916A20L,0x27C3DA6EEC150BBL,0x2F8228DDCC6D19CL,0x117D0F92C033244L,0xBE0E0795L},{0xD26D98445F5416L,0xD93CB0A0A5EB6AL,0x2489E726AF41727L,0x36F76F34C3848F6L,0x389EDB4D1D115C5L,0x26394E57C8348EFL,0x16B7D2887L},{0x22538B53DBF67F2L,0x15F358DBE5BE247L,0x25DD279CD2ECA67L,0x15546B9FCC430D6L,0x16E8EB15778C485L,0x1903689DBEAAB9FL,0x58DF3306L},{0x2F6102C2E49A03DL,0x10981D8D4A78D4CL,0x356F453E01F78AL,0x3DCC71356729284L,0x43C348B885C84FL,0xE0480786832F5BL,0x1962D75C2L},{0x1479253B03663C1L,0xDA23BD83081B40L,0x232B5BE72E7A07FL,0x395E2602F9BBB0CL,0xFAD0EAE9601A6DL,0x2A7262C94860450L,0x16112C4C3L}}; -#endif - -#if HTC_ISO_G2_BLS12381 != 0 -const BIG CURVE_HTPC2= {0x27713A80F8492BL,0x211421FBAA68D1FL,0x361DD4CB6D9723BL,0x1B89D475CD7D27CL,0x21ECE6B49FAD53L,0x301E011E4075923L,0x52988B9L}; -const BIG CURVE_Adr= {0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Adi= {0xF0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Bdr= {0x3F4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Bdi= {0x3F4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG PCR[13]= {{0xE2AAAAAAAA5ED1L,0x238E343D9C71C62L,0x108F142B8575709L,0x39FD3A042A88B58L,0x11F5FB614CB14B4L,0x28E333EBB5B7A9AL,0x171D6541FL},{0x2A9FFFFFFFFC71EL,0xAAAA72E3555549L,0xC6B4F20A418147L,0x2B7DEB831FE6882L,0x2D787C88F984F87L,0x2EAA66F0C849BF3L,0x11560BF17L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x238AAAAAAAA97D6L,0x18E38D0F671C718L,0x423C50AE15D5C2L,0xE7F4E810AA22D6L,0x247D7ED8532C52DL,0x3A38CCFAED6DEA6L,0x5C759507L},{0xCL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1B371C71C718B10L,0x2425E95B712F678L,0x37C69AA274524E7L,0xDE87898A1AC3A5L,0x1E3811AD0761B0FL,0x2DB3DE6FEFDC10FL,0x124C9AD43L},{0x2A9FFFFFFFFC71CL,0xAAAA72E3555549L,0xC6B4F20A418147L,0x2B7DEB831FE6882L,0x2D787C88F984F87L,0x2EAA66F0C849BF3L,0x11560BF17L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x2CFC71C71C6D706L,0x3097AFE324BDA04L,0x39D87D27E500FC8L,0x35281FD926FD510L,0x3076D11930F7DA5L,0x2AD044ED6693062L,0x1530477C7L},{0x12L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1FEFFFFFFFFA8FBL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L}}; -const BIG PCI[13]= {{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x354FFFFFFFFE38DL,0x255553971AAAAA4L,0x635A790520C0A3L,0x35BEF5C18FF3441L,0x36BC3E447CC27C3L,0x375533786424DF9L,0x8AB05F8BL},{0x2A9FFFFFFFFC71AL,0xAAAA72E3555549L,0xC6B4F20A418147L,0x2B7DEB831FE6882L,0x2D787C88F984F87L,0x2EAA66F0C849BF3L,0x11560BF17L},{0x238AAAAAAAA97D6L,0x18E38D0F671C718L,0x423C50AE15D5C2L,0xE7F4E810AA22D6L,0x247D7ED8532C52DL,0x3A38CCFAED6DEA6L,0x5C759507L},{0x1FEFFFFFFFFAA9FL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x1FEFFFFFFFFAA63L,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x354FFFFFFFFE38FL,0x255553971AAAAA4L,0x635A790520C0A3L,0x35BEF5C18FF3441L,0x36BC3E447CC27C3L,0x375533786424DF9L,0x8AB05F8BL},{0x238AAAAAAAA97BEL,0x18E38D0F671C718L,0x423C50AE15D5C2L,0xE7F4E810AA22D6L,0x247D7ED8532C52DL,0x3A38CCFAED6DEA6L,0x5C759507L},{0x2CFC71C71C6D706L,0x3097AFE324BDA04L,0x39D87D27E500FC8L,0x35281FD926FD510L,0x3076D11930F7DA5L,0x2AD044ED6693062L,0x1530477C7L},{0x1FEFFFFFFFFAA99L,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x1FEFFFFFFFFA9D3L,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x1FEFFFFFFFFA8FBL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L}}; -#endif - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12383.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12383.cpp deleted file mode 100644 index dcc4a28..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12383.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS12383.h" - -namespace BLS12383 { -/* Curve BLS12383 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -// Base Bits= 29 - -const int CURVE_Cof_I= 0; -const BIG CURVE_Cof= {0x10011FF,0x400000,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -//const BIG CURVE_Cof= {0x15169EAB,0xA82AB0A,0xAAEFFED,0x15558001,0x555,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 15; -const BIG CURVE_B= {0xF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1EBC0001,0x1904CF5F,0x834E5CE,0xBE12B42,0xB381DE0,0xE40B4C,0x270110,0x10018017,0x1002001,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gx= {0x8734573,0x623B9C8,0x1D1DC11E,0xBB7E107,0x1E3445C5,0x1D6C2578,0x10B0BE1E,0xED6103E,0x10F31D9F,0x296ED82,0x18E0D7D0,0x12F3D9C9,0x1FCBA55B,0x20}; -const BIG CURVE_Gy= {0x3F224,0x968B2F4,0x1FE63F48,0xFA93D90,0x14D2DDE5,0x54A56F5,0x12441D4C,0x18CD76C8,0x199D0DAD,0xE18E236,0x92BA73,0x99F6600,0x8F16727,0x3}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x1001200,0x400000,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0xD7F2D86,0x1E59DB1,0x17474F85,0x1FB56CF2,0x572EE81,0xE487AB1,0x96F51FC,0x190A5AAE,0x6432501,0x13E58F3A,0x101E6425,0xFD807D1,0x34D2240,0x3}; -const BIG CURVE_Pxb= {0x452DE15,0x1ECF20F6,0x1FF9837B,0x95651AA,0xD5D75B5,0x5D44749,0x12277F66,0x1DB3A0B9,0x1D24F498,0x19441B0E,0x1CDE9DC5,0x2C975,0xD78006,0x18}; -const BIG CURVE_Pya= {0x1408CB41,0x34785DC,0x3586597,0x13DBC9E4,0x1A2E75B4,0x1D65489,0xCF9A25E,0x1ACE7933,0x1B6E990E,0x19FF31A3,0x12527615,0x1A44A68F,0x1792CF93,0x19}; -const BIG CURVE_Pyb= {0x1F479093,0x16C2321B,0x1889218E,0x87961BC,0x1BC98B01,0x197A24FB,0xA3DEBC2,0x88D67DF,0x1CE0D,0x1E8AD3D7,0x93B9EE9,0x59B18D6,0xE5247DD,0x10}; -#endif - -#if CHUNK==64 - -using namespace B384_58; - -// Base Bits= 58 - -const int CURVE_Cof_I= 0; -const BIG CURVE_Cof= {0x80000010011FFL,0x40L,0x0L,0x0L,0x0L,0x0L,0x0L}; -//const BIG CURVE_Cof= {0x150556155169EABL,0x2AAB0002AAEFFEDL,0x555L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 15; -const BIG CURVE_B= {0xFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x32099EBFEBC0001L,0x17C25684834E5CEL,0x1C81698B381DE0L,0x2003002E0270110L,0x1002001L,0x0L,0x0L}; -const BIG CURVE_Gx= {0xC4773908734573L,0x176FC20FD1DC11EL,0x3AD84AF1E3445C5L,0x1DAC207D0B0BE1EL,0x52DDB050F31D9FL,0x25E7B3938E0D7D0L,0x41FCBA55BL}; -const BIG CURVE_Gy= {0x12D165E8003F224L,0x1F527B21FE63F48L,0xA94ADEB4D2DDE5L,0x319AED912441D4CL,0x1C31C46D99D0DADL,0x133ECC00092BA73L,0x68F16727L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Bnx= {0x8000001001200L,0x40L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxa= {0x3CB3B62D7F2D86L,0x3F6AD9E57474F85L,0x1C90F562572EE81L,0x3214B55C96F51FCL,0x27CB1E746432501L,0x1FB00FA301E6425L,0x634D2240L}; -const BIG CURVE_Pxb= {0x3D9E41EC452DE15L,0x12ACA355FF9837BL,0xBA88E92D5D75B5L,0x3B6741732277F66L,0x3288361DD24F498L,0x592EBCDE9DC5L,0x300D78006L}; -const BIG CURVE_Pya= {0x68F0BB9408CB41L,0x27B793C83586597L,0x3ACA913A2E75B4L,0x359CF266CF9A25EL,0x33FE6347B6E990EL,0x34894D1F2527615L,0x33792CF93L}; -const BIG CURVE_Pyb= {0x2D846437F479093L,0x10F2C379889218EL,0x32F449F7BC98B01L,0x111ACFBEA3DEBC2L,0x3D15A7AE001CE0DL,0xB3631AC93B9EE9L,0x20E5247DDL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12443.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12443.cpp deleted file mode 100644 index 3ad1d29..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12443.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS12443.h" - -namespace BLS12443 { -/* Curve BLS12443 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B448_29; - -// Base Bits= 29 - -const int CURVE_Cof_I= 0; -const BIG CURVE_Cof= {0x11FFFFFF,0x1F800000,0x100FF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 4; -const BIG CURVE_B= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1,0x15E00000,0x8FFFFF,0x330FEE0,0x5A3E808,0x1A0482EE,0x174DC4C0,0x6E9E59B,0x1062F694,0x2F9E86,0x41,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gx= {0x18ABC574,0x13652D93,0xF8A9B4B,0x18DD91D9,0x40BFDDF,0xDEBE0C3,0x1CA5E24A,0x29B37A3,0x9049E88,0x11415BE7,0x1C4F9EAE,0x2569C1B,0x1681E434,0x8BDF6ED,0x19B12D89,0x73}; -const BIG CURVE_Gy= {0x17A9CE3F,0xCA0ABAC,0x710C772,0x120BAD6D,0x900742F,0x3B52AB4,0x1D0A758D,0x13CBE7A7,0x15769DB0,0xC676B97,0x7EF77EB,0x30FC21B,0x43B2B19,0x21C2EEA,0x1887E1D4,0x24}; -const BIG CURVE_HTPC= {0x911B6DF,0xA620224,0x155D68,0xBAE768,0x43A6AA,0xCE9FFD0,0x14EAAC40,0x19772A08,0x10074A9D,0xC451CC1,0xE84AE3C,0xDED8262,0x9680088,0x1A07DE19,0x19648C8F,0x9E}; - -const BIG CURVE_Bnx= {0x12000000,0x1F800000,0x100FF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Pxa= {0x1F3AF148,0x12812AAB,0x11B9D6E1,0x1E9B7A3E,0x4DD695A,0x19843AAA,0x15D8C5C5,0xF509C60,0x139FC8E3,0x1060B671,0x11CFC89D,0x1F708C93,0x2219258,0x167260A8,0x117B1177,0x5}; -const BIG CURVE_Pxb= {0x136279B6,0x27B735D,0xB60056F,0x61C6492,0x19E29515,0x18B4393A,0x9480BCF,0x9596877,0x9BD13DD,0x370B284,0x1FEBABF8,0x12D6CB9C,0x164C9DA2,0x9DA997,0x192E45BB,0x1E}; -const BIG CURVE_Pya= {0x11C0B975,0x1FE07513,0x1C67EDF6,0xE36130E,0x1A91EFB9,0x1AC39A4,0x1316E89E,0x4DC3C2C,0x1122B65B,0x173710A4,0x10067CD2,0x1C58269E,0x1BD2F919,0x16A8822B,0x1A81C011,0x8B}; -const BIG CURVE_Pyb= {0x82464AD,0x1F70FF80,0x3C33C6C,0x10AAF915,0x77B77F,0x3152868,0x1BBD7AD8,0xDADC2F9,0x17218280,0xAECA451,0x103E4E3E,0x1BD9B92,0xB9E9169,0x1F547AC3,0x577AC6,0x68}; - -const BIG CURVE_Ad= {0x98E3466,0x15BE78D9,0x12B6D628,0xD93FCB0,0x1D091D0,0x130C6222,0x14B30AEB,0x13910DCD,0xCA78F64,0xD0F66FC,0xEEC9DEF,0x7F9B01B,0x1760C9FC,0x78FCB94,0x1A839D35,0x33}; -const BIG CURVE_Bd= {0x10F780D9,0xE65C309,0x1D294680,0x1AB4F80F,0x101A1BB2,0xD28DB7E,0x9192026,0x1C25665C,0x14D2890A,0xE458245,0x14A22C11,0x963FDB1,0x8F5BAD7,0x19106B58,0x146889DA,0x53}; -const BIG PC[53]= {{0x3F34E48,0x651745D,0xE259428,0x1383ECF5,0x7BA3300,0x27D38ED,0x1D7FF700,0x9431A4,0x1689CD1,0x545B0E1,0x187C27A6,0x1969C0B2,0xA0C6C03,0x1BF55844,0xA442AE5,0x1E},{0x604D319,0x6D5B3BB,0x1FC7CA7A,0x1C6674A9,0x4CBF065,0x35A66CF,0x159ADD2C,0x1B552927,0x19CC61F8,0x9D5A2C5,0xC0A549B,0x1F40B1BF,0x10CB5BAC,0xFCEF9F5,0x1F238FE7,0x7B},{0x1EA1F60A,0x1A99A439,0x1F84EA1B,0xA936DD8,0x4E25589,0xEA2C846,0x1DE6DCE9,0x1AE6724D,0x191243E0,0x10C3978C,0x134B2B37,0x1BDC07A,0x8D2C8E0,0x7A49BE0,0x14F4B45A,0xA7},{0x17499741,0x260A801,0x7616D51,0x17AEAADD,0x521E193,0x5A429A4,0x1BD4909C,0x19D689BE,0x138A814D,0x101764AE,0xE5495FD,0xD6862F8,0x6EABD3B,0x139CBE79,0x102FAAE0,0x1E},{0x8A9B7DD,0xBC06177,0xE848FDB,0x17FA150F,0x56E9B75,0x1820A4D3,0x5A69ED,0x7B1B04A,0x1B5A80FB,0x17F1C270,0x8B8B6E,0x1CDB6D31,0xD4D2E33,0x1EAB98E9,0x18FD46B7,0x4F},{0x41C4477,0x170C7C9E,0x1A7CEED7,0x104562CB,0x151713B8,0xDE756B,0x100E4CFE,0x1FAAEA0A,0x16BAE1F3,0x1D349BB5,0xC6D2950,0x18311C0F,0x39A42E2,0x182C5CBC,0x4853E91,0x25},{0x10815090,0x2323376,0x20A1BDB,0x5508EE7,0x5B59C38,0xA0AFD37,0x165A6095,0x19B7465E,0x6474F,0x15D05C5C,0x1F4B70EF,0xFDBD849,0x6F8D806,0x1AEA48A0,0xC688DC,0x4E},{0x1500BAD1,0x11B8B8DE,0x169485E4,0x9CBB577,0x18400475,0x1CF76B6C,0xF9C2EC0,0xC5678B7,0x60B689F,0x14149AEA,0x1904CD6D,0x19952882,0x169C5E37,0xDBAA643,0x1C756EAA,0x9E},{0x1E8081C0,0x4410E14,0xAC7DCFD,0x1621F086,0x135547E8,0x199A0DEF,0xB5938FC,0x1B1450DE,0x5AFD544,0x79F9A9F,0x199ED81F,0x17543471,0x126B077C,0x1CE6BCD,0x1DF891D0,0x2B},{0x17226171,0x1C950142,0x16E104BB,0xE1B0949,0x92190E6,0x3F99D6,0x354C7D3,0xF8472E3,0x118257FE,0x1F5B17E4,0x16FD305B,0x1EBF4465,0x63A6551,0x115C8EEB,0xEE9A889,0xA2},{0x7A91954,0x9CA1080,0x12A3E384,0x112E1137,0x18E69E7C,0x1CB385BF,0x10F0213C,0x1AB981F5,0xD5D73EC,0x1172365C,0x1E0EB929,0xB0CA35E,0xE794D69,0x6BF5788,0x73D5885,0x94},{0x192801A5,0x81AFAC5,0x15B7E81,0x1BA422EB,0x39F6E89,0x2A238D6,0x1A3E1907,0x9488AB6,0x7933000,0x1F9A227A,0x1ABA3F3A,0x12DD9604,0x1BB10A18,0xC5456C7,0xD84DE,0x8},{0xF9D1C0A,0x92C9E14,0xD40ECC4,0x1CA779A4,0x14378709,0x7F8AF5E,0x1400B55D,0x9A45554,0x2C03381,0x6B22956,0x1606538F,0x14ED05D5,0x77F1CED,0xCA45FB0,0x1858F2A3,0x96},{0x1F0A734C,0x14ABBA56,0x62122B9,0x149E1F5E,0x11502173,0x194DC7FF,0xCB2DB28,0x1497703A,0x1BF898CF,0x1A9F7152,0x133A7119,0x1EE3FFE6,0x1D9A176F,0xEB09FF5,0x18EC7E61,0x95},{0x11F37A8D,0x137B967F,0x7ED1992,0x112A56C,0xB74C59C,0xF981054,0x1B16179D,0x6FDEA23,0x7CFCEF8,0x170947AC,0x165FEEB3,0x17304126,0x4045C68,0x1EAC0CF1,0x16C0476,0x26},{0x1124740B,0x56CC8D1,0x11A7A71A,0x374C848,0x8B0336B,0x828068D,0x17B3591B,0x12F676CC,0xC2A2446,0x8945941,0x79445E2,0x1FD486BC,0x1D89A7C5,0xCC0BCD2,0x150AFD2,0x6E},{0xD27D311,0x175A4D55,0x68B0D25,0x89656E1,0x18EEF0CC,0x1ECB7F5C,0x141F2E5,0x1FC71B9D,0xB3FF9ED,0x1816DAFB,0x124875C,0x8ECB03B,0x152F5A8E,0xE62A638,0x944C294,0x8F},{0x1F1FC577,0x171D678,0xAE5DEF,0x1033B90B,0x82CAB80,0x558A914,0x1CF59E4B,0x12019535,0x171CE7C8,0xACC9CB1,0x16CD1D1E,0x1C4BE058,0x1BE1ACDC,0xC595284,0x1342A963,0x5F},{0x9150A48,0x12B944D7,0x1D088301,0x118D6111,0xD0F4583,0x1A41F59C,0x5E0D400,0x12013D5F,0x1235B458,0x1DC12203,0xC5391FA,0x14E54599,0xDCCF56C,0x17E1395E,0x770FA99,0x87},{0x1357D628,0x1311EF7C,0x178C48D1,0x1AF751CF,0xDB9E8BF,0xE02049C,0x14F36DA6,0x1FC80D93,0x11A703B0,0x7B2DF3A,0x11F7AF4E,0x6E20944,0x169657CA,0x12D90851,0xCB4DFB2,0x72},{0x117D6EEC,0x111FF17D,0xDCAAB9E,0xF57E6E9,0x877F70,0x1615F8C3,0x15089BD8,0x8C6A10B,0x768CC8C,0xD87AB83,0x1AC4BCA5,0x192138F5,0xEC4C227,0xBB626C5,0x1EAD484,0x59},{0x180B7137,0x17C45952,0xF72FD01,0x14038FD8,0x1BC6906,0x1D30FF2A,0x272EF9D,0x3DDAEBC,0xEF123C2,0x36325B3,0xE4BD355,0x1CA82937,0x11E3AE9B,0x1F3E2015,0x10AA89CD,0x4A},{0x5BEFD8,0x1AC19637,0xCEC24BD,0x1BF4B873,0x39C9045,0x60B6244,0x113A2DBA,0x5DEED3D,0x5F23CCD,0x7AB2FD,0x1C6860B2,0x24F6E9B,0x1B1866E9,0x1CB93691,0x1834BE14,0x2},{0xACA5AD9,0xCDA044,0x1F06B705,0x60D70E0,0x16099A07,0x6B0FFD7,0xA3D226B,0x3BDE7A2,0x76F4EC5,0x1B842F45,0x3EC2206,0x1673113C,0x7E552D3,0x18F5183E,0x1CF7F587,0x97},{0x12C72185,0x141B8D52,0x14B678E2,0x1D6934AB,0x17932E98,0x16339B40,0x1590A131,0x17E6E0AE,0x1943949D,0x1D0E5D2D,0xD2A9510,0x15EB21C4,0x1D89CD87,0xFE5601A,0x11A001F4,0x5F},{0xEFEE0EA,0x1F50A4DD,0x111B4E23,0x19E8C81C,0x5EDC2C3,0x126703FF,0x13C16387,0x12147E91,0xD63425F,0xCF00CF7,0x47A627C,0x5E7D6B1,0xEE08F4E,0x1766140F,0xBB95F5F,0x96},{0x16887410,0x1FA80776,0x93C0854,0x1EA20D2,0x1CBCC511,0x179B0F85,0x5396256,0x8D385B5,0x19CDF1BA,0x18ECD9E9,0xF80B760,0x1072505E,0x5BD4CB5,0x22FBE14,0x1EA80B78,0x7B},{0xDD0AA9,0x1F70909A,0xD5597D7,0x101CE2A8,0x617757C,0xDEEDA0C,0x11EA1972,0x114E055,0xF76A90,0x1A95E01E,0x15379DEC,0x175A609C,0x14C8FDB9,0x115156DE,0xCBF4809,0x96},{0x1E428BFD,0x16F21A08,0x3ADF604,0x82249C5,0x1CB7A3FA,0x1E570ACB,0x1EB4B47B,0xECB355A,0x84B430D,0x1BBAA20E,0x1C8EF513,0x115C7B9F,0x1D5EB53A,0x122DD3FB,0x17BB0101,0x50},{0x12540F1F,0x13939806,0x18268D14,0x1FBD962B,0xB448310,0xEF54811,0x23A248,0x162322C2,0x3AF19BB,0x13AB6F20,0x179673B2,0x1B141CDA,0x40D00EE,0x1B1F7AD8,0x9046568,0xA4},{0x1545BF96,0x11613F77,0x1925835E,0x14B70DE1,0x14CA0A0A,0x17FB7979,0x43DDB1A,0xA1AFFB6,0x5E74A2D,0x1DA600F1,0x4D0C711,0x9107354,0x2A96CA7,0x7460C2C,0x4772C30,0x9C},{0xC96D5DE,0x11B3C719,0x12C44E72,0x62A8455,0xB3522DF,0x1722392D,0x17C4C84A,0xC5B08EF,0x1C73E4E8,0x184F76C5,0x1BE85639,0x4178224,0x5F1ADAC,0x1004293E,0x14020923,0x6C},{0x1A433825,0xF576BC3,0x159F38EF,0x1A9CD3BC,0x5854D83,0x1C7BD842,0x113DF3CB,0x195CCF87,0xF553CAE,0x4937DAE,0x12924884,0x15F7F1B0,0x18EBD637,0x1A325E15,0x1CE00B35,0x33},{0xF92004C,0x960B5AD,0x16377D4C,0x6B9BC92,0x1B008FFB,0x1235B5EB,0x1CCD413F,0x15FF451A,0x22BBD23,0x18E7FA12,0x15789412,0x1407F3AD,0xE34E149,0x1DD9EF60,0x85B4C28,0xA1},{0x93FF538,0x7AA0B71,0x3D2CEB3,0x61BCB1E,0xACC622E,0x1A3767DE,0x61F027B,0x185CDCB1,0x13E6A1E9,0xE361803,0x1880218F,0x62895FE,0x14B2BBFE,0xD240288,0x1C1FC271,0x13},{0x1B349B02,0xB53E37C,0x1ED9EA61,0x5AB2858,0xB67832E,0x2AA71F7,0xDB9D08F,0xC73B305,0x73FA5E7,0x13B8B1BB,0x55FF6BB,0x85C4222,0x1CE8EB95,0xFFD7A2F,0xE35B9C2,0x7B},{0x1E8BF419,0x58C0D7E,0x1E8CB5A2,0x73EC57B,0x1BA6872,0x8468C61,0x188BEA65,0x1816C6AF,0x13946FCA,0x1CAB443C,0x1A0B0CBE,0x133FAF0E,0x1DFEAF70,0x81B1972,0x7C15DCD,0x2F},{0x15EA6770,0x153E7411,0x194A07B0,0x3DE3153,0x1B272CD3,0x1457211A,0xBBE8481,0x124FDB0F,0x1D9F0AB1,0x1C1A31DD,0x1C1A7078,0xE0FBD4B,0x4C2F512,0x1E9AA0A2,0xD77577F,0x9D},{0x6C0FF64,0xDED97C9,0x1ABFB826,0x10A18BCB,0xA2E9E97,0x2F2BF0C,0x1BE37B6,0x15083D61,0x1F0EAD50,0x1285E151,0xE8C9A5,0xAACDD1C,0x21BAABC,0x12A1AB54,0xDF074C8,0x33},{0x1AD61CD4,0x15B2A8D2,0xE89EDBC,0x1FC8A43B,0x1B234A16,0x56FF55F,0x4434214,0x19A164DF,0x6FD7D0B,0x1F59707F,0x4024A6B,0x3C55387,0xB3B4937,0xC2440D9,0x151CFAE4,0x25},{0x13196AB7,0x1C4BE1B9,0x12338A3D,0x43704AC,0x5D1A5BF,0x1B56BCC6,0x907C135,0x111C7910,0x3E32A73,0xBF1FC0B,0xE4F0527,0x5083EC8,0x17B28B9,0x6268B6,0x55F070B,0x39},{0xA64A98B,0x1F4F594,0x1090DE8C,0x1CCB6B44,0x1BDBE18A,0x1915B90,0x1837267C,0x13AA0893,0x9E2045F,0x140227B2,0x151C8D7,0x1CF5C8F1,0x16B1A688,0x1E328319,0x174847C4,0x29},{0x23F15E0,0x20AE21E,0x2250855,0x13008AB4,0x73F6DF,0x111C5B0C,0x159AF9C6,0xB7FE152,0x79DF96D,0x9C80D6,0x8824E75,0xEA4AE30,0xD1ACD04,0x186AA2D2,0x1089D613,0x3F},{0xDEEFD29,0xE27AD26,0x1D3C7648,0x114BFF08,0x1E99583F,0x117A1E0B,0xBEB066D,0x888DA10,0x3FCD8,0x452C56F,0x1151FB02,0x1BBC16F2,0x5BDE13E,0xF9C061A,0x5F0DF6F,0x4A},{0xC6AA7A5,0xB730285,0x16623E6B,0x11428639,0xE16EF5A,0xB3CA060,0xD95CDD3,0xCD03F43,0xCC34C0E,0x1E6D50EB,0x1454A80,0x1DDE2C91,0x18D93981,0x1F2FBD71,0xD51A6B7,0x52},{0x8B3D97C,0x93E33A9,0xE5BECEC,0x1B419BCC,0x19948005,0x17561899,0xAB43192,0x62F209E,0x72E20EB,0x1404250C,0x1DE0C492,0x3B72CA1,0x10C7D312,0x1AC39F4F,0xCC2FE92,0x24},{0x17E5B5CD,0xAC10F48,0x4D24A06,0x13D52E8B,0x3CAC1AD,0x9AFA89C,0x15A904CE,0x1973387C,0xE4F654D,0x6BDE920,0x2894302,0x115601A7,0x6F09153,0x6D61B04,0xC0C09D6,0x2F},{0x20CBB48,0x1CD36C35,0x1D1ECCAD,0xA4A2E64,0x6410B48,0x1F0178A6,0x140D5A2A,0xBC9E98D,0x25196AD,0x1D674AE6,0x17968F26,0x170DF7C0,0x14FA6C21,0x11136ABF,0x16E9371E,0x84},{0x120E7325,0x2081D06,0x1178C70E,0x18029A79,0x1D1A3656,0x8BD4833,0x678C01,0x1FFEA081,0x1E52B15F,0x6DB1DE3,0x1312FB85,0xCF17DA,0xD42415A,0xE097FC3,0x14AF9D8F,0x91},{0x3BCD51F,0x1252FE3F,0x1CFC6139,0x865D2A9,0x351F9EE,0x94E9CD5,0x16A17578,0x1D1A2E67,0x18D6D662,0x15C773CC,0x15DFD11A,0xC186191,0x261488A,0x14F3BFC3,0x13D7B4DA,0x58},{0x1F460AFF,0xEBF619A,0x21112D1,0x6519E28,0x16301DF6,0x122DCCC,0x199520F0,0x18B93BAA,0x1066120A,0xAB20E15,0x153840C7,0x1553B357,0x65990C8,0x1480086C,0x70D3E2F,0x16},{0x188381C1,0x61392FE,0x106D2339,0x1FF56EA5,0x2C827C6,0x1542A2B,0x102CF503,0x25FD7D8,0x8F93EAA,0xA554551,0xEC5FC64,0x18684127,0x71BE49B,0xAD4A921,0x2AA5579,0x11},{0x20F40C4,0xE3CE918,0xEF3E41,0x6819DB7,0xA3F7AA3,0x1704BF3,0x1FC1BE3A,0x1D2E30CC,0x1D39A6D9,0x1340E096,0xDBC8405,0x5CE2E57,0x117283E0,0x1F8CF7E8,0x95C44F4,0xA7}}; -const BIG CURVE_HTPC2= {0x152C1DFF,0x99DA487,0x18C185A2,0x6546AF3,0x144EC7F8,0xEF3797,0x1994DD57,0x179C04E7,0x57CDB0F,0x2585126,0x49E8583,0xCA412D5,0x6BFAFF3,0x14C442E4,0xBD9A0,0x1B}; -const BIG CURVE_Adr= {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Adi= {0xF0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Bdr= {0x3F4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Bdi= {0x3F4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG PCR[13]= {{0xB425ED1,0xA84BDA1,0x81DED55,0x1E8897B4,0x73D0AA2,0x1D575C73,0x3B6AF6,0xBF03B37,0x19D6C70F,0x14E85262,0x3AB4A64,0x1D1426CB,0x12C9C7B1,0x121291F5,0x967F827,0x9B},{0x71C71E,0x1FE38E39,0x61671FF,0x6E671C7,0xD6DC7FA,0x6018556,0x82C9039,0x10F42C69,0x361154B,0xFAE3DCA,0xAC077CB,0xDCF1D18,0x61755C5,0x158DED78,0xF0DFA1D,0x74},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xAD097D6,0xAA12F68,0x2077B55,0x17A225ED,0x19CF42A8,0x1755D71C,0x180EDABD,0x1AFC0ECD,0x1675B1C3,0x53A1498,0x18EAD299,0xF4509B2,0xCB271EC,0x1C84A47D,0x1A59FE09,0x26},{0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xEDD3C0D,0x18BA7819,0x8CB1671,0x6694F03,0x1A8220DB,0x1A73F97C,0x1D95B3E0,0x14EEEAD0,0xBFE0250,0x16A65940,0xBF99097,0xCD5D4B1,0x1AFEDAB,0x63EC8CA,0x785F780,0xA8},{0x1038E38F,0x1FF1C71C,0x130B38FF,0x37338E3,0x6B6E3FD,0x1300C2AB,0x1416481C,0x187A1634,0x1B08AA5,0x17D71EE5,0x5603BE5,0x16E78E8C,0x30BAAE2,0x1AC6F6BC,0x786FD0E,0x3A},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x974F017,0x369E065,0x17C758C7,0x1A983C0C,0xD9A7F86,0x1EC90DEE,0x18E4681,0x1770E36A,0xC3296E,0x4094EF4,0x1F84274B,0x5334FD7,0xB56B4B5,0x7FC768B,0x1A58F87B,0x94},{0x12,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x10AAA8FB,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE}}; -const BIG PCI[13]= {{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1038E38D,0x1FF1C71C,0x130B38FF,0x37338E3,0x6B6E3FD,0x1300C2AB,0x1416481C,0x187A1634,0x1B08AA5,0x17D71EE5,0x5603BE5,0x16E78E8C,0x30BAAE2,0x1AC6F6BC,0x786FD0E,0x3A},{0x71C71A,0x1FE38E39,0x61671FF,0x6E671C7,0xD6DC7FA,0x6018556,0x82C9039,0x10F42C69,0x361154B,0xFAE3DCA,0xAC077CB,0xDCF1D18,0x61755C5,0x158DED78,0xF0DFA1D,0x74},{0xAD097D6,0xAA12F68,0x2077B55,0x17A225ED,0x19CF42A8,0x1755D71C,0x180EDABD,0x1AFC0ECD,0x1675B1C3,0x53A1498,0x18EAD299,0xF4509B2,0xCB271EC,0x1C84A47D,0x1A59FE09,0x26},{0x10AAAA9F,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE},{0x10AAAA63,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x71C71C,0x1FE38E39,0x61671FF,0x6E671C7,0xD6DC7FA,0x6018556,0x82C9039,0x10F42C69,0x361154B,0xFAE3DCA,0xAC077CB,0xDCF1D18,0x61755C5,0x158DED78,0xF0DFA1D,0x74},{0x5DA12ED,0x153425ED,0x171A2FAA,0x12B784BD,0x1A55694E,0x1AC70E4,0x433FD98,0xE7233D0,0xE9BEE2D,0x24B4816,0x1735E118,0x1571A1F1,0x1C708EBB,0x13D03FB6,0x1C3AF922,0x87},{0x974F017,0x369E065,0x17C758C7,0x1A983C0C,0xD9A7F86,0x1EC90DEE,0x18E4681,0x1770E36A,0xC3296E,0x4094EF4,0x1F84274B,0x5334FD7,0xB56B4B5,0x7FC768B,0x1A58F87B,0x94},{0x10AAAA99,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE},{0x10AAA9D3,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE},{0x10AAA8FB,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE}}; -#endif - -#if CHUNK==64 - -using namespace B448_60; - -// Base Bits= 60 - -const int CURVE_Cof_I= 0; -const BIG CURVE_Cof= {0xFF0000011FFFFFFL,0x403FL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 4; -const BIG CURVE_B= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xEBC000000000001L,0x81987F70023FFFFL,0x340905DC5A3E80L,0x94374F2CDDD3713L,0x10405F3D0D062F6L,0x0L,0x0L,0x0L}; -const BIG CURVE_Gx= {0xE6CA5B278ABC574L,0xFC6EC8ECBE2A6D2L,0x29BD7C18640BFDDL,0x8814D9BD1F29789L,0xABA282B7CE9049EL,0x43412B4E0DF13E7L,0xB62517BEDDB681EL,0x39E6C4L}; -const BIG CURVE_Gy= {0x994157597A9CE3FL,0xF905D6B69C431DCL,0x3476A5568900742L,0xB09E5F3D3F429D6L,0xFAD8CED72F5769DL,0xB19187E10D9FBDDL,0x87504385DD443B2L,0x12621FL}; -const BIG CURVE_HTPC= {0x14C40448911B6DFL,0xA05D73B4005575AL,0x19D3FFA0043A6AL,0x9DCBB950453AAB1L,0x8F188A39830074AL,0x886F6C1313A12BL,0x323F40FBC329680L,0x4F6592L}; - -const BIG CURVE_Bnx= {0xFF0000012000000L,0x403FL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Pxa= {0x65025557F3AF148L,0xAF4DBD1F46E75B8L,0x1730875544DD695L,0xE37A84E30576317L,0x2760C16CE339FC8L,0x258FB84649C73F2L,0x45DECE4C1502219L,0x2C5ECL}; -const BIG CURVE_Pxb= {0xC4F6E6BB36279B6L,0x530E32492D8015BL,0x3F16872759E2951L,0xDD4ACB43BA5202FL,0xFE06E165089BD13L,0xDA296B65CE7FAEAL,0x16EC13B532F64C9L,0xF64B9L}; -const BIG CURVE_Pya= {0xBFC0EA271C0B975L,0x971B0987719FB7DL,0x783587349A91EFBL,0x5B26E1E164C5BA2L,0x34AE6E2149122B6L,0x919E2C134F4019FL,0x46D510457BD2FL,0x45EA07L}; -const BIG CURVE_Pyb= {0x3EE1FF0082464ADL,0xF8557C8A8F0CF1BL,0x6062A50D0077B77L,0x806D6E17CEEF5EBL,0x8F95D948A372182L,0x1690DECDC940F93L,0xEB1BEA8F586B9E9L,0x34015DL}; - -const BIG CURVE_Ad= {0x2B7CF1B298E3466L,0x6C9FE584ADB58AL,0xAE618C4441D091DL,0x649C886E6D2CC2BL,0x7BDA1ECDF8CA78FL,0x9FC3FCD80DBBB27L,0x74D4F1F9729760CL,0x19EA0EL}; -const BIG CURVE_Bd= {0x1CCB86130F780D9L,0x2D5A7C07F4A51A0L,0x99A51B6FD01A1BBL,0xAE12B32E246480L,0x45C8B048B4D289L,0xAD74B1FED8D288BL,0x276B220D6B08F5BL,0x29D1A2L}; -const BIG PC[53]= {{0xCA2E8BA3F34E48L,0x9C1F67AB89650AL,0x4FA71DA7BA330L,0xD104A18D275FFDCL,0xE98A8B61C21689CL,0xC03CB4E05961F09L,0xAB977EAB088A0C6L,0xF2910L},{0x8DAB6776604D319L,0x5E333A54FF1F29EL,0xB06B4CD9E4CBF06L,0xF8DAA9493D66B74L,0x26D3AB458B9CC61L,0xBACFA058DFB0295L,0x3F9DF9DF3EB0CB5L,0x3DFC8EL},{0xF5334873EA1F60AL,0x9549B6EC7E13A86L,0xA5D45908C4E2558L,0xE0D733926F79B73L,0xCDE1872F1991243L,0x8E00DEE03D4D2CAL,0xD168F4937C08D2CL,0x53D3D2L},{0x44C150037499741L,0x3BD7556E9D85B54L,0x70B485348521E19L,0x4DCEB44DF6F5242L,0x7F602EC95D38A81L,0xD3B6B4317C39525L,0xAB827397CF26EABL,0xF40BEL},{0xD780C2EE8A9B7DDL,0x5BFD0A87BA123F6L,0xB704149A656E9B7L,0xFB3D8D8250169A7L,0xDBAFE384E1B5A80L,0xE33E6DB698822E2L,0x1ADFD5731D2D4D2L,0x27E3F5L},{0xEE18F93C41C4477L,0x8822B165E9F3BB5L,0xF81BCEAD751713BL,0xF3FD57505403933L,0x543A69376B6BAE1L,0x2E2C188E07B1B4AL,0xFA47058B97839A4L,0x129214L},{0xC46466ED0815090L,0x82A8477388286F6L,0x55415FA6E5B59C3L,0x4FCDBA32F596982L,0x3BEBA0B8B800647L,0x8067EDEC24FD2DCL,0x23735D491406F8DL,0x27031AL},{0x237171BD500BAD1L,0x54E5DABBDA52179L,0x39EED6D9840047L,0x9F62B3C5BBE70BBL,0x5B682935D460B68L,0xE37CCA944164133L,0xBAA9B754C8769C5L,0x4F71D5L},{0x48821C29E8081C0L,0x8B10F8432B1F73FL,0xF33341BDF35547EL,0x44D8A286F2D64E3L,0x7CF3F353E5AFD5L,0x77CBAA1A38E67B6L,0x474039CD79B26B0L,0x15F7E2L},{0xF92A02857226171L,0x670D84A4DB8412EL,0x4C07F33AC92190EL,0xFE7C239718D531FL,0x16FEB62FC918257L,0x551F5FA232DBF4CL,0xA2262B91DD663A6L,0x513BA6L},{0x139421007A91954L,0xC897089BCA8F8E1L,0xF39670B7F8E69E7L,0xECD5CC0FAC3C084L,0x4A62E46CB8D5D73L,0xD6958651AF783AEL,0x6214D7EAF10E794L,0x4A1CF5L},{0x5035F58B92801A5L,0x9DD21175856DFA0L,0x1C54471AC39F6E8L,0x4A4455B68F864L,0xCEBF3444F479330L,0xA1896ECB026AE8FL,0x13798A8AD8FBB10L,0x40036L},{0x12593C28F9D1C0AL,0x9E53BCD23503B31L,0x74FF15EBD437870L,0x814D22AAA5002D5L,0xE3CD6452AC2C033L,0xCEDA7682EAD8194L,0xCA8D948BF6077F1L,0x4B6163L},{0x695774ADF0A734CL,0x3A4F0FAF18848AEL,0xA329B8FFF150217L,0xCFA4BB81D32CB6CL,0x46753EE2A5BF898L,0x76FF71FFF34CE9CL,0xF985D613FEBD9A1L,0x4AE3B1L},{0xA6F72CFF1F37A8DL,0xC08952B61FB4664L,0x75F3020A8B74C59L,0xF837EF511EC585EL,0xACEE128F587CFCEL,0xC68B982093597FBL,0x11DBD5819E24045L,0x1305B0L},{0x8AD991A3124740BL,0xB1BA6424469E9C6L,0x6D0500D1A8B0336L,0x4697B3B665ECD64L,0x789128B282C2A24L,0x7C5FEA435E1E511L,0xBF4998179A5D89AL,0x370542L},{0x6EB49AAAD27D311L,0xC44B2B709A2C349L,0x97D96FEB98EEF0CL,0xEDFE38DCE8507CBL,0xD7302DB5F6B3FF9L,0xA8E476581D84921L,0xA51CC54C7152F5L,0x47A513L},{0xC2E3ACF1F1FC577L,0x819DC8582B977BL,0x2CAB1522882CAB8L,0xC8900CA9AF3D679L,0x479599396371CE7L,0xCDCE25F02C5B347L,0xA58D8B2A509BE1AL,0x2FCD0AL},{0x657289AE9150A48L,0x38C6B088F4220C0L,0x3483EB38D0F458L,0x589009EAF978350L,0x7EBB824407235B4L,0x56CA72A2CCB14E4L,0xEA66FC272BCDCCFL,0x439DC3L},{0x6623DEF9357D628L,0xFD7BA8E7DE31234L,0x99C040938DB9E8BL,0xB0FE406C9D3CDB6L,0xD38F65BE751A703L,0x7CA37104A247DEBL,0x7ECA5B210A36965L,0x3932D3L},{0xA23FE2FB17D6EECL,0x7ABF374B72AAE7L,0x62C2BF1860877F7L,0x8C4635085D4226FL,0x295B0F5706768CCL,0x227C909C7AEB12FL,0x521176C4D8AEC4CL,0x2C87ABL},{0x6F88B2A580B7137L,0x6A01C7EC3DCBF40L,0x77A61FE541BC690L,0xC21EED75E09CBBEL,0xD546C64B66EF123L,0xE9BE54149BB92F4L,0x2737E7C402B1E3AL,0x2542AAL},{0x75832C6E05BEFD8L,0x5DFA5C39B3B092FL,0xE8C16C48839C904L,0xCD2EF769EC4E8B6L,0x2C80F565FA5F23CL,0x6E9127B74DF1A18L,0xF8539726D23B186L,0x160D2L},{0x419B4088ACA5AD9L,0x7306B8707C1ADC1L,0xACD61FFAF6099A0L,0xC51DEF3D128F489L,0x81B7085E8A76F4EL,0x2D3B39889E0FB08L,0xD61F1EA307C7E55L,0x4BF3DFL},{0xA8371AA52C72185L,0x8EB49A55D2D9E38L,0xC6C6736817932E9L,0x9DBF37057564284L,0x443A1CBA5B94394L,0xD87AF590E234AA5L,0x7D1FCAC035D89CL,0x2FC680L},{0xFEA149BAEFEE0EAL,0x3CF4640E446D388L,0x1E4CE07FE5EDC2CL,0x5F90A3F48CF058EL,0x9F19E019EED6342L,0xF4E2F3EB5891E98L,0x7D7EECC281EEE08L,0x4B2EE5L},{0x3F500EED6887410L,0x10F5106924F0215L,0x5AF361F0BCBCC51L,0xBA469C2DA94E589L,0xD831D9B3D39CDF1L,0xCB5839282F3E02DL,0x2DE045F7C285BD4L,0x3DFAA0L},{0xFEE121340DD0AA9L,0xC80E715435565F5L,0xC9BDDB418617757L,0x9008A702AC7A865L,0x7B352BC03C0F76AL,0xDB9BAD304E54DE7L,0x20262A2ADBD4C8FL,0x4B32FDL},{0x2DE43411E428BFDL,0xA41124E28EB7D81L,0xEFCAE1597CB7A3FL,0xD7659AAD7AD2D1L,0x44F775441C84B43L,0x53A8AE3DCFF23BDL,0x40645BA7F7D5EBL,0x285EECL},{0x2727300D2540F1FL,0xFDECB15E09A345L,0x21DEA9022B44831L,0xBBB119161008E89L,0xECA756DE403AF19L,0xEED8A0E6D5E59CL,0x95A363EF5B040D0L,0x522411L},{0xA2C27EEF545BF96L,0xAA5B86F0E4960D7L,0x6AFF6F2F34CA0A0L,0x2D50D7FDB10F76CL,0xC47B4C01E25E74AL,0xCA748839AA13431L,0xB0C0E8C18582A96L,0x4E11DCL},{0xA3678E32C96D5DEL,0xF315422ACB1139CL,0x2AE44725AB3522DL,0xE862D8477DF1321L,0x8E709EED8BC73E4L,0xDAC20BC1126FA15L,0x248E008527C5F1AL,0x365008L},{0xDEAED787A433825L,0x3D4E69DE567CE3BL,0x2F8F7B0845854D8L,0xAECAE67C3C4F7CFL,0x210926FB5CF553CL,0x637AFBF8D84A492L,0x2CD7464BC2B8EBDL,0x19F380L},{0x12C16B5AF92004CL,0xB35CDE4958DDF53L,0xFE46B6BD7B008FFL,0x23AFFA28D733504L,0x4B1CFF42422BBDL,0x149A03F9D6D5E25L,0x30A3BB3DEC0E34EL,0x50A16DL},{0xCF5416E293FF538L,0xE30DE58F0F4B3ACL,0xEF46ECFBCACC622L,0xE9C2E6E58987C09L,0x63DC6C30073E6A1L,0xBFE3144AFF62008L,0x9C5A4805114B2BL,0x9F07FL},{0x56A7C6F9B349B02L,0xE2D5942C7B67A98L,0x3C554E3EEB67832L,0xE7639D982B6E742L,0xAEE771637673FA5L,0xB9542E2111157FDL,0xE709FFAF45FCE8EL,0x3DB8D6L},{0x8B181AFDE8BF419L,0x239F62BDFA32D68L,0x9508D18C21BA687L,0xCAC0B6357E22FA9L,0x2FB95688793946FL,0xF7099FD787682C3L,0x773503632E5DFEAL,0x179F05L},{0x2A7CE8235EA6770L,0x31EF18A9E5281ECL,0x68AE4235B272CDL,0xB1927ED87AEFA12L,0x1E383463BBD9F0AL,0x512707DEA5F069CL,0x5DFFD3541444C2FL,0x4EB5DDL},{0x9BDB2F926C0FF64L,0x7850C5E5EAFEE09L,0xD85E57E18A2E9E9L,0x50A841EB086F8DEL,0x69650BC2A3F0EADL,0xABC5566E8E03A32L,0xD32254356A821BAL,0x19B7C1L},{0x2B6551A5AD61CD4L,0x6FE4521DBA27B6FL,0x50ADFEABFB234A1L,0xBCD0B26F910D08L,0x9AFEB2E0FE6FD7DL,0x9371E2A9C390092L,0xEB9184881B2B3B4L,0x12D473L},{0x7897C3733196AB7L,0xF21B825648CE28FL,0xD76AD798C5D1A5BL,0x7388E3C88241F04L,0x49D7E3F8163E32AL,0x8B92841F64393C1L,0x1C2C0C4D16C17B2L,0x1C957CL},{0x3E9EB28A64A98BL,0xAE65B5A242437A3L,0xF0322B721BDBE18L,0x5F9D50449E0DC99L,0x35E8044F649E204L,0x688E7AE47885472L,0x1F13C6506336B1AL,0x14DD21L},{0x4415C43C23F15E0L,0xF980455A0894215L,0x1A238B618073F6DL,0x6D5BFF0A9566BE7L,0x9D413901AC79DF9L,0xD04752571822093L,0x584F0D545A4D1ACL,0x1FC227L},{0x1C4F5A4CDEEFD29L,0xF8A5FF8474F1D92L,0xB62F43C17E99583L,0xD84446D082FAC19L,0xC088A58ADE003FCL,0x13EDDE0B794547EL,0x7DBDF380C345BDEL,0x2517C3L},{0xD6E6050AC6AA7A5L,0xA8A1431CD988F9AL,0x4D67940C0E16EF5L,0xE6681FA1B65737L,0xA03CDAA1D6CC34CL,0x981EEF164885152L,0x9ADFE5F7AE38D93L,0x293546L},{0x127C67528B3D97CL,0x5DA0CDE6396FB3BL,0x4AEAC3133994800L,0xEB317904F2AD0C6L,0x24A8084A1872E20L,0x3121DB9650F7831L,0xFA4B5873E9F0C7DL,0x12330BL},{0x95821E917E5B5CDL,0xD9EA97459349281L,0x3935F51383CAC1AL,0x4DCB99C3E56A413L,0xC08D7BD240E4F65L,0x1538AB00D38A250L,0x2758DAC36086F09L,0x17B030L},{0x79A6D86A20CBB48L,0x85251732747B32BL,0xABE02F14C6410B4L,0xAD5E4F4C6D03568L,0xC9BACE95CC25196L,0xC21B86FBE05E5A3L,0xDC7A226D57F4FA6L,0x425BA4L},{0x84103A0D20E7325L,0x6C014D3CC5E31C3L,0x517A9067D1A365L,0x5FFFF5040819E30L,0xE14DB63BC7E52B1L,0x15A0678BED4C4BEL,0x763DC12FF86D424L,0x48D2BEL},{0x64A5FC7E3BCD51FL,0xE432E954F3F184EL,0xE129D39AA351F9EL,0x62E8D1733DA85D5L,0x46AB8EE7998D6D6L,0x88A60C30C8D77F4L,0xD36A9E77F862614L,0x2C4F5EL},{0x5D7EC335F460AFFL,0x6328CF1408444B4L,0xC0245B9996301DFL,0xAC5C9DD5665483L,0x31D5641C2B06612L,0xC8AA9D9ABD4E10L,0xF8BE90010D86599L,0xB1C34L},{0x4C2725FD88381C1L,0x6FFAB752C1B48CEL,0xC2A854562C827CL,0xAA12FEBEC40B3D4L,0x1914AA8AA28F93EL,0x49BC342093BB17FL,0x55E55A9524271BEL,0x88AA9L},{0x5C79D23020F40C4L,0x3340CEDB83BCF90L,0xE82E097E6A3F7AAL,0xD9E9718667F06F8L,0x16681C12DD39A6L,0x3E02E7172BB6F21L,0x13D3F19EFD11728L,0x53A571L}}; -const BIG CURVE_HTPC2= {0x933B490F52C1DFFL,0x832A3579E306168L,0x5C1DE6F2F44EC7FL,0xFBCE0273E65375L,0x60C4B0A24C57CDBL,0xFF3652096A927A1L,0x668298885C86BFAL,0xD802FL}; -const BIG CURVE_Adr= {0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Adi= {0xF0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Bdr= {0x3F4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Bdi= {0x3F4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG PCR[13]= {{0x55097B42B425ED1L,0x2F444BDA2077B55L,0xDBAAEB8E673D0AAL,0xF5F81D9B80EDABL,0x9929D0A4C59D6C7L,0x7B1E8A13658EAD2L,0xE09E42523EB2C9CL,0x4DA59FL},{0xFFC71C72071C71EL,0xA37338E39859C7FL,0xE4C030AACD6DC7FL,0x4B87A1634A0B240L,0xF2DF5C7B9436115L,0x5C56E78E8C2B01DL,0xE876B1BDAF06175L,0x3A3C37L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x55425ED0AD097D6L,0x8BD112F6881DED5L,0xF6EABAE399CF42AL,0xC3D7E0766E03B6AL,0xA64A742931675B1L,0x1EC7A284D963AB4L,0xF82790948FACB27L,0x136967L},{0xCL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x7174F032EDD3C0DL,0xB334A781A32C59CL,0x834E7F2F9A8220DL,0x50A7775687656CFL,0x25ED4CB280BFE02L,0xDAB66AEA58AFE64L,0xDE00C7D91941AFEL,0x541E17L},{0xFFE38E39038E38FL,0xD1B99C71CC2CE3FL,0x7260185566B6E3FL,0xA5C3D0B1A505920L,0xF96FAE3DCA1B08AL,0xAE2B73C7461580EL,0xF43B58DED7830BAL,0x1D1E1BL},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xC6D3C0CA974F017L,0x6D4C1E065F1D631L,0x7D921BDCD9A7F8L,0x6EBB871B506391AL,0xD2C8129DE80C329L,0x4B5299A7EBFE109L,0xE1ECFF8ED16B56BL,0x4A6963L},{0x12L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFAAAAAB0AAA8FBL,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L}}; -const BIG PCI[13]= {{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFE38E39038E38DL,0xD1B99C71CC2CE3FL,0x7260185566B6E3FL,0xA5C3D0B1A505920L,0xF96FAE3DCA1B08AL,0xAE2B73C7461580EL,0xF43B58DED7830BAL,0x1D1E1BL},{0xFFC71C72071C71AL,0xA37338E39859C7FL,0xE4C030AACD6DC7FL,0x4B87A1634A0B240L,0xF2DF5C7B9436115L,0x5C56E78E8C2B01DL,0xE876B1BDAF06175L,0x3A3C37L},{0x55425ED0AD097D6L,0x8BD112F6881DED5L,0xF6EABAE399CF42AL,0xC3D7E0766E03B6AL,0xA64A742931675B1L,0x1EC7A284D963AB4L,0xF82790948FACB27L,0x136967L},{0xFFAAAAAB0AAAA9FL,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L},{0xFFAAAAAB0AAAA63L,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFC71C72071C71CL,0xA37338E39859C7FL,0xE4C030AACD6DC7FL,0x4B87A1634A0B240L,0xF2DF5C7B9436115L,0x5C56E78E8C2B01DL,0xE876B1BDAF06175L,0x3A3C37L},{0xAA684BDA5DA12EDL,0xE95BC25EDC68BEAL,0x60358E1C9A55694L,0x2D73919E810CFF6L,0x460496902CE9BEEL,0xEBBAB8D0F8DCD78L,0xE48A7A07F6DC708L,0x43F0EBL},{0xC6D3C0CA974F017L,0x6D4C1E065F1D631L,0x7D921BDCD9A7F8L,0x6EBB871B506391AL,0xD2C8129DE80C329L,0x4B5299A7EBFE109L,0xE1ECFF8ED16B56BL,0x4A6963L},{0xFFAAAAAB0AAAA99L,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L},{0xFFAAAAAB0AAA9D3L,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L},{0xFFAAAAAB0AAA8FBL,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L}}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12461.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12461.cpp deleted file mode 100644 index f16bf58..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS12461.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS12461.h" - -namespace BLS12461 { -/* Curve BLS12461 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B464_28; - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 9; -const BIG CURVE_B= {0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1,0x0,0xFFFFC00,0x7FEFFFE,0x110000,0x7FFC800,0x801FC01,0x5FD000E,0x17FE0,0xFFFC018,0xFFFFFF7,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gx= {0xADEE93D,0x4D026A8,0x74B7411,0xD9C00EE,0x31AC7F2,0xC3981B5,0x9218229,0xD3564DC,0xA096650,0x6F7C292,0x9743616,0xBE922B1,0x12CF668,0xC81327,0x463B73A,0xE74E99B,0xAD0}; -const BIG CURVE_Gy= {0xAD1D465,0xF763157,0xC4FF470,0x17884C8,0xB8D215D,0xA819E66,0xF4959D0,0xE5C3245,0xB84910A,0xB8BFA40,0xBE96EEC,0x8BF9F8C,0xF277ACC,0x5F1C3F2,0x5F68C9,0xCDB14B3,0x77B}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x0,0xFBFFFE0,0x1FFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0xFBFFFE0,0x1FFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -//const BIG CURVE_Cof= {0xAAAAAAB,0xA7FFFEA,0x1556AA,0xD55AAAB,0x554FFFF,0x1555,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - - -const BIG CURVE_Pxa= {0x6D0A37C,0x5B50318,0x75DCC46,0xC2E492E,0xD6878A9,0xE01F919,0xF92F564,0x86DB74F,0x66803F0,0x46D581A,0x7ED78D,0x2F97C29,0xC270C89,0xF679453,0x6A50A9A,0x54138A0,0x10CC}; -const BIG CURVE_Pxb= {0x2C1C0AD,0xF85CA8C,0x25CADE9,0x6CD66C4,0xA289609,0xC612951,0xEE2401A,0x529ABEB,0xF65B17D,0xBA09D33,0xD4C5AF5,0x4D4371E,0x46A672E,0xA279D22,0xACEA37C,0x1FB4FE5,0x95C}; -const BIG CURVE_Pya= {0x2FB006,0xCCD0C1B,0xA12A337,0x3D194A4,0xC92C895,0x4960CFC,0x39FC68B,0x3A9B00F,0xED1BA0F,0xA7DBBC5,0xA9CDFD8,0x27CC2F7,0x4E73ED2,0x6070F4F,0xEBA7E67,0xAC848E7,0x226}; -const BIG CURVE_Pyb= {0xDF1457C,0xA506ADF,0x4C20A8,0xD6A31DC,0x36E3FB4,0xEA9A8F1,0x92F5668,0x3C3BE44,0x67A1297,0x74BEABA,0x56A20BE,0x4C42E38,0x45157F0,0x2AB1D00,0xBB402EA,0x101B4FA,0xE38}; - -#endif - -#if CHUNK==64 - -using namespace B464_60; - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 9; -const BIG CURVE_B= {0x9L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x1L,0x7FEFFFEFFFFC0L,0xC017FFC80001100L,0x7FE05FD000E801FL,0xFFFF7FFFC018001L,0xFFL,0x0L,0x0L}; -const BIG CURVE_Gx= {0x14D026A8ADEE93DL,0xF2D9C00EE74B741L,0x229C3981B531AC7L,0x6650D3564DC9218L,0x436166F7C292A09L,0x2CF668BE922B197L,0x463B73A0C813271L,0xAD0E74E99BL}; -const BIG CURVE_Gy= {0xF763157AD1D465L,0x5D17884C8C4FF47L,0x9D0A819E66B8D21L,0x910AE5C3245F495L,0x96EECB8BFA40B84L,0x277ACC8BF9F8CBEL,0x5F68C95F1C3F2FL,0x77BCDB14B3L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0xFFBFFFE00000000L,0x1FFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0xFFBFFFE00000001L,0x1FFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -//const BIG CURVE_Cof= {0xAA7FFFEAAAAAAABL,0xFFD55AAAB01556AL,0x1555554FFL,0x0L,0x0L,0x0L,0x0L,0x0L}; - - -const BIG CURVE_Pxa= {0x65B503186D0A37CL,0xA9C2E492E75DCC4L,0x564E01F919D6878L,0x3F086DB74FF92FL,0xED78D46D581A668L,0x270C892F97C2907L,0x6A50A9AF679453CL,0x10CC54138A0L}; -const BIG CURVE_Pxb= {0x9F85CA8C2C1C0ADL,0x96CD66C425CADEL,0x1AC612951A2896L,0xB17D529ABEBEE24L,0xC5AF5BA09D33F65L,0x6A672E4D4371ED4L,0xACEA37CA279D224L,0x95C1FB4FE5L}; -const BIG CURVE_Pya= {0x7CCD0C1B02FB006L,0x953D194A4A12A33L,0x68B4960CFCC92C8L,0xBA0F3A9B00F39FCL,0xCDFD8A7DBBC5ED1L,0xE73ED227CC2F7A9L,0xEBA7E676070F4F4L,0x226AC848E7L}; -const BIG CURVE_Pyb= {0x8A506ADFDF1457CL,0xB4D6A31DC04C20AL,0x668EA9A8F136E3FL,0x12973C3BE4492F5L,0xA20BE74BEABA67AL,0x5157F04C42E3856L,0xBB402EA2AB1D004L,0xE38101B4FAL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS24479.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS24479.cpp deleted file mode 100644 index dac4cb1..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS24479.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS24479.h" - -namespace BLS24479 { -/* Curve BLS24479 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B480_29; - -// Base Bits= 29 - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 19; -const BIG CURVE_B= {0x13,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x10000001,0xD047FF,0x1FD54464,0x1E3CE067,0xE322DDA,0x1D356F3F,0x7433B44,0x49091F9,0x1729CC2,0x250286C,0x16E62ED,0xB403E1E,0x1001000,0x80,0x0,0x0,0x0}; -const BIG CURVE_Gx= {0xBE3CCD4,0x33B07AF,0x1B67D159,0x3DFC5B5,0xEBA1FCC,0x1A3C1F84,0x56BE204,0xEF8DF1B,0x11AE2D84,0x5FEE546,0x161B3BF9,0x183B20EE,0x1EA5D99B,0x14F0C5BF,0xBE521B7,0x17C682F9,0x1AB2}; -const BIG CURVE_Gy= {0x121E5245,0x65D2E56,0x11577DB1,0x16DACC11,0x14F39746,0x459F694,0x12483FCF,0xC828B04,0xFD63E5A,0x7B1D52,0xAFDE738,0xF349254,0x1A4529FF,0x10E53353,0xF91DEE1,0x16E18D8A,0x47FC}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x11FF80,0x80010,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x11FF7F,0x80010,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -//const BIG CURVE_Cof= {0x19F415AB,0x1E0FFDFF,0x15AAADFF,0xAA,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxaa= {0x14E24678,0x1F149A9B,0x9609022,0x1C186868,0xCDEFC69,0x1C87BB2E,0x14A2235F,0x7586755,0x5896747,0x159BFE92,0x3B5572E,0x1710A521,0x71EB14A,0xC643C33,0x12581DE5,0x1BCA747D,0x959}; -const BIG CURVE_Pxab= {0x1FB099B8,0x3FCF5D7,0x4A91C0E,0xC6EEB40,0x11FC2385,0x11B5AE8D,0x1A9CC3E7,0x194FE144,0x185DB2A5,0x930E1C7,0x14F85F9A,0x1F2ED4E,0x1D1BE5AD,0xF26169C,0xCF7F194,0x1DA1062E,0x3B0D}; -const BIG CURVE_Pxba= {0x11AD15D3,0xD0E6F38,0x17DB85BB,0x30A62F1,0x1EA3E09A,0x17B25FA1,0x1B7959AC,0x1165B19A,0x6C74FDB,0x18F790E1,0x12278FDA,0x1E008F79,0x103F329,0x14619FF1,0x1EBCAA8,0xFF5A9CA,0x3EC2}; -const BIG CURVE_Pxbb= {0x1EE0F480,0x3D5943A,0xF5B12E3,0x128AADC8,0x180E1CB9,0x1EFD916F,0x48BC7F,0x1D5EE1FA,0x5698EF5,0x11D6AED9,0x1386BC6E,0x196E900B,0x1CE2E465,0xC2A8ED3,0x1E67DF99,0x71B7940,0xA5B}; -const BIG CURVE_Pyaa= {0x14781AA0,0xC324C98,0xEDC2AC,0x16C13B46,0x145FC44B,0x12529530,0x1310A8C4,0x1768C5C0,0xE19AE68,0x56E1C1D,0x13DAF93F,0x17E94366,0xF901AD0,0x76800CC,0x10250D8B,0x1E6BAE6D,0x5057}; -const BIG CURVE_Pyab= {0xEAE08FA,0xDDF62BF,0xA97E5AB,0xF0EE97,0x99A42CA,0x1C326578,0xF33DC11,0x8B913F7,0xFEF8552,0x19F35B90,0x58DDBDE,0xFC32FF2,0x1587B5DF,0xB5EB07A,0x1A258DE0,0x1692CC3D,0x2CE2}; -const BIG CURVE_Pyba= {0x5F0CC41,0xB9813B5,0x14C2A87D,0xFF1264A,0x19AF8A14,0x6CE6C3,0x2A7F8A2,0x121DCA7D,0x7D37153,0x19D21078,0x15466DC7,0x1362982B,0x1DD3CB5B,0x1CFC0D1C,0x18C69AF8,0x8CC7DC,0x1807}; -const BIG CURVE_Pybb= {0x115C1CAE,0x78D9732,0x16C26237,0x5A81A6A,0x1C38A777,0x56121FE,0x4DAD9D7,0x1BEBA670,0xA1D72FC,0xD60B274,0x19734258,0x1D621775,0x4691771,0x14206B68,0x17B22DE4,0x29D5B37,0x499D}; - - -#endif - -#if CHUNK==64 - -using namespace B480_56; - -// Base Bits= 56 - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 19; -const BIG CURVE_B= {0x13L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x1A08FFF0000001L,0x1E7033FF551190L,0x6ADE7EE322DDAFL,0x848FC9D0CED13AL,0x50D81729CC224L,0x1F0F05B98BB44AL,0x10010010005A0L,0x0L,0x0L}; -const BIG CURVE_Gx= {0x6760F5EBE3CCD4L,0xEFE2DAED9F4564L,0x783F08EBA1FCC1L,0xC6F8D95AF88134L,0xDCA8D1AE2D8477L,0x9077586CEFE4BFL,0x8B7FEA5D99BC1DL,0x17CAF9486DE9E1L,0x1AB2BE34L}; -const BIG CURVE_Gy= {0xCBA5CAD21E5245L,0x6D6608C55DF6C4L,0xB3ED294F39746BL,0x145824920FF3C8L,0x63AA4FD63E5A64L,0x492A2BF79CE00FL,0x66A7A4529FF79AL,0x6C53E477B861CAL,0x47FCB70CL}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0x100020011FF80L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x100020011FF7FL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -//const BIG CURVE_Cof= {0xC1FFBFF9F415ABL,0x5556AAB7FFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxaa= {0xE2935374E24678L,0xC34342582408BL,0xF765CCDEFC69EL,0xC33AAD2888D7F9L,0x7FD2458967473AL,0x52908ED55CBAB3L,0x786671EB14AB88L,0xA3EC96077958C8L,0x959DE53L}; -const BIG CURVE_Pxab= {0x7F9EBAFFB099B8L,0x3775A012A47038L,0x6B5D1B1FC23856L,0x7F0A26A730F9E3L,0x1C38F85DB2A5CAL,0x76A753E17E6926L,0x2D39D1BE5AD0F9L,0x31733DFC651E4CL,0x3B0DED08L}; -const BIG CURVE_Pxba= {0xA1CDE711AD15D3L,0x853178DF6E16EDL,0x64BF43EA3E09A1L,0x2D8CD6DE566B2FL,0xF21C26C74FDB8BL,0x47BCC89E3F6B1EL,0x3FE2103F329F00L,0x4E507AF2AA28C3L,0x3EC27FADL}; -const BIG CURVE_Pxbb= {0x7AB2875EE0F480L,0x4556E43D6C4B8CL,0xFB22DF80E1CB99L,0xF70FD0122F1FFDL,0xD5DB25698EF5EAL,0x4805CE1AF1BA3AL,0x1DA7CE2E465CB7L,0xCA0799F7E65855L,0xA5B38DBL}; -const BIG CURVE_Pyaa= {0x86499314781AA0L,0x609DA303B70AB1L,0xA52A6145FC44BBL,0x462E04C42A3124L,0xC383AE19AE68BBL,0xA1B34F6BE4FCADL,0x198F901AD0BF4L,0x736C094362CED0L,0x5057F35DL}; -const BIG CURVE_Pyab= {0xBBEC57EEAE08FAL,0x78774BAA5F96ADL,0x64CAF099A42CA0L,0xC89FBBCCF70478L,0x6B720FEF855245L,0x97F916376F7B3EL,0x60F5587B5DF7E1L,0x61EE89637816BDL,0x2CE2B496L}; -const BIG CURVE_Pyba= {0x730276A5F0CC41L,0xF89325530AA1F5L,0xD9CD879AF8A147L,0xEE53E8A9FE2880L,0x420F07D3715390L,0x4C15D519B71F3AL,0x1A39DD3CB5B9B1L,0x3EE631A6BE39F8L,0x18070466L}; -const BIG CURVE_Pybb= {0xF1B2E6515C1CAEL,0xD40D355B0988DCL,0xC243FDC38A7772L,0x5D338136B675CAL,0x164E8A1D72FCDFL,0xBBAE5CD0961ACL,0xD6D04691771EB1L,0xD9BDEC8B792840L,0x499D14EAL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48286.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48286.cpp deleted file mode 100644 index b7cff1d..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48286.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS48286.h" - -namespace BLS48286 { -/* Curve BLS48286 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B288_29; - -// Base Bits= 29 - -const int CURVE_Cof_I= 62958; -const BIG CURVE_Cof= {0xF5EE,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 10; -const BIG CURVE_B= {0xA,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1D612C81,0x1E208D97,0x1CA5C07F,0x11E51045,0x1E4FE229,0x13154A7D,0x127B79AC,0x1602A6BF,0x86BC9E,0x0}; -const BIG CURVE_Gx= {0x95D59E0,0x44BF518,0x1BEE8577,0x1B2E8EB9,0xE84D19D,0xA23A0D2,0x103C1301,0x111F68ED,0x13D120DB,0x34B921}; -const BIG CURVE_Gy= {0x10ABEB43,0x177B4FCB,0x38F8BB,0x6F9CD6B,0x1B0AC1F2,0x1846F729,0x1E5E6A8C,0x5AF112F,0xA1E656E,0x101C720}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0xF5EF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Pxaaa= {0x56106B5,0x20B1A4C,0x113303FA,0x187639D9,0x1D9F51AC,0xA96D657,0x132BADEA,0x1A544F60,0x531C71,0x11567EA}; -const BIG CURVE_Pxaab= {0x96D1A55,0xF668DEC,0xE2476A7,0x4EE30AA,0x1EF56B94,0x5192C97,0x121CF932,0x14B1A4A1,0x196B5C85,0xC6DDCC}; -const BIG CURVE_Pxaba= {0x7D7A35E,0x408D1D3,0x1162980E,0x1F5E9D19,0x12AF41C9,0xCD2835A,0x17875370,0x62F5C57,0x15DE0A7C,0x541496}; -const BIG CURVE_Pxabb= {0x2F023E8,0x14742906,0xCF4B428,0x3236B9E,0x1B62D89F,0x192E7AEF,0x1E4BA079,0x19B17763,0x155FAC94,0x1015F06}; -const BIG CURVE_Pxbaa= {0xF14CB9B,0x5CC6ADC,0x18955362,0x142FAC5F,0x11B96A21,0x18F7B6AA,0x96591F1,0xC5096A4,0x9A1E3F7,0xBA939B}; -const BIG CURVE_Pxbab= {0xB60DD54,0x1FB59436,0x1C68910E,0x10A65726,0x6BE9C0B,0x1C6AA6BF,0x14DD8358,0x1E68D885,0x85E9D59,0x880F52}; -const BIG CURVE_Pxbba= {0x19D776DA,0x1052D855,0x844D7E8,0xCAE4EC2,0x4ADABAA,0x120A2C5F,0x192AB537,0x3F9DEC1,0xE261FE4,0x7B037E}; -const BIG CURVE_Pxbbb= {0x8B50A8E,0x19FF11C1,0x18273AD7,0xEAA9DE4,0x1EC9A57,0x1670C91D,0x300009C,0xACD8A2D,0x6920D19,0xF85987}; -const BIG CURVE_Pyaaa= {0x7E988BE,0x1366AFEB,0x5E2F3B8,0x1FCBDF1D,0x114E8B31,0x1CD92A27,0x1A53FC0,0xAAF8FE7,0xDA962CD,0x10F87C6}; -const BIG CURVE_Pyaab= {0xDF11B92,0x1BC2B368,0x1AF17821,0x6663003,0xDB40CB8,0x20094F8,0x1856186E,0x1528744B,0x1EC6FED7,0x700E0F}; -const BIG CURVE_Pyaba= {0xBFDD06A,0x3E7D33D,0x13F96495,0x179B5611,0x12EB8E64,0xD7054C6,0xD7BFC95,0x145B3D76,0x18C3D6BE,0x9607FD}; -const BIG CURVE_Pyabb= {0x188A47F4,0x19EEFE9B,0x41ACCA2,0x12BF346C,0x11F157D1,0x19429C28,0x14D4ACD2,0x743BB7B,0x55BDFFF,0xAB418F}; -const BIG CURVE_Pybaa= {0x5E39E77,0x1B76DB9A,0x54E3132,0x190321FF,0x5119324,0x123E6F79,0x1064FB7D,0x1D69EBDE,0xAA01884,0x39C720}; -const BIG CURVE_Pybab= {0x164975C6,0x194140A1,0xA2302C0,0x1C495B39,0x613723B,0xB4D86D7,0x1A6F8686,0x7238A06,0x6896E24,0x9B2C3B}; -const BIG CURVE_Pybba= {0x1BF2D7C,0x1E99CD5E,0xEA89102,0xE27DE36,0x13837F1B,0xA2D04CE,0x23E06D8,0x18BDC695,0x175143C9,0xFD8541}; -const BIG CURVE_Pybbb= {0x51130A6,0x154D068F,0x18954F6A,0x173CE106,0x7C687EE,0xD23B3B5,0xB58CC3B,0x1342EEF6,0xDC6AC9E,0xC9F9BC}; - - -#endif - -#if CHUNK==64 - -using namespace B288_60; - -// Base Bits= 60 - -const int CURVE_Cof_I= 62958; -const BIG CURVE_Cof= {0xF5EEL,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 10; -const BIG CURVE_B= {0xAL,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xFC411B2FD612C81L,0x98F28822F29701FL,0xB262A94FBE4FE22L,0x9EB01535FC9EDE6L,0x86BCL}; -const BIG CURVE_Gx= {0xC897EA3095D59E0L,0xDD97475CEFBA15DL,0x544741A4E84D19L,0xDB88FB476C0F04CL,0x6972433D120L}; -const BIG CURVE_Gy= {0xEEF69F970ABEB43L,0x237CE6B580E3E2EL,0x3308DEE53B0AC1FL,0x6E2D78897F979AAL,0x2038E40A1E65L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0xF5EFL,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Pxaaa= {0x8416349856106B5L,0xCC3B1CECC4CC0FEL,0xA952DACAFD9F51AL,0x71D2A27B04CAEB7L,0x22ACFD40531CL}; -const BIG CURVE_Pxaab= {0xDECD1BD896D1A55L,0x427718553891DA9L,0xC8A32592FEF56B9L,0x85A58D250C873E4L,0x18DBB9996B5CL}; -const BIG CURVE_Pxaba= {0x8811A3A67D7A35EL,0x9FAF4E8CC58A603L,0xC19A506B52AF41CL,0x7C317AE2BDE1D4DL,0xA8292D5DE0AL}; -const BIG CURVE_Pxabb= {0x28E8520C2F023E8L,0xF191B5CF33D2D0AL,0xE725CF5DFB62D89L,0x94CD8BBB1F92E81L,0x202BE0D55FACL}; -const BIG CURVE_Pxbaa= {0x8B98D5B8F14CB9BL,0x1A17D62FE2554D8L,0xC71EF6D551B96A2L,0xF76284B52259647L,0x17527369A1E3L}; -const BIG CURVE_Pxbab= {0xBF6B286CB60DD54L,0xB8532B9371A2443L,0x638D54D7E6BE9C0L,0x59F346C42D3760DL,0x1101EA485E9DL}; -const BIG CURVE_Pxbba= {0x20A5B0AB9D776DAL,0xA657276121135FAL,0xDE41458BE4ADABAL,0xE41FCEF60E4AAD4L,0xF606FCE261FL}; -const BIG CURVE_Pxbbb= {0xF3FE23828B50A8EL,0x77554EF2609CEB5L,0x72CE1923A1EC9A5L,0x19566C5168C0002L,0x1F0B30E6920DL}; -const BIG CURVE_Pyaaa= {0x26CD5FD67E988BEL,0x1FE5EF8E978BCEEL,0x39B2544F14E8B3L,0xCD557C7F38694FFL,0x21F0F8CDA962L}; -const BIG CURVE_Pyaab= {0x778566D0DF11B92L,0x83331801EBC5E08L,0xB840129F0DB40CBL,0xD7A943A25E15861L,0xE01C1FEC6FEL}; -const BIG CURVE_Pyaba= {0x47CFA67ABFDD06AL,0x4BCDAB08CFE5925L,0x55AE0A98D2EB8E6L,0xBEA2D9EBB35EFF2L,0x12C0FFB8C3D6L}; -const BIG CURVE_Pyabb= {0xB3DDFD3788A47F4L,0x195F9A36106B328L,0x4B28538511F157DL,0xFF3A1DDBDD352B3L,0x156831E55BDFL}; -const BIG CURVE_Pybaa= {0xB6EDB7345E39E77L,0x4C8190FF9538C4CL,0xF647CDEF2511932L,0x84EB4F5EF4193EDL,0x738E40AA018L}; -const BIG CURVE_Pybab= {0x3282814364975C6L,0xBE24AD9CA88C0B0L,0x1969B0DAE613723L,0x24391C50369BE1AL,0x13658766896EL}; -const BIG CURVE_Pybba= {0xBD339ABC1BF2D7CL,0xB713EF1B3AA2440L,0x6145A099D3837F1L,0xC9C5EE34A88F81BL,0x1FB0A8375143L}; -const BIG CURVE_Pybbb= {0xAA9A0D1E51130A6L,0xEB9E708362553DAL,0xEDA47676A7C687EL,0x9E9A1777B2D6330L,0x193F378DC6ACL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48556.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48556.cpp deleted file mode 100644 index efce0cb..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48556.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS48556.h" - -namespace BLS48556 { -/* Curve BLS48556 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B560_29; - -// Base Bits= 29 - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 17; -const BIG CURVE_B= {0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1,0x17FFF800,0xA769C21,0x8AA813C,0x2029C21,0xA68F58B,0xB6307F4,0x1184DA51,0x6DFED78,0x1A3C85E9,0x571037B,0x1637F1F9,0x1C465FB0,0x98354B9,0x118DF17A,0x1422355D,0x43BF73E,0x6,0x0,0x0}; -const BIG CURVE_Gx= {0x5D71D33,0x1943697B,0x18CB783F,0x1B00AA9F,0x1711EE0B,0x7F80B23,0x129FD8CC,0x1345E03F,0x9A80F66,0x7038173,0xC056511,0x142801F5,0x42B2C3A,0x1AF09869,0x7924166,0x8381264,0x957EDD7,0xBACAEDC,0xA27A4A1,0x13}; -const BIG CURVE_Gy= {0xA6ED83A,0x14D2D9FF,0xA29C33D,0x1B8972A9,0x6958677,0x19C8F547,0x1DED7E3E,0x14F9E3DC,0x18FB7229,0x27171C0,0x1551E32D,0xE6184CC,0x6260E3C,0x733D204,0x579C437,0x1534665C,0x2B3349D,0x3162FD7,0xB634253,0x1}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x1DE40020,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1DE4001F,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -//const BIG CURVE_Cof= {0x1F12ABEB,0x516887B,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxaaa= {0x923CE4A,0x14697474,0xAE04F4A,0x17AE205A,0x1313A20C,0x10B2EC50,0x18DF074F,0x15FE3FE8,0x7C90B98,0x959BF85,0xE57BD37,0x14376C96,0xBF57375,0xE20B625,0x12EE2172,0x1CBBCE85,0x1A5D9487,0xD0E024B,0x195E3602,0x1C}; -const BIG CURVE_Pxaab= {0xC0A1BE1,0x138E6E2D,0x1DF5FDC,0x151FC760,0x33972C5,0x56AA3C2,0x2491D8C,0x115B9FD7,0x140A11FA,0x1873AE35,0x1F259C26,0x74B0647,0x12D18B04,0x4672431,0x1C27F419,0x1CAA4D35,0x18DB48B6,0x13A54BDA,0x5080497,0x5}; -const BIG CURVE_Pxaba= {0x170C5DC4,0x11D39263,0x16B3BCB6,0x152C95BB,0x19BEC736,0x8849A12,0x49AB2A8,0xC7162D3,0xC58CD55,0x15C2659,0x11EE8B90,0xB40CAFC,0xE233167,0x7BEC8BE,0x129335BD,0x151C7DBB,0x78B689B,0x1B6B8EED,0x14BFBE3D,0x16}; -const BIG CURVE_Pxabb= {0x1A64B740,0x6B14B34,0x12481578,0x23FA931,0x323ADD1,0x206B82A,0xD789E1B,0x1FCFA666,0x1F4EEA7,0xF1E39E2,0x1968610,0xAF3EBD3,0x590D3B,0xDA0C35A,0x17306AAF,0xCF9DD2B,0x3F63B1A,0x96FF2F9,0xE102A76,0x12}; -const BIG CURVE_Pxbaa= {0x12F1E01F,0xDD8630B,0x12C29802,0x186239A6,0x19218788,0x4C87D1,0x16AE2501,0x775C076,0x870C80B,0x1A394429,0x1637D478,0x4A420E8,0x1C3AD4D4,0x10E5E713,0x111E6AD5,0x514FCF0,0x7CC49D3,0xC678A2,0x1787BDFD,0x1B}; -const BIG CURVE_Pxbab= {0x637383D,0x1851C11C,0x661F866,0x14404A7F,0x15D3D212,0x9AE28F6,0x8051F25,0x1E1CE2BF,0x137D882F,0xB231CEB,0xA8DB8FC,0x18957645,0x5E54DA8,0x1FF41C44,0x1A297414,0x17E1CBC5,0x1014F91F,0x4282AB7,0xB6CE9E3,0x10}; -const BIG CURVE_Pxbba= {0x1711939C,0xB41ED9E,0x69066BA,0x137CA3AD,0xCF2F6C0,0x5E6DAB9,0x2CE1323,0x946E448,0xF353D1C,0x14D9919F,0x46B7046,0x1A12015,0x3D6070,0x18C3E8D2,0x1F23BA45,0x1F1A337C,0x435A9CC,0x6CA1DF1,0x8A9CE1,0x15}; -const BIG CURVE_Pxbbb= {0x56F4899,0x196A0854,0xA959750,0x38A3D72,0x190BC9BC,0x145752BC,0x1E9E26DA,0x1403F88,0x71895E3,0x14162F5D,0x19FEC5FF,0x14190B16,0x7597C,0x19A3CF18,0x26A4B00,0x113D1BB6,0x7857A32,0xE0B78AB,0x1DD51E0F,0x1B}; -const BIG CURVE_Pyaaa= {0x14137844,0x1704BE7D,0x1FD3CCDD,0x189D8C93,0x1C768851,0xF5C37D5,0xE29C659,0x20AB1C1,0xF8896E0,0x1E08663E,0x1D1D539C,0x117E1C47,0x156CDD39,0x161F1017,0x143E8C72,0x174B22FD,0x18706190,0x49AA47E,0x19BB42E1,0xE}; -const BIG CURVE_Pyaab= {0xDC83190,0x12F19247,0x1AA26424,0x15D55E88,0xC418D32,0xB0E91DD,0x47CBFF7,0x2D992C1,0xDE03C1F,0x7694AE5,0x5C741A2,0x1D423AC6,0x5E02B9E,0x1E903F10,0x4EA6513,0x433A1F1,0x8EFA1C4,0xED54713,0x1E72CE4F,0x4}; -const BIG CURVE_Pyaba= {0x1985C0D,0xEE2FE82,0x64770FA,0x11A809B4,0x1483ACE9,0x18BCD2FA,0x171F32C,0x1612D58D,0x1E658341,0x1CBE2201,0x186E971,0x73F0E1,0xB0A5F40,0xAC90FB0,0x1635E008,0x237498B,0x1F3140D6,0xBF789A9,0x1166F259,0x1A}; -const BIG CURVE_Pyabb= {0x159D42F8,0x1B7F0540,0x45895D7,0x14875FA2,0x1E9E7F2B,0x10139D87,0x10F3FD7D,0x11D3717F,0x69E5006,0xF9BB3C4,0x13C9ED8D,0x16516DA,0x102F51DE,0x2725FEC,0x1F125B66,0xFFC324,0x1ED80731,0x1C16C4D,0x383AAA8,0x14}; -const BIG CURVE_Pybaa= {0x1F38039F,0x6A8959C,0x13C68984,0x11DD12AF,0x58093CF,0x1C8550A0,0xFFA1622,0xFF85979,0x1F2ABB75,0x18862E62,0x1EB6A2C9,0x1EC80B64,0x8EC2F18,0xE7BF713,0xC36B65A,0x19C5DD89,0x18A1D1AB,0xF772C8D,0xC11927C,0x5}; -const BIG CURVE_Pybab= {0x95F7865,0x134F0379,0x1CE9A0E,0x17E0EADD,0x1DACADD7,0x1B18F9F8,0x181D3943,0x186679A,0x2505BB0,0x1FDF1DC8,0x11B36A49,0x11E254E9,0xA438576,0x102B09AE,0x139984F4,0x15BC0233,0x1B6F180E,0x960562B,0x48CA65B,0x6}; -const BIG CURVE_Pybba= {0x7CC1979,0xEC1D4FB,0x1D89E6F0,0x955F38E,0x1635FDA9,0x123D8E10,0x10076209,0x494404A,0xD733D7,0x17678BCF,0x153841F9,0x10696FFD,0x5BC9FE8,0x1A20D8B2,0xE22EC9D,0x18449116,0x108C86C5,0x1B4CD720,0x34967,0x19}; -const BIG CURVE_Pybbb= {0xFC9F25B,0x7E44AB1,0xE9AB5D3,0x589F00D,0x1C9D264F,0xC7478B4,0x16B24A13,0x1D2C146B,0xEF84D9A,0xF47ECDE,0x1BFEE16A,0x1B69071E,0x11AB4C1C,0xBE9D9EF,0x390F005,0x78C8288,0x1B9BF549,0x9320730,0x3D84D97,0x14}; - - -#endif - -#if CHUNK==64 - -using namespace B560_58; - -// Base Bits= 58 - -const int CURVE_Cof_I=0; -const int CURVE_B_I= 17; -const BIG CURVE_B= {0x11L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x2FFFF0000000001L,0x11550278A769C21L,0x14D1EB162029C21L,0x2309B4A2B6307F4L,0x34790BD26DFED78L,0x2C6FE3F2571037BL,0x1306A973C465FB0L,0x28446ABB18DF17AL,0xC43BF73EL,0x0L}; -const BIG CURVE_Gx= {0x3286D2F65D71D33L,0x3601553F8CB783FL,0xFF01647711EE0BL,0x268BC07F29FD8CCL,0xE0702E69A80F66L,0x285003EAC056511L,0x35E130D242B2C3AL,0x107024C87924166L,0x17595DB8957EDD7L,0x26A27A4A1L}; -const BIG CURVE_Gy= {0x29A5B3FEA6ED83AL,0x3712E552A29C33DL,0x3391EA8E6958677L,0x29F3C7B9DED7E3EL,0x4E2E3818FB7229L,0x1CC30999551E32DL,0xE67A4086260E3CL,0x2A68CCB8579C437L,0x62C5FAE2B3349DL,0x2B634253L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0x7DE40020L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x7DE4001FL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -//const BIG CURVE_Cof= {0xA2D10F7F12ABEBL,0x5L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxaaa= {0x28D2E8E8923CE4AL,0x2F5C40B4AE04F4AL,0x2165D8A1313A20CL,0x2BFC7FD18DF074FL,0x12B37F0A7C90B98L,0x286ED92CE57BD37L,0x1C416C4ABF57375L,0x39779D0B2EE2172L,0x1A1C0497A5D9487L,0x3995E3602L}; -const BIG CURVE_Pxaab= {0x271CDC5AC0A1BE1L,0x2A3F8EC01DF5FDCL,0xAD5478433972C5L,0x22B73FAE2491D8CL,0x30E75C6B40A11FAL,0xE960C8FF259C26L,0x8CE48632D18B04L,0x39549A6BC27F419L,0x274A97B58DB48B6L,0xA5080497L}; -const BIG CURVE_Pxaba= {0x23A724C770C5DC4L,0x2A592B776B3BCB6L,0x110934259BEC736L,0x18E2C5A649AB2A8L,0x2B84CB2C58CD55L,0x168195F91EE8B90L,0xF7D917CE233167L,0x2A38FB7729335BDL,0x36D71DDA78B689BL,0x2D4BFBE3DL}; -const BIG CURVE_Pxabb= {0xD629669A64B740L,0x47F52632481578L,0x40D7054323ADD1L,0x3F9F4CCCD789E1BL,0x1E3C73C41F4EEA7L,0x15E7D7A61968610L,0x1B4186B40590D3BL,0x19F3BA577306AAFL,0x12DFE5F23F63B1AL,0x24E102A76L}; -const BIG CURVE_Pxbaa= {0x1BB0C6172F1E01FL,0x30C4734D2C29802L,0x990FA39218788L,0xEEB80ED6AE2501L,0x34728852870C80BL,0x94841D1637D478L,0x21CBCE27C3AD4D4L,0xA29F9E111E6AD5L,0x18CF1447CC49D3L,0x37787BDFDL}; -const BIG CURVE_Pxbab= {0x30A38238637383DL,0x288094FE661F866L,0x135C51ED5D3D212L,0x3C39C57E8051F25L,0x164639D737D882FL,0x312AEC8AA8DB8FCL,0x3FE838885E54DA8L,0x2FC3978BA297414L,0x850556F014F91FL,0x20B6CE9E3L}; -const BIG CURVE_Pxbba= {0x1683DB3D711939CL,0x26F9475A69066BAL,0xBCDB572CF2F6C0L,0x128DC8902CE1323L,0x29B3233EF353D1CL,0x342402A46B7046L,0x3187D1A403D6070L,0x3E3466F9F23BA45L,0xD943BE2435A9CCL,0x2A08A9CE1L}; -const BIG CURVE_Pxbbb= {0x32D410A856F4899L,0x7147AE4A959750L,0x28AEA57990BC9BCL,0x2807F11E9E26DAL,0x282C5EBA71895E3L,0x2832162D9FEC5FFL,0x33479E30007597CL,0x227A376C26A4B00L,0x1C16F1567857A32L,0x37DD51E0FL}; -const BIG CURVE_Pyaaa= {0x2E097CFB4137844L,0x313B1927FD3CCDDL,0x1EB86FABC768851L,0x4156382E29C659L,0x3C10CC7CF8896E0L,0x22FC388FD1D539CL,0x2C3E202F56CDD39L,0x2E9645FB43E8C72L,0x93548FD8706190L,0x1D9BB42E1L}; -const BIG CURVE_Pyaab= {0x25E3248EDC83190L,0x2BAABD11AA26424L,0x161D23BAC418D32L,0x5B3258247CBFF7L,0xED295CADE03C1FL,0x3A84758C5C741A2L,0x3D207E205E02B9EL,0x86743E24EA6513L,0x1DAA8E268EFA1C4L,0x9E72CE4FL}; -const BIG CURVE_Pyaba= {0x1DC5FD041985C0DL,0x2350136864770FAL,0x3179A5F5483ACE9L,0x2C25AB1A171F32CL,0x397C4403E658341L,0xE7E1C2186E971L,0x15921F60B0A5F40L,0x46E9317635E008L,0x17EF1353F3140D6L,0x35166F259L}; -const BIG CURVE_Pyabb= {0x36FE0A8159D42F8L,0x290EBF4445895D7L,0x20273B0FE9E7F2BL,0x23A6E2FF0F3FD7DL,0x1F37678869E5006L,0x2CA2DB53C9ED8DL,0x4E4BFD902F51DEL,0x1FF8649F125B66L,0x382D89BED80731L,0x28383AAA8L}; -const BIG CURVE_Pybaa= {0xD512B39F38039FL,0x23BA255F3C68984L,0x390AA14058093CFL,0x1FF0B2F2FFA1622L,0x310C5CC5F2ABB75L,0x3D9016C9EB6A2C9L,0x1CF7EE268EC2F18L,0x338BBB12C36B65AL,0x1EEE591B8A1D1ABL,0xAC11927CL}; -const BIG CURVE_Pybab= {0x269E06F295F7865L,0x2FC1D5BA1CE9A0EL,0x3631F3F1DACADD7L,0x30CCF3581D3943L,0x3FBE3B902505BB0L,0x23C4A9D31B36A49L,0x2056135CA438576L,0x2B78046739984F4L,0x12C0AC57B6F180EL,0xC48CA65BL}; -const BIG CURVE_Pybba= {0x1D83A9F67CC1979L,0x12ABE71DD89E6F0L,0x247B1C21635FDA9L,0x92880950076209L,0x2ECF179E0D733D7L,0x20D2DFFB53841F9L,0x3441B1645BC9FE8L,0x3089222CE22EC9DL,0x3699AE4108C86C5L,0x320034967L}; -const BIG CURVE_Pybbb= {0xFC89562FC9F25BL,0xB13E01AE9AB5D3L,0x18E8F169C9D264FL,0x3A5828D76B24A13L,0x1E8FD9BCEF84D9AL,0x36D20E3DBFEE16AL,0x17D3B3DF1AB4C1CL,0xF190510390F005L,0x12640E61B9BF549L,0x283D84D97L}; - - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48581.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48581.cpp deleted file mode 100644 index 77258c0..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BLS48581.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BLS48581.h" - -namespace BLS48581 { -/* Curve BLS48581 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B584_29; - -//*** rom curve parameters ***** -// Base Bits= 29 -// Ate Bits= 33 -// G2 Table size= 36 - -const int CURVE_Cof_I= 0; -const BIG CURVE_Cof= {0x382,0xA,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 1; -const BIG CURVE_B= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0xD671C01,0x52FF37E,0x10936846,0x1CB328CF,0x103C4CCB,0x1E682B11,0x5AA171,0x6989924,0x741969D,0xB961737,0xFEB5AF2,0x16797C00,0x1387A3F0,0x6B631A,0x13305857,0xBC46753,0x925E288,0x11C37C5,0x0,0x0,0x0}; -const BIG CURVE_Gx= {0x115AF640,0x1E743991,0x79B630E,0x9B4BA74,0x11786CB7,0x1ED9B458,0x1BAF6F15,0xBB0B246,0x4584766,0x14EFB7CB,0x1154151A,0x1F73EEA8,0xBDBAEDF,0x3467B0D,0x15F83A1A,0xC1BC7E4,0x1F1E93F8,0x1D795B9E,0xB0D03CA,0x55EB36F,0x0}; -const BIG CURVE_Gy= {0x2587A70,0xDDAEF1F,0x49AD5DB,0x6F5DEF7,0x11B2E35F,0x1BE143B6,0x8BD21FD,0xB0987DE,0x1E80F678,0x1CC57729,0xEDEFBFE,0x16E41DEF,0x1279DD41,0x52974C8,0xF27BFAE,0x149114AA,0xD1FB398,0xFC359D1,0x1D94C7E4,0x19DFB489,0x0}; -const BIG CURVE_HTPC= {0x31193EC,0x1C9F85F0,0x1D6090C,0x5112C88,0x10D4620C,0x1F255473,0x1F5583B6,0x4F7AABD,0xCD0706B,0x14B125F7,0xECD8492,0x4D5AF8A,0xC755E26,0x2D4C018,0xB0B7761,0x1369CD4C,0x1FD42938,0x782EC54,0x17716BE5,0x1246919A,0x0}; - -const BIG CURVE_Bnx= {0x381,0xA,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxaaa= {0xCE8BFAB,0x1A7E85A5,0x85537B0,0xF2ECC64,0x1510317B,0x6C0248F,0x140C01,0x140C25E8,0x281A63C,0x168D4621,0x1BFDE6EA,0x1DE2AD88,0x64DB3A2,0xDE65BEF,0x1F1C0D13,0x1BD7577D,0x45A2775,0x11C11BFD,0x9E1C792,0xBAC2BB3,0x0}; -const BIG CURVE_Pxaab= {0x16B47C57,0x134D9B33,0x1E850FC5,0xAAD4035,0x30FFD75,0x1186CBCB,0x13C30F1D,0x1FF4C4A0,0x214A76A,0x15FF6F8B,0xE50E802,0xFE9C38,0xF6DA123,0x111F4A93,0x1B660385,0x1D164576,0x86ABC07,0x9034D87,0x13889614,0xF892E7D,0x0}; -const BIG CURVE_Pxaba= {0x55A3E6A,0x440AB65,0xCFC2D19,0x1E99BDAD,0x1D5FEA8E,0x1EFDDC3C,0x157C0A32,0x1E1A54DA,0xFFAE766,0xDE8C921,0x18058707,0x156B56D0,0x16957CCB,0x1BE53D36,0x1B2A6B88,0x178E7514,0x1853AD83,0x70D9750,0x663C4CD,0x3F998E0,0x0}; -const BIG CURVE_Pxabb= {0x1B7FEAFE,0xD3819E5,0x2F0FC2,0x171969D,0xCA5231,0x292BE10,0x51A30C7,0x16364F37,0xE6EC143,0x11F0E3BB,0x862A57D,0x1F17C198,0x1B92A393,0x1F2C10DB,0x16B18BC,0x17FD1EB3,0x12954D4,0x2E3C6C0,0x973AD86,0x17C44318,0x0}; -const BIG CURVE_Pxbaa= {0x13F8CCE5,0x1CE1D0E2,0x7532EDC,0x16BEE8D9,0x1AA80C65,0xAFE0C44,0x49D3EB5,0x9255CB1,0xC10B2EF,0x40CCEAD,0x6607E79,0xA70CD3,0x1F0E7C58,0x15AB3AF,0x1D742C59,0xC600F8C,0x4CAA9DD,0x1D1E2CC7,0x2CD644,0x717238C,0x0}; -const BIG CURVE_Pxbab= {0xA3C093A,0x10026C8A,0x138CDC3C,0x12C1221F,0xF097FC7,0xF8BBB09,0x175D656A,0x1738162B,0x1EB57B40,0x1AE944CB,0x77D8E0,0x6E8303,0x58677BB,0xBBD1E8D,0xD773BC2,0x111EF71E,0x1E4ECDA0,0x101F8988,0x1FAC1CE1,0x192D8EF2,0x0}; -const BIG CURVE_Pxbba= {0x750E057,0xB03F30,0x170CD539,0x16B61C40,0x2D63334,0x1F219261,0xCAAB472,0xBDF9E68,0x10FD0CAA,0x9D89E76,0x13BC47CA,0x16F4893,0x1908BA2C,0x1C295B6D,0x106CE744,0x1CCC1BD4,0x98908AE,0x1F80CBD2,0x118187B8,0x1736F2A3,0x0}; -const BIG CURVE_Pxbbb= {0x1BC6AE34,0x10CED007,0x5F0FE13,0x15E5F93D,0x1FC44E56,0x1EB575FC,0x116151E6,0x16FC561A,0x164A7190,0x1F94E7F9,0x1E33F2A4,0xE514FF3,0xF741719,0x3DA908E,0xA77BEBD,0x563CBAF,0xC4F4AAA,0x2941312,0xBECAF7B,0x104FAB84,0x0}; -const BIG CURVE_Pyaaa= {0xD2D7971,0x1F6E9FF2,0xB03FCC8,0xA025562,0x6D65904,0x15FBBF75,0x18F05666,0xDB15CA2,0xD90F733,0x17D13BA4,0x24188D6,0x86BF556,0x1B39EBFC,0x12BBF379,0x108E0166,0x4972316,0x16452F30,0xFD24B90,0x1B0DD6D7,0x1D6A66A,0x0}; -const BIG CURVE_Pyaab= {0x16CD5665,0xA38EDC9,0x1FF1EC44,0x16846A4B,0xE2E588,0x1D04BEBB,0x1877484B,0x11255649,0x12C5C3D1,0x121D8F8C,0xBEC25AC,0x65F97E7,0x1D729647,0xF37DD00,0x108AE8C9,0x1B856EB4,0x11815FCA,0xA26D329,0x5E783FC,0x509B8EB,0x0}; -const BIG CURVE_Pyaba= {0xA2A8474,0x1995293,0xEE3F79A,0x18F88DF8,0x52269CB,0x9AEA8D3,0x178BC307,0x194652BC,0x11515536,0xE874820,0x17DF5726,0xE0A288E,0x13A480D3,0x16AD88CE,0x1140C085,0x13DE585F,0x17036766,0x1F210F7D,0x17402148,0x166D4403,0x0}; -const BIG CURVE_Pyabb= {0x841589D,0x1109ED49,0x194CDCC5,0x7B17143,0x5E578FB,0x1ED281F7,0xE84359E,0xEE84EE1,0xDCED281,0x199FD20,0xB226C89,0x245A4E8,0xB0E710E,0x7711EEC,0x1B4CD837,0x563859B,0x1BD47876,0x144111FD,0x1887B701,0x15D84B48,0x0}; -const BIG CURVE_Pybaa= {0x2E50137,0x3C18FCC,0x13DE90FD,0xAFFBBBF,0x1137B088,0x9ACA2E,0x13D67D0C,0x9CA256C,0x8A1E2CA,0x111C66E7,0x16171DFE,0x2530AFD,0x159805F1,0xEC9DAD4,0x11506D0F,0xB44AA9B,0x1A5A8832,0x148B281F,0x88EA711,0x1A413AB4,0x0}; -const BIG CURVE_Pybab= {0xF90BEE4,0x776E2C6,0x1B3CE965,0xB3DB044,0x12B679DA,0xCC6553,0xE78EABF,0xF8301A2,0x1F6824F4,0x6138420,0xA0D083A,0x156EA09F,0x182E2055,0x1915AC4E,0x159BAC59,0x17208435,0x1D5AD537,0x1289E99C,0x115CDADE,0xFA1A06E,0x0}; -const BIG CURVE_Pybba= {0x1EB23986,0xA0FD757,0x6A98ACF,0x110802FB,0x13DCCC9E,0x7D31CFA,0x62D6ED0,0x118E964C,0x122C1FAB,0x11D14327,0x63D096B,0x10334DBF,0x15F14E4C,0xD8320A,0xD93F021,0x1F1400DE,0x1DFDD17A,0x112E1682,0x46F997A,0x112CECF0,0x0}; -const BIG CURVE_Pybbb= {0x132718B6,0x133FFE5B,0x1A71575,0x158CDD08,0x13F748E5,0x6C62559,0x1505CC0,0x7D8E324,0x1E1AD033,0x14E18F4B,0xCE8FE39,0x1D95352A,0x149B6EF8,0x728643A,0x1C501AFA,0x36BC0D1,0x7E84F98,0x9C9D2E0,0x1FE240A7,0x6BC4A49,0x0}; - -#endif - -#if CHUNK==64 - -using namespace B584_60; - -// Base Bits= 60 -// Ate Bits= 33 -// G2 Table size= 36 - -const int CURVE_Cof_I= 0; -const BIG CURVE_Cof= {0x140000382L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 1; -const BIG CURVE_B= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x8A5FE6FCD671C01L,0xBE599467C24DA11L,0xC7CD0562303C4CCL,0x9D34C4C92016A85L,0xBC972C2E6E74196L,0x3F0B3CBE003FAD6L,0x615C0D6C635387AL,0xE2885E233A9CCC1L,0x2386F8A925L,0x0L}; -const BIG CURVE_Gx= {0xBCE8732315AF640L,0x74DA5D3A1E6D8C3L,0x57DB368B11786CBL,0x665D859236EBDBCL,0x46A9DF6F9645847L,0xEDFFB9F75445505L,0xE86868CF61ABDBAL,0x93F860DE3F257E0L,0x40F2BAF2B73DF1EL,0x2AF59B7AC3L}; -const BIG CURVE_Gy= {0xDBB5DE3E2587A70L,0xF37AEF7B926B576L,0xF77C2876D1B2E35L,0x78584C3EF22F487L,0xFFB98AEE53E80F6L,0xD41B720EF7BB7BEL,0xFEB8A52E991279DL,0xB398A488A553C9EL,0x31F91F86B3A2D1FL,0xCEFDA44F65L}; -const BIG CURVE_HTPC= {0x393F0BE031193ECL,0xC28896440758243L,0xDBE4AA8E70D4620L,0x6B27BD55EFD560EL,0x24A9624BEECD070L,0xE2626AD7C53B361L,0xDD845A98030C755L,0x29389B4E6A62C2DL,0x5AF94F05D8A9FD4L,0x92348CD5DCL}; -const BIG CURVE_Bnx= {0x140000381L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxaaa= {0x34FD0B4ACE8BFABL,0xB79766322154DECL,0x4D80491F510317L,0x3CA0612F4005030L,0xBAAD1A8C42281A6L,0x3A2EF156C46FF79L,0x344DBCCB7DE64DBL,0x2775DEBABBEFC70L,0x71E4A38237FA45AL,0x5D615D9A78L}; -const BIG CURVE_Pxaab= {0x669B36676B47C57L,0x5556A01AFA143F1L,0x7630D979630FFD7L,0x6AFFA62504F0C3CL,0xABFEDF16214A7L,0x12307F4E1C3943AL,0xE1623E9526F6DAL,0xBC07E8B22BB6D98L,0x258512069B0E86AL,0x7C4973ECE2L}; -const BIG CURVE_Pxaba= {0x488156CA55A3E6AL,0xEF4CDED6B3F0B46L,0xCBDFBB879D5FEA8L,0x66F0D2A6D55F028L,0xC1DBD19242FFAE7L,0xCCBAB5AB6860161L,0xAE237CA7A6D6957L,0xAD83BC73A8A6CA9L,0xF1334E1B2EA1853L,0x1FCCC70198L}; -const BIG CURVE_Pxabb= {0x9A7033CBB7FEAFEL,0x10B8CB4E80BC3F0L,0x1C5257C200CA523L,0x43B1B279B9468C3L,0x5F63E1C776E6EC1L,0x393F8BE0CC218A9L,0x62F3E5821B7B92AL,0x54D4BFE8F5985ACL,0xEB6185C78D80129L,0xBE2218C25CL}; -const BIG CURVE_Pxbaa= {0x39C3A1C53F8CCE5L,0x5B5F746C9D4CBB7L,0xD55FC1889AA80C6L,0xEF492AE589274FAL,0x9E48199D5AC10B2L,0xC5805386699981FL,0xB1642B5675FF0E7L,0xA9DD63007C675D0L,0x35913A3C598E4CAL,0x38B91C600BL}; -const BIG CURVE_Pxbab= {0x2004D914A3C093AL,0x7960910FCE3370FL,0xA9F177612F097FCL,0x40B9C0B15DD7595L,0x3835D28997EB57BL,0x7BB037418181DF6L,0xEF0977A3D1A5867L,0xCDA088F7B8F35DCL,0x738603F1311E4EL,0xC96C7797EBL}; -const BIG CURVE_Pxbba= {0x41607E60750E057L,0x4B5B0E205C3354EL,0xCBE4324C22D6333L,0xAA5EFCF3432AAD1L,0xF293B13CED0FD0CL,0xA2C0B7A449CEF11L,0x9D13852B6DB908BL,0x8AEE660DEA41B3L,0x61EE3F0197A4989L,0xB9B7951C60L}; -const BIG CURVE_Pxbbb= {0xE19DA00FBC6AE34L,0x6AF2FC9E97C3F84L,0x9BD6AEBF9FC44E5L,0x90B7E2B0D458547L,0xA93F29CFF364A71L,0x719728A7F9F8CFCL,0xFAF47B5211CF741L,0x4AAA2B1E5D7A9DEL,0x2BDEC5282624C4FL,0x827D5C22FBL}; -const BIG CURVE_Pyaaa= {0x3EDD3FE4D2D7971L,0x45012AB12C0FF32L,0x9ABF77EEA6D6590L,0x336D8AE5163C159L,0x35AFA27748D90F7L,0xBFC435FAAB09062L,0x59A577E6F3B39EL,0x2F3024B918B4238L,0x75B5DFA49721645L,0xEB53356C3L}; -const BIG CURVE_Pyaab= {0x1471DB936CD5665L,0x8B423525FFC7B11L,0x2FA097D760E2E58L,0xD1892AB24E1DD21L,0x6B243B1F192C5C3L,0x64732FCBF3AFB09L,0xA325E6FBA01D729L,0x5FCADC2B75A422BL,0xE0FF144DA653181L,0x284DC75979L}; -const BIG CURVE_Pyaba= {0x8332A526A2A8474L,0xBC7C46FC3B8FDE6L,0x1D35D51A652269CL,0x36CA3295E5E2F0CL,0xC99D0E904115155L,0xD370514475F7D5L,0x216D5B119D3A48L,0x67669EF2C2FC503L,0x8523E421EFB703L,0xB36A201DD0L}; -const BIG CURVE_Pyabb= {0x6213DA92841589DL,0xB3D8B8A1E533731L,0x7BDA503EE5E578FL,0x817742770BA10D6L,0x224333FA40DCED2L,0x10E122D2742C89BL,0x60DCEE23DD8B0E7L,0x78762B1C2CDED33L,0xEDC0688223FBBD4L,0xAEC25A4621L}; -const BIG CURVE_Pybaa= {0x47831F982E50137L,0x857FDDDFCF7A43FL,0x30135945D137B08L,0xCA4E512B64F59F4L,0x7FA238CDCE8A1E2L,0x5F1129857ED85C7L,0xB43DD93B5A95980L,0x88325A2554DC541L,0xA9C46916503FA5AL,0xD209D5A223L}; -const BIG CURVE_Pybab= {0x4EEDC58CF90BEE4L,0xA59ED8226CF3A59L,0xFC198CAA72B679DL,0xF47C180D139E3AAL,0xE8C270841F6824L,0x55AB7504FA8342L,0xB16722B589D82E2L,0xD537B90421AD66EL,0x36B7A513D339D5AL,0x7D0D037457L}; -const BIG CURVE_Pybba= {0xD41FAEAFEB23986L,0xE884017D9AA62B3L,0x40FA639F53DCCC9L,0xAB8C74B2618B5BBL,0x5AE3A2864F22C1FL,0xE4C819A6DF98F42L,0xC0841B064155F14L,0xD17AF8A006F364FL,0xE65EA25C2D05DFDL,0x896767811BL}; -const BIG CURVE_Pybbb= {0x667FFCB732718B6L,0x5AC66E84069C55DL,0xD8C4AB33F748EL,0x333EC7192054173L,0x8E69C31E97E1AD0L,0xEF8ECA9A9533A3FL,0x6BE8E50C87549B6L,0x4F981B5E068F140L,0x9029D393A5C07E8L,0x35E2524FF8L}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN158.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN158.cpp deleted file mode 100644 index 4dd5e9b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN158.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BN158.h" - -namespace BN158 { - -/* Curve BN158 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B160_28; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0xF04200D,0xD59F209,0xF73FA14,0x9953CF6,0x27628C,0x24012}; -const BIG CURVE_Gx= {0xB04E012,0x72280A,0xFD3FB95,0x9953CF6,0x27628C,0x24012}; -const BIG CURVE_Gy= {0x2,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x801001,0x400,0x0,0x0,0x0,0x0}; -const BIG CURVE_Pxa= {0x33A5768,0x3B27650,0x3022922,0x1EECE2B,0xF882728,0x1EA35}; -const BIG CURVE_Pxb= {0x776A2F5,0x7B04ACE,0x14F9D68,0x5D05BA3,0x611EB92,0x23485}; -const BIG CURVE_Pya= {0x30CFE24,0x69AB26E,0xF92C435,0x1FB7A85,0xF906B6E,0x1C952}; -const BIG CURVE_Pyb= {0x8E8609D,0x9101773,0xA0F3EE2,0x8445B3B,0x9544ED8,0x23E28}; -const BIG CURVE_W[2]= {{0xA008003,0x3182600,0x600180,0x0,0x0,0x0},{0x1002001,0x800,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0xB00A004,0x3182E00,0x600180,0x0,0x0,0x0},{0x1002001,0x800,0x0,0x0,0x0,0x0}},{{0x1002001,0x800,0x0,0x0,0x0,0x0},{0x503A00A,0xA41CC09,0xF13F894,0x9953CF6,0x27628C,0x24012}}}; -const BIG CURVE_WB[4]= {{0x2801000,0x1080600,0x200080,0x0,0x0,0x0},{0x6815005,0xF907C02,0x2519090,0x120264,0x30,0x0},{0x380B003,0x7C84001,0x128C848,0x90132,0x18,0x0},{0x3803001,0x1080E00,0x200080,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0xE84100D,0xD59EE09,0xF73FA14,0x9953CF6,0x27628C,0x24012},{0xE84100C,0xD59EE09,0xF73FA14,0x9953CF6,0x27628C,0x24012},{0xE84100C,0xD59EE09,0xF73FA14,0x9953CF6,0x27628C,0x24012},{0x1002002,0x800,0x0,0x0,0x0,0x0}},{{0x1002001,0x800,0x0,0x0,0x0,0x0},{0xE84100C,0xD59EE09,0xF73FA14,0x9953CF6,0x27628C,0x24012},{0xE84100D,0xD59EE09,0xF73FA14,0x9953CF6,0x27628C,0x24012},{0xE84100C,0xD59EE09,0xF73FA14,0x9953CF6,0x27628C,0x24012}},{{0x1002002,0x800,0x0,0x0,0x0,0x0},{0x1002001,0x800,0x0,0x0,0x0,0x0},{0x1002001,0x800,0x0,0x0,0x0,0x0},{0x1002001,0x800,0x0,0x0,0x0,0x0}},{{0x801002,0x400,0x0,0x0,0x0,0x0},{0x2004002,0x1000,0x0,0x0,0x0,0x0},{0xE04000A,0xD59EA09,0xF73FA14,0x9953CF6,0x27628C,0x24012},{0x801002,0x400,0x0,0x0,0x0,0x0}}}; - -#endif - -#if CHUNK==64 - -using namespace B160_56; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5L,0x0L,0x0L}; -const BIG CURVE_Order= {0xD59F209F04200DL,0x9953CF6F73FA14L,0x24012027628CL}; -const BIG CURVE_Gx= {0x72280AB04E012L,0x9953CF6FD3FB95L,0x24012027628CL}; -const BIG CURVE_Gy= {0x2L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0x4000801001L,0x0L,0x0L}; -const BIG CURVE_Pxa= {0x3B2765033A5768L,0x1EECE2B3022922L,0x1EA35F882728L}; -const BIG CURVE_Pxb= {0x7B04ACE776A2F5L,0x5D05BA314F9D68L,0x23485611EB92L}; -const BIG CURVE_Pya= {0x69AB26E30CFE24L,0x1FB7A85F92C435L,0x1C952F906B6EL}; -const BIG CURVE_Pyb= {0x91017738E8609DL,0x8445B3BA0F3EE2L,0x23E289544ED8L}; -const BIG CURVE_W[2]= {{0x3182600A008003L,0x600180L,0x0L},{0x8001002001L,0x0L,0x0L}}; -const BIG CURVE_SB[2][2]= {{{0x3182E00B00A004L,0x600180L,0x0L},{0x8001002001L,0x0L,0x0L}},{{0x8001002001L,0x0L,0x0L},{0xA41CC09503A00AL,0x9953CF6F13F894L,0x24012027628CL}}}; -const BIG CURVE_WB[4]= {{0x10806002801000L,0x200080L,0x0L},{0xF907C026815005L,0x1202642519090L,0x30L},{0x7C84001380B003L,0x90132128C848L,0x18L},{0x1080E003803001L,0x200080L,0x0L}}; -const BIG CURVE_BB[4][4]= {{{0xD59EE09E84100DL,0x9953CF6F73FA14L,0x24012027628CL},{0xD59EE09E84100CL,0x9953CF6F73FA14L,0x24012027628CL},{0xD59EE09E84100CL,0x9953CF6F73FA14L,0x24012027628CL},{0x8001002002L,0x0L,0x0L}},{{0x8001002001L,0x0L,0x0L},{0xD59EE09E84100CL,0x9953CF6F73FA14L,0x24012027628CL},{0xD59EE09E84100DL,0x9953CF6F73FA14L,0x24012027628CL},{0xD59EE09E84100CL,0x9953CF6F73FA14L,0x24012027628CL}},{{0x8001002002L,0x0L,0x0L},{0x8001002001L,0x0L,0x0L},{0x8001002001L,0x0L,0x0L},{0x8001002001L,0x0L,0x0L}},{{0x4000801002L,0x0L,0x0L},{0x10002004002L,0x0L,0x0L},{0xD59EA09E04000AL,0x9953CF6F73FA14L,0x24012027628CL},{0x4000801002L,0x0L,0x0L}}}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254.cpp deleted file mode 100644 index cfdb78d..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BN254.h" - -namespace BN254 { - -/* Curve BN254 - Pairing friendly BN curve */ - -/* Nogami's fast curve */ - -#if CHUNK==16 - -using namespace B256_13; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 2; -const BIG CURVE_B= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0xD,0x0,0x0,0x0,0xA10,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A}; -const BIG CURVE_Gx= {0x12,0x0,0x0,0x0,0x1A70,0x9,0x0,0x0,0x100,0x309,0x2,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A}; -const BIG CURVE_Gy= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x1,0x0,0x0,0x0,0x408,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0x1B2B,0x1F,0x932,0x1C84,0x191E,0x1F86,0x262,0x1769,0x48B,0x1523,0x1B6D,0x18C3,0x7E8,0x6C6,0x1FAE,0x16C5,0x119E,0x5DA,0x684,0xC}; -const BIG CURVE_Pxb= {0xCF3,0x1EAA,0x1079,0x1869,0x10D8,0x25B,0x18DE,0xD75,0xD74,0x18FA,0xA96,0x1305,0x18C5,0x553,0xCC4,0xF06,0x1A73,0x17CD,0x5AA,0xA}; -const BIG CURVE_Pya= {0xB9A,0xE69,0x1E24,0x1C0,0x119F,0x4DE,0x16F8,0x1CD7,0x1D0A,0x194D,0x88,0x1319,0x966,0x870,0xE6A,0x1268,0xBAF,0x1D03,0x625,0x4}; -const BIG CURVE_Pyb= {0xE9B,0x19D6,0x1B1A,0x1A35,0x18A2,0x4AB,0x1CE7,0x1FFA,0x1006,0x1D84,0x34D,0xBE7,0x56F,0x16A2,0x1A3D,0x2A4,0x1C8B,0x1873,0xECA,0x1D}; -const BIG CURVE_W[2]= {{0x3,0x0,0x0,0x0,0x40,0x1,0x0,0x0,0x180,0x30C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0x4,0x0,0x0,0x0,0x850,0x1,0x0,0x0,0x180,0x30C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xA,0x0,0x0,0x0,0x9D0,0x7,0x0,0x0,0x1E00,0x1CF0,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A}}}; -const BIG CURVE_WB[4]= {{0x0,0x0,0x0,0x0,0x408,0x0,0x0,0x0,0x80,0x104,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x5,0x0,0x0,0x0,0x14A8,0x2,0x0,0x0,0x700,0xE38,0x0,0x0,0x1800,0x1120,0xC4,0x0,0x0,0x0,0x0,0x0},{0x3,0x0,0x0,0x0,0xC58,0x1,0x0,0x0,0x380,0x71C,0x0,0x0,0xC00,0x890,0x62,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x0,0x0,0xC18,0x0,0x0,0x0,0x80,0x104,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0xD,0x0,0x0,0x0,0x608,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A},{0xC,0x0,0x0,0x0,0x608,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A},{0xC,0x0,0x0,0x0,0x608,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A},{0x2,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xC,0x0,0x0,0x0,0x608,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A},{0xD,0x0,0x0,0x0,0x608,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A},{0xC,0x0,0x0,0x0,0x608,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A}},{{0x2,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x0,0x0,0x810,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x2,0x0,0x0,0x0,0x408,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2,0x0,0x0,0x0,0x1020,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xA,0x0,0x0,0x0,0x200,0x8,0x0,0x0,0x1F80,0x1FFC,0x1,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A},{0x2,0x0,0x0,0x0,0x408,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; - - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 2; -const BIG CURVE_B= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0xD,0x0,0x10A1,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2}; -const BIG CURVE_Gx= {0x12,0x0,0x13A7,0x0,0x86121,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2}; -const BIG CURVE_Gy= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x1,0x8000000,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0x803FB2B,0xEE4224C,0x8BF0D91,0x8BBB489,0xDB6A464,0x7E8C61E,0xFEB8D8C,0x519EB62,0x61A10BB,0x0}; -const BIG CURVE_Pxb= {0x7D54CF3,0x8C34C1E,0x784B70D,0x746BAE3,0xA5B1F4D,0x8C5982A,0x3310AA7,0xBA73783,0x516AAF9,0x0}; -const BIG CURVE_Pya= {0x1CD2B9A,0xF0E0789,0xE09BD19,0xAE6BDB,0x22329BD,0x96698C8,0x39A90E0,0x6BAF934,0x21897A0,0x0}; -const BIG CURVE_Pyb= {0xB3ACE9B,0x2D1AEC6,0x9C9578A,0x6FFD73,0xD37B090,0x56F5F38,0x68F6D44,0x7C8B152,0xEBB2B0E,0x0}; -const BIG CURVE_W[2]= {{0x3,0x0,0x204,0x8000000,0x6181,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0x4,0x0,0x285,0x8000000,0x6181,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xA,0x0,0xE9D,0x0,0x79E1E,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2}}}; -const BIG CURVE_WB[4]= {{0x0,0x8000000,0x40,0x8000000,0x2080,0x0,0x0,0x0,0x0,0x0},{0x5,0x8000000,0x54A,0x0,0x1C707,0x8000000,0x312241,0x0,0x0,0x0},{0x3,0x8000000,0x2C5,0x8000000,0xE383,0xC000000,0x189120,0x0,0x0,0x0},{0x1,0x8000000,0xC1,0x8000000,0x2080,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0xD,0x8000000,0x1060,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2},{0xC,0x8000000,0x1060,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2},{0xC,0x8000000,0x1060,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2},{0x2,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xC,0x8000000,0x1060,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2},{0xD,0x8000000,0x1060,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2},{0xC,0x8000000,0x1060,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2}},{{0x2,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1,0x0,0x81,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x2,0x8000000,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2,0x0,0x102,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xA,0x0,0x1020,0x8000000,0x7FF9F,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2},{0x2,0x8000000,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 2; -const BIG CURVE_B= {0x2L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xDL,0x800000000010A1L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L}; -const BIG CURVE_Gx= {0x12L,0x13A7L,0x80000000086121L,0x40000001BA344DL,0x25236482L}; -const BIG CURVE_Gy= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0x80000000000001L,0x40L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxa= {0xEE4224C803FB2BL,0x8BBB4898BF0D91L,0x7E8C61EDB6A464L,0x519EB62FEB8D8CL,0x61A10BBL}; -const BIG CURVE_Pxb= {0x8C34C1E7D54CF3L,0x746BAE3784B70DL,0x8C5982AA5B1F4DL,0xBA737833310AA7L,0x516AAF9L}; -const BIG CURVE_Pya= {0xF0E07891CD2B9AL,0xAE6BDBE09BD19L,0x96698C822329BDL,0x6BAF93439A90E0L,0x21897A0L}; -const BIG CURVE_Pyb= {0x2D1AEC6B3ACE9BL,0x6FFD739C9578AL,0x56F5F38D37B090L,0x7C8B15268F6D44L,0xEBB2B0EL}; -const BIG CURVE_W[2]= {{0x3L,0x80000000000204L,0x6181L,0x0L,0x0L},{0x1L,0x81L,0x0L,0x0L,0x0L}}; -const BIG CURVE_SB[2][2]= {{{0x4L,0x80000000000285L,0x6181L,0x0L,0x0L},{0x1L,0x81L,0x0L,0x0L,0x0L}},{{0x1L,0x81L,0x0L,0x0L,0x0L},{0xAL,0xE9DL,0x80000000079E1EL,0x40000001BA344DL,0x25236482L}}}; -const BIG CURVE_WB[4]= {{0x80000000000000L,0x80000000000040L,0x2080L,0x0L,0x0L},{0x80000000000005L,0x54AL,0x8000000001C707L,0x312241L,0x0L},{0x80000000000003L,0x800000000002C5L,0xC000000000E383L,0x189120L,0x0L},{0x80000000000001L,0x800000000000C1L,0x2080L,0x0L,0x0L}}; -const BIG CURVE_BB[4][4]= {{{0x8000000000000DL,0x80000000001060L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L},{0x8000000000000CL,0x80000000001060L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L},{0x8000000000000CL,0x80000000001060L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L},{0x2L,0x81L,0x0L,0x0L,0x0L}},{{0x1L,0x81L,0x0L,0x0L,0x0L},{0x8000000000000CL,0x80000000001060L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L},{0x8000000000000DL,0x80000000001060L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L},{0x8000000000000CL,0x80000000001060L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L}},{{0x2L,0x81L,0x0L,0x0L,0x0L},{0x1L,0x81L,0x0L,0x0L,0x0L},{0x1L,0x81L,0x0L,0x0L,0x0L},{0x1L,0x81L,0x0L,0x0L,0x0L}},{{0x80000000000002L,0x40L,0x0L,0x0L,0x0L},{0x2L,0x102L,0x0L,0x0L,0x0L},{0xAL,0x80000000001020L,0x8000000007FF9FL,0x40000001BA344DL,0x25236482L},{0x80000000000002L,0x40L,0x0L,0x0L,0x0L}}}; - - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254CX.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254CX.cpp deleted file mode 100644 index c24535a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN254CX.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BN254CX.h" - -namespace BN254CX { - -/* Curve BN254CX - Pairing friendly BN curve */ - -/* CertiVox BN curve/field */ - - -#if CHUNK==16 - -using namespace B256_13; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 2; -const BIG CURVE_B= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1F6D,0x1758,0x98D,0x381,0xBE1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48}; -const BIG CURVE_Gx= {0x15B2,0xDA,0x1BD7,0xC47,0x1BE6,0x1F70,0x24,0x1DC3,0x1FD6,0x1921,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48}; -const BIG CURVE_Gy= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x12B1,0x1E00,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0xAF5,0x1AFD,0x1B2,0x7D0,0x51C,0x1B14,0xE64,0x1CC3,0xFB8,0x4A2,0x10BC,0x1633,0x73C,0x90E,0x1E9C,0x1369,0x1F9A,0x12DB,0x1256,0x35}; -const BIG CURVE_Pxb= {0x1433,0xAF,0x183F,0xA00,0x1EDE,0x4A6,0xF68,0x1435,0x1A33,0xDD,0xD93,0x103E,0xD16,0x8E1,0x10FC,0xCC0,0x365,0x8,0xF4C,0xA}; -const BIG CURVE_Pya= {0x299,0x1B95,0x1AA5,0x642,0x683,0x427,0x1A8D,0x126D,0x1FF0,0x3CE,0x1019,0x1230,0x1FEF,0x35D,0xBB8,0xDF6,0x109E,0xB85,0x1C9E,0x2A}; -const BIG CURVE_Pyb= {0x8CD,0x24F,0x7E7,0x1782,0x1C41,0x10D6,0x681,0xC12,0x5,0x1699,0x59,0xC0E,0x17F5,0x1DEB,0x1F55,0x313,0x2AC,0xB60,0xF2D,0x23}; -const BIG CURVE_W[2]= {{0xB83,0x117F,0x1245,0x8C6,0x5,0x1C09,0xD00,0x1,0x0,0x300,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0x10E4,0xD80,0x1247,0x8C6,0x805,0x1C09,0xD00,0x1,0x0,0x300,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x13EA,0x5D9,0x1748,0x1ABA,0xBDB,0x75E,0x623,0x1DC0,0x1FD6,0x1321,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48}}}; -const BIG CURVE_WB[4]= {{0x4B0,0x13D4,0x615,0x1842,0x401,0x958,0xF00,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x475,0x1110,0x56F,0x1BF3,0x36C,0x1FCD,0x329,0x1DB5,0x1E94,0xE03,0xA83,0x10E0,0x0,0x0,0xC0,0x0,0x0,0x0,0x0,0x0},{0xB93,0x788,0x12B8,0xDF9,0x13B6,0x1FE6,0x1194,0xEDA,0x1F4A,0x1701,0x541,0x870,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0},{0xA11,0xFD5,0x617,0x1842,0xC01,0x958,0xF00,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0xCBD,0x1958,0x98C,0x381,0x7E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48},{0xCBC,0x1958,0x98C,0x381,0x7E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48},{0xCBC,0x1958,0x98C,0x381,0x7E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48},{0x562,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xCBC,0x1958,0x98C,0x381,0x7E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48},{0xCBD,0x1958,0x98C,0x381,0x7E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48},{0xCBC,0x1958,0x98C,0x381,0x7E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48}},{{0x562,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x561,0x1C01,0x1,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x12B2,0x1E00,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xAC2,0x1802,0x3,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1A0A,0x1B57,0x98B,0x381,0x3E1,0x367,0x1324,0x1DC1,0x1FD6,0x1621,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48},{0x12B2,0x1E00,0x0,0x0,0x400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 2; -const BIG CURVE_B= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x6EB1F6D,0x11C0A63,0x906CEBE,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2}; -const BIG CURVE_Gx= {0xC1B55B2,0x6623EF5,0x93EE1BE,0xD6EE180,0x6D3243F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2}; -const BIG CURVE_Gy= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x3C012B1,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0xB5FAAF5,0xC3E806C,0x9362851,0xB8E61B9,0x2F0944F,0x73CB19C,0xFA7121C,0x7F9A9B4,0xAC95A5B,0x1}; -const BIG CURVE_Pxb= {0xC15F433,0xE50060F,0xA094DED,0x33A1ABD,0x64C1BBA,0xD1681F3,0x43F11C2,0x365660,0x53D3001,0x0}; -const BIG CURVE_Pya= {0x772A299,0x33216A9,0x3484E68,0xF0936EA,0x6479DF,0xFEF9184,0x2EE06BB,0xB09E6FB,0x5727970,0x1}; -const BIG CURVE_Pyb= {0xC49E8CD,0x1BC11F9,0x61ADC4,0x56091A,0x166D320,0x7F56070,0xFD57BD7,0x2AC189,0x1BCB56C,0x1}; -const BIG CURVE_W[2]= {{0x62FEB83,0x5463491,0x381200,0xB4,0x6000,0x0,0x0,0x0,0x0,0x0},{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0xDB010E4,0x5463491,0x381280,0xB4,0x6000,0x0,0x0,0x0,0x0,0x0},{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xBB33EA,0xBD5D5D2,0x8CEBCBD,0xD6EE018,0x6D2643F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2}}}; -const BIG CURVE_WB[4]= {{0x67A84B0,0x1C21185,0x12B040,0x3C,0x2000,0x0,0x0,0x0,0x0,0x0},{0xE220475,0xCDF995B,0xA7F9A36,0x94EDA8C,0xA0DC07E,0x8702,0x300000,0x0,0x0,0x0},{0xF10B93,0x66FCCAE,0x53FCD3B,0x4A76D46,0x506E03F,0x4381,0x180000,0x0,0x0,0x0},{0xDFAAA11,0x1C21185,0x12B0C0,0x3C,0x2000,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0x32B0CBD,0x11C0A63,0x906CE7E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2},{0x32B0CBC,0x11C0A63,0x906CE7E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2},{0x32B0CBC,0x11C0A63,0x906CE7E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2},{0x7802562,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x32B0CBC,0x11C0A63,0x906CE7E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2},{0x32B0CBD,0x11C0A63,0x906CE7E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2},{0x32B0CBC,0x11C0A63,0x906CE7E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2}},{{0x7802562,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x7802561,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x3C012B2,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xF004AC2,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xF6AFA0A,0x11C0A62,0x906CE3E,0xD6EE0CC,0x6D2C43F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2},{0x3C012B2,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 2; -const BIG CURVE_B= {0x2L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x11C0A636EB1F6DL,0xD6EE0CC906CEBEL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L}; -const BIG CURVE_Gx= {0x6623EF5C1B55B2L,0xD6EE18093EE1BEL,0x647A6366D3243FL,0x8702A0DB0BDDFL,0x24000000L}; -const BIG CURVE_Gy= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0x3C012B1L,0x40L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxa= {0xC3E806CB5FAAF5L,0xB8E61B99362851L,0x73CB19C2F0944FL,0x7F9A9B4FA7121CL,0x1AC95A5BL}; -const BIG CURVE_Pxb= {0xE50060FC15F433L,0x33A1ABDA094DEDL,0xD1681F364C1BBAL,0x36566043F11C2L,0x53D3001L}; -const BIG CURVE_Pya= {0x33216A9772A299L,0xF0936EA3484E68L,0xFEF918406479DFL,0xB09E6FB2EE06BBL,0x15727970L}; -const BIG CURVE_Pyb= {0x1BC11F9C49E8CDL,0x56091A061ADC4L,0x7F56070166D320L,0x2AC189FD57BD7L,0x11BCB56CL}; -const BIG CURVE_W[2]= {{0x546349162FEB83L,0xB40381200L,0x6000L,0x0L,0x0L},{0x7802561L,0x80L,0x0L,0x0L,0x0L}}; -const BIG CURVE_SB[2][2]= {{{0x5463491DB010E4L,0xB40381280L,0x6000L,0x0L,0x0L},{0x7802561L,0x80L,0x0L,0x0L,0x0L}},{{0x7802561L,0x80L,0x0L,0x0L,0x0L},{0xBD5D5D20BB33EAL,0xD6EE0188CEBCBDL,0x647A6366D2643FL,0x8702A0DB0BDDFL,0x24000000L}}}; -const BIG CURVE_WB[4]= {{0x1C2118567A84B0L,0x3C012B040L,0x2000L,0x0L,0x0L},{0xCDF995BE220475L,0x94EDA8CA7F9A36L,0x8702A0DC07EL,0x300000L,0x0L},{0x66FCCAE0F10B93L,0x4A76D4653FCD3BL,0x4381506E03FL,0x180000L,0x0L},{0x1C21185DFAAA11L,0x3C012B0C0L,0x2000L,0x0L,0x0L}}; -const BIG CURVE_BB[4][4]= {{{0x11C0A6332B0CBDL,0xD6EE0CC906CE7EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L},{0x11C0A6332B0CBCL,0xD6EE0CC906CE7EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L},{0x11C0A6332B0CBCL,0xD6EE0CC906CE7EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L},{0x7802562L,0x80L,0x0L,0x0L,0x0L}},{{0x7802561L,0x80L,0x0L,0x0L,0x0L},{0x11C0A6332B0CBCL,0xD6EE0CC906CE7EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L},{0x11C0A6332B0CBDL,0xD6EE0CC906CE7EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L},{0x11C0A6332B0CBCL,0xD6EE0CC906CE7EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L}},{{0x7802562L,0x80L,0x0L,0x0L,0x0L},{0x7802561L,0x80L,0x0L,0x0L,0x0L},{0x7802561L,0x80L,0x0L,0x0L,0x0L},{0x7802561L,0x80L,0x0L,0x0L,0x0L}},{{0x3C012B2L,0x40L,0x0L,0x0L,0x0L},{0xF004AC2L,0x100L,0x0L,0x0L,0x0L},{0x11C0A62F6AFA0AL,0xD6EE0CC906CE3EL,0x647A6366D2C43FL,0x8702A0DB0BDDFL,0x24000000L},{0x3C012B2L,0x40L,0x0L,0x0L,0x0L}}}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN462.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN462.cpp deleted file mode 100644 index ac358ab..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BN462.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BN462.h" - -namespace BN462 { -/* Curve BN462 - Pairing friendly BN curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B464_28; - -//*** rom curve parameters ***** -// Base Bits= 28 -// Ate Bits= 118 -// G2 Table size= 125 - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x10800D,0x1B007E,0x24,0xF7C0000,0xC7BF717,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}; -const BIG CURVE_Gx= {0x6B6980D,0x98D91F3,0xD70113C,0x372E5C,0xE79239C,0x416A0B1,0xBB4E69A,0x689DB1B,0x3CF4B2E,0xB3EDBEC,0x6F95F63,0xAC9264B,0x30160B9,0xBA34A0A,0x191FAD,0xD67EF25,0x21A6}; -const BIG CURVE_Gy= {0x6FB03DE,0xA5734D3,0x22ECAA8,0xC666006,0xF475432,0xE40EB80,0xDF11B8A,0x6E6AF77,0x5965042,0x7D788C6,0x42CCCFA,0x90EEDA8,0xA7432A4,0x2B33676,0x7F7ABB8,0xEA0460F,0x118}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Bnx= {0xFFFBFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0xAE1E4DF,0x8E3D934,0x769546,0x6A8B488,0xAE1F0AA,0x92E0032,0x2699BAD,0x208F9AD,0x3820408,0xED61C91,0x7C1CD96,0x2E0337E,0xCBDC548,0xB38E3A8,0x8DDA0DF,0xCCC85B5,0x257}; -const BIG CURVE_Pxb= {0xA8CD283,0x108BA6A,0x50E9B73,0x59BF7E8,0xF50AF8B,0xB783718,0x6BAE555,0x8134DD8,0x84058B1,0xED91768,0x54730CB,0xC98E2A3,0x9566BA3,0x8EDCA84,0x99102AF,0x4343E85,0x1D2E}; -const BIG CURVE_Pya= {0xDB7154E,0x5B68DF0,0x7C3376E,0xE7B11D,0x3695A14,0xDAE32E0,0x1F41C9D,0xF1399A,0xB42FE81,0x3FA7A6B,0x706E23C,0xA035634,0x20809EC,0x517427A,0x22C1979,0x50439DA,0xA06}; -const BIG CURVE_Pyb= {0xCA2A93A,0x14CC552,0x93B9EBA,0xD537434,0x387AA68,0xA04EF87,0x7692444,0x725CC64,0xAB370FD,0x7B393F1,0xC69AC5,0x44D5E6B,0x306324D,0x2C8AE37,0x8CBE017,0xF0CBD43,0x73E}; -const BIG CURVE_W[2]= {{0x20003,0x6,0x0,0xFF00000,0xFF3FF7F,0xFFFFFFF,0xFFFFFFF,0x60017F,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFF7FFF,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0x28004,0x6,0x0,0xFEC0000,0xFF3FF77,0xFFFFFFF,0xFFFFFFF,0x60017F,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x11000E,0x1B007E,0x24,0xF780000,0xC7BF70F,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}},{{0xFFF7FFF,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x20003,0x6,0x0,0xFF00000,0xFF3FF7F,0xFFFFFFF,0xFFFFFFF,0x60017F,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; -const BIG CURVE_WB[4]= {{0x4000,0x2,0x0,0xFFE0000,0xFFBFFDB,0xFFFFFFF,0xFFFFFFF,0x20007F,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFABFFB,0xFFCFFE3,0xFFFFFFF,0x29FFFF,0x800214,0x90,0x0,0xBFFF900,0xF6FF53F,0xFFFFFFF,0x5FFFFFF,0x4802400,0x300,0x0,0x0,0x0,0x0},{0xFFD3FFD,0xFFE7FF1,0xFFFFFFF,0x15FFFF,0x40010C,0x48,0x0,0xDFFFC80,0xFB7FA9F,0xFFFFFFF,0x2FFFFFF,0x2401200,0x180,0x0,0x0,0x0,0x0},{0xC001,0x2,0x0,0xFFA0000,0xFFBFFD3,0xFFFFFFF,0xFFFFFFF,0x20007F,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0xFFFC000,0xFFFFFFF,0xFFFFFFF,0x1FFFF,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFFBFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFFBFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x11000F,0x1B007E,0x24,0xF780000,0xC7BF70F,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}},{{0xFFF7FFF,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x10C00E,0x1B007E,0x24,0xF7A0000,0xC7BF713,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404},{0x10C00D,0x1B007E,0x24,0xF7A0000,0xC7BF713,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404},{0x10C00E,0x1B007E,0x24,0xF7A0000,0xC7BF713,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}},{{0xFFF7FFE,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFF7FFF,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFF7FFF,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xFFF7FFF,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x10C00F,0x1B007E,0x24,0xF7A0000,0xC7BF713,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404},{0x11800F,0x1B007E,0x24,0xF740000,0xC7BF707,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404},{0xFFF7FFD,0xFFFFFFF,0xFFFFFFF,0x3FFFF,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x10C00F,0x1B007E,0x24,0xF7A0000,0xC7BF713,0xF6FF66F,0xFFFFFFF,0xC201F7F,0x2908EE1,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}}}; - -#endif - -#if CHUNK==64 - -using namespace B464_60; - -//*** rom curve parameters ***** -// Base Bits= 60 -// Ate Bits= 118 -// G2 Table size= 125 - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x401B007E010800DL,0x17F7C0000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}; -const BIG CURVE_Gx= {0xC98D91F36B6980DL,0x9C0372E5CD70113L,0x69A416A0B1E7923L,0x4B2E689DB1BBB4EL,0x95F63B3EDBEC3CFL,0x160B9AC9264B6FL,0x191FADBA34A0A3L,0x21A6D67EF25L}; -const BIG CURVE_Gy= {0x8A5734D36FB03DEL,0x32C66600622ECAAL,0xB8AE40EB80F4754L,0x50426E6AF77DF11L,0xCCCFA7D788C6596L,0x7432A490EEDA842L,0x7F7ABB82B33676AL,0x118EA0460FL}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0xFFFFFFFFFFFBFFFL,0x4001FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cru= {0x401F80A801A401AL,0xDBF2E0000000002L,0xFFFF6FF597BBBF3L,0x9F0222029FFFFFFL,0xD81368L,0xFF08764BD65FC10L,0x23FFFFFFFFFF6L,0x24048036012L}; -const BIG CURVE_Pxa= {0x68E3D934AE1E4DFL,0xAA6A8B488076954L,0xBAD92E0032AE1F0L,0x408208F9AD2699L,0x1CD96ED61C91382L,0xBDC5482E0337E7CL,0x8DDA0DFB38E3A8CL,0x257CCC85B5L}; -const BIG CURVE_Pxb= {0x3108BA6AA8CD283L,0x8B59BF7E850E9B7L,0x555B783718F50AFL,0x58B18134DD86BAEL,0x730CBED91768840L,0x566BA3C98E2A354L,0x99102AF8EDCA849L,0x1D2E4343E85L}; -const BIG CURVE_Pya= {0xE5B68DF0DB7154EL,0x140E7B11D7C3376L,0xC9DDAE32E03695AL,0xFE810F1399A1F41L,0x6E23C3FA7A6BB42L,0x809ECA03563470L,0x22C1979517427A2L,0xA0650439DAL}; -const BIG CURVE_Pyb= {0xA14CC552CA2A93AL,0x68D53743493B9EBL,0x444A04EF87387AAL,0x70FD725CC647692L,0x69AC57B393F1AB3L,0x6324D44D5E6B0CL,0x8CBE0172C8AE373L,0x73EF0CBD43L}; -const BIG CURVE_W[2]= {{0x60020003L,0x7FFF00000000000L,0xFFFFFFFFFFFF3FFL,0x60060017FFFFFL,0x0L,0x0L,0x0L,0x0L},{0xFFFFFFFFFFF7FFFL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}}; -const BIG CURVE_SB[2][2]= {{{0x60028004L,0x77FEC0000000000L,0xFFFFFFFFFFFF3FFL,0x60060017FFFFFL,0x0L,0x0L,0x0L,0x0L},{0x401B007E011000EL,0xFF780000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}},{{0xFFFFFFFFFFF7FFFL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x60020003L,0x7FFF00000000000L,0xFFFFFFFFFFFF3FFL,0x60060017FFFFFL,0x0L,0x0L,0x0L,0x0L}}}; -const BIG CURVE_WB[4]= {{0x20004000L,0xDBFFE0000000000L,0xFFFFFFFFFFFFBFFL,0x20020007FFFFFL,0x0L,0x0L,0x0L,0x0L},{0xFFFCFFE3FFABFFBL,0x14029FFFFFFFFFFL,0x9008002L,0xF53FBFFF9000000L,0xFFFFFFFFFFFFF6FL,0x30048024005FL,0x0L,0x0L},{0xFFFE7FF1FFD3FFDL,0xC015FFFFFFFFFFL,0x4804001L,0xFA9FDFFFC800000L,0xFFFFFFFFFFFFFB7L,0x18024012002FL,0x0L,0x0L},{0x2000C001L,0xD3FFA0000000000L,0xFFFFFFFFFFFFBFFL,0x20020007FFFFFL,0x0L,0x0L,0x0L,0x0L}}; -const BIG CURVE_BB[4][4]= {{{0xFFFFFFFFFFFC000L,0x4001FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFFFFFFFFFFBFFFL,0x4001FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFFFFFFFFFFBFFFL,0x4001FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x401B007E011000FL,0xFF780000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}},{{0xFFFFFFFFFFF7FFFL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x401B007E010C00EL,0x13F7A0000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L},{0x401B007E010C00DL,0x13F7A0000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L},{0x401B007E010C00EL,0x13F7A0000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}},{{0xFFFFFFFFFFF7FFEL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFFFFFFFFFF7FFFL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFFFFFFFFFF7FFFL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xFFFFFFFFFFF7FFFL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}},{{0x401B007E010C00FL,0x13F7A0000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L},{0x401B007E011800FL,0x7F740000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L},{0xFFFFFFFFFFF7FFDL,0x8003FFFFFFFFFFL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x401B007E010C00FL,0x13F7A0000000002L,0xFFFF6FF66FC7BF7L,0x8EE1C201F7FFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}}}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BRAINPOOL.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BRAINPOOL.cpp deleted file mode 100644 index 93b5380..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_BRAINPOOL.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_BRAINPOOL.h" - -namespace BRAINPOOL { - -/* Brainpool Curve */ -/* Note that the original curve has been transformed to an isomorphic curve with A=-3 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xEE92B04,0xE58101F,0xF49256A,0xEBC4AF2,0x6B7BF93,0x733D0B7,0x4FE66A7,0x30D84EA,0x62C61C4,0x6}; -const BIG CURVE_Order= {0x74856A7,0x1E0E829,0x1A6F790,0x7AA3B56,0xD718C39,0x909D838,0xC3E660A,0xA1EEA9B,0x9FB57DB,0xA}; -const BIG CURVE_Gx= {0xE1305F4,0xA191562,0xFBC2B79,0x42C47AA,0x149AFA1,0xB23A656,0x7732213,0xC1CFE7B,0x3E8EB3C,0xA}; -const BIG CURVE_Gy= {0xB25C9BE,0xABE8F35,0x27001D,0xB6DE39D,0x17E69BC,0xE146444,0xD7F7B22,0x3439C56,0xD996C82,0x2}; -const BIG CURVE_HTPC= {0x3BC7B16,0xBC14BB0,0xAE888EB,0x30D22DE,0xD959247,0xDF0183F,0x1737593,0xF0C052E,0x665C79C,0x6}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xE58101FEE92B04L,0xEBC4AF2F49256AL,0x733D0B76B7BF93L,0x30D84EA4FE66A7L,0x662C61C4L}; -const BIG CURVE_Order= {0x1E0E82974856A7L,0x7AA3B561A6F790L,0x909D838D718C39L,0xA1EEA9BC3E660AL,0xA9FB57DBL}; -const BIG CURVE_Gx= {0xA191562E1305F4L,0x42C47AAFBC2B79L,0xB23A656149AFA1L,0xC1CFE7B7732213L,0xA3E8EB3CL}; -const BIG CURVE_Gy= {0xABE8F35B25C9BEL,0xB6DE39D027001DL,0xE14644417E69BCL,0x3439C56D7F7B22L,0x2D996C82L}; -const BIG CURVE_HTPC= {0xBC14BB03BC7B16L,0x30D22DEAE888EBL,0xDF0183FD959247L,0xF0C052E1737593L,0x6665C79CL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1174.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1174.cpp deleted file mode 100644 index 072be5e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1174.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_C1174.h" - -namespace C1174 { - -/* Curve C1174 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -1174; -const BIG CURVE_B= {0x1FFFFB61,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG CURVE_Order= {0x1166C971,0xA26A2FE,0x14C1CD22,0x12CB89BF,0x1FFFFF77,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFF}; -const BIG CURVE_Gx= {0x1CE29EDA,0x1091F93D,0xBB35945,0x3B2D492,0x1A190C02,0x1773E014,0x111E4D0E,0x19D4611,0x37FBB}; -const BIG CURVE_Gy= {0x1B46360E,0x6658DFC,0xFE5DAE9,0x5BDC55E,0xE0C4FE,0x208B4C2,0x1F31995A,0x105A8FF6,0x6B72F}; -const BIG CURVE_HTPC= {0x1FFFFFF6,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= -1174; -const BIG CURVE_B= {0xFFFFFFFFFFFB61L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x7FFFFFFL}; -const BIG CURVE_Order= {0x44D45FD166C971L,0x65C4DFD3073489L,0xFFFFFFFFFFF779L,0xFFFFFFFFFFFFFFL,0x1FFFFFFL}; -const BIG CURVE_Gx= {0x123F27BCE29EDAL,0xD96A492ECD6516L,0xE7C029A190C021L,0xEA308C479343AEL,0x37FBB0CL}; -const BIG CURVE_Gy= {0xCCB1BF9B46360EL,0xDEE2AF3F976BA4L,0x1169840E0C4FE2L,0xD47FB7CC665684L,0x6B72F82L}; -const BIG CURVE_HTPC= {0xFFFFFFFFFFFFF6L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x7FFFFFFL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C13318.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C13318.cpp deleted file mode 100644 index a7ca2a5..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C13318.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_C13318.h" - -namespace C13318 { - -/* C13318 */ - -#if CHUNK==16 -/* C13318 Curve */ -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 13318; -const BIG CURVE_B= {0x3406,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0xDC2CBE3,0x1BE896E2,0x1AE345BA,0xCA9F07B,0xF4F,0x0,0x0,0x0,0x800000}; -const BIG CURVE_Gx= {0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gy= {0xB6EAD0B,0x6469AA3,0x5B6D6E,0x1996099E,0x166369D4,0x18728B34,0x1BC4E058,0x1B24D794,0x6675AA}; -const BIG CURVE_HTPC= {0x507504F,0x13B86C9D,0x5FC8F18,0x31806AD,0x1EBD397A,0x264F7E,0x1E16569A,0x804FC1D,0x55C192}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 13318; -const BIG CURVE_B= {0x3406L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x7D12DC4DC2CBE3L,0x54F83DEB8D16EBL,0xF4F6L,0x0L,0x80000000L}; -const BIG CURVE_Gx= {0x5L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Gy= {0xC8D3546B6EAD0BL,0xCB04CF016DB5B8L,0xE5166966369D4CL,0x26BCA6F1381630L,0x6675AAD9L}; -const BIG CURVE_HTPC= {0x770D93A507504FL,0x8C035697F23C62L,0x4C9EFDEBD397A1L,0x27E0EF8595A680L,0x55C19240L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1665.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1665.cpp deleted file mode 100644 index c7f513e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C1665.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_C1665.h" - -namespace C1665 { - -/* Curve C1665 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B168_29; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 5766; -const BIG CURVE_B= {0x1686,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1DBA8B27,0x7F854C,0x1F57BC06,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG CURVE_Gx= {0x19D52398,0x138DCEDF,0x183D99B1,0x1340C31D,0x1A505B80,0xA64A6}; -const BIG CURVE_Gy= {0x4920345,0x3843D92,0x758B70B,0x77F8EE7,0x149BC0A1,0x14A0A2}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0}; -#endif - -#if CHUNK==64 - -using namespace B168_60; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L}; -const int CURVE_B_I= 5766; -const BIG CURVE_B= {0x1686L,0x0L,0x0L}; -const BIG CURVE_Order= {0x80FF0A99DBA8B27L,0xFFFFFFFFFD5EF01L,0xFFFFFFFFFFFL}; -const BIG CURVE_Gx= {0x671B9DBF9D52398L,0x9A0618EE0F666CL,0x14C94DA505B8L}; -const BIG CURVE_Gy= {0xC7087B244920345L,0x13BFC7739D62DC2L,0x29414549BC0AL}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C25519.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C25519.cpp deleted file mode 100644 index 9dcf93b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C25519.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_C25519.h" - -namespace C25519 { - -/* Curve 25519 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1CF5D3ED,0x9318D2,0x1DE73596,0x1DF3BD45,0x14D,0x0,0x0,0x0,0x100000}; -const BIG CURVE_Gx= {0x9}; -const BIG CURVE_HTPC= {0x507504F,0x13B86C9D,0x5FC8F18,0x31806AD,0x1EBD397A,0x264F7E,0x1E16569A,0x804FC1D,0x55C192}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x12631A5CF5D3ED,0xF9DEA2F79CD658,0x14DE,0x0,0x10000000}; -const BIG CURVE_Gx= {0x9}; -const BIG CURVE_HTPC= {0x770D93A507504FL,0x8C035697F23C62L,0x4C9EFDEBD397A1L,0x27E0EF8595A680L,0x55C19240L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C41417.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C41417.cpp deleted file mode 100644 index 29331e6..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_C41417.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_C41417.h" - -namespace C41417 { - -/* Curve C41417 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B416_29; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 3617; -const BIG CURVE_B= {0xE21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x106AF79,0x18738D2F,0x18F3C606,0x1806715A,0x22B36F1,0xA67B830,0xCF32490,0x1FFFFFFD,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1F}; -const BIG CURVE_Gx= {0x13CBC595,0x7E9C097,0x14DF1931,0x14E7F550,0x1A111301,0x15A6B6B5,0xD526292,0x18FEAFFE,0x1F44C03E,0x1E6A31B4,0x70C9B97,0x43180C6,0x1443300,0x19A4828A,0x68}; -const BIG CURVE_Gy= {0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1FFFFFEE,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFF}; -#endif - -#if CHUNK==64 - -using namespace B416_60; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 3617; -const BIG CURVE_B= {0xE21L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xB0E71A5E106AF79L,0x1C0338AD63CF181L,0x414CF706022B36FL,0xFFFFFFFFEB3CC92L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x7FFFFFFFFFFFFL}; -const BIG CURVE_Gx= {0x4FD3812F3CBC595L,0x1A73FAA8537C64CL,0x4AB4D6D6BA11130L,0x3EC7F57FF35498AL,0xE5FCD46369F44C0L,0x300218C0631C326L,0x1A334905141443L}; -const BIG CURVE_Gy= {0x22L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0xFFFFFFFFFFFFFEEL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed25519.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed25519.cpp deleted file mode 100644 index da51d2e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed25519.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_Ed25519.h" - -namespace Ed25519 { - -/* Ed25519 */ - -#if CHUNK==16 -/* Ed25519 Curve */ - -using namespace B256_13; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x18A3,0x1ACB,0x1284,0x169B,0x175E,0xC55,0x507,0x9A8,0x100A,0x3,0x1A26,0xEF3,0x797,0x3A0,0xE33,0x1FCE,0xB6F,0x771,0xDB,0xA4}; -const BIG CURVE_Order= {0x13ED,0x7AE,0x697,0x4C6,0x581,0xE6B,0xBDE,0x1BD4,0x1EF9,0xA6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20}; -const BIG CURVE_Gx= {0x151A,0x192E,0x1823,0xC5A,0xC95,0x13D9,0x1496,0xC12,0xCC7,0x349,0x1717,0x1BAD,0x31F,0x1271,0x1B02,0xA7F,0xD6E,0x169E,0x1A4D,0x42}; -const BIG CURVE_Gy= {0x658,0x1333,0x1999,0xCCC,0x666,0x1333,0x1999,0xCCC,0x666,0x1333,0x1999,0xCCC,0x666,0x1333,0x1999,0xCCC,0x666,0x1333,0x1999,0xCC}; -const BIG CURVE_HTPC= {0x104F,0x83A,0x4E9,0xE1B,0x627,0x191E,0x1A5F,0x6A,0x18C,0x1CBD,0x1AF4,0x1DFB,0x4C9,0x1340,0x1656,0x1DF0,0x7E0,0x1201,0x1064,0xAB}; -#endif - -#if CHUNK==32 - -using namespace B256_29; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x135978A3,0xF5A6E50,0x10762ADD,0x149A82,0x1E898007,0x3CBBBC,0x19CE331D,0x1DC56DFF,0x52036C}; -const BIG CURVE_Order= {0x1CF5D3ED,0x9318D2,0x1DE73596,0x1DF3BD45,0x14D,0x0,0x0,0x0,0x100000}; -const BIG CURVE_Gx= {0xF25D51A,0xAB16B04,0x969ECB2,0x198EC12A,0xDC5C692,0x1118FEEB,0xFFB0293,0x1A79ADCA,0x216936}; -const BIG CURVE_Gy= {0x6666658,0x13333333,0x19999999,0xCCCCCCC,0x6666666,0x13333333,0x19999999,0xCCCCCCC,0x666666}; -const BIG CURVE_HTPC= {0x507504F,0x13B86C9D,0x5FC8F18,0x31806AD,0x1EBD397A,0x264F7E,0x1E16569A,0x804FC1D,0x55C192}; - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xEB4DCA135978A3L,0xA4D4141D8AB75L,0x797779E8980070L,0x2B6FFE738CC740L,0x52036CEEL}; -const BIG CURVE_Order= {0x12631A5CF5D3EDL,0xF9DEA2F79CD658L,0x14DEL,0x0L,0x10000000L}; -const BIG CURVE_Gx= {0x562D608F25D51AL,0xC7609525A7B2C9L,0x31FDD6DC5C692CL,0xCD6E53FEC0A4E2L,0x216936D3L}; -const BIG CURVE_Gy= {0x66666666666658L,0x66666666666666L,0x66666666666666L,0x66666666666666L,0x66666666L}; -const BIG CURVE_HTPC= {0x770D93A507504FL,0x8C035697F23C62L,0x4C9EFDEBD397A1L,0x27E0EF8595A680L,0x55C19240L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed448.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed448.cpp deleted file mode 100644 index 36a900a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_Ed448.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_Ed448.h" - -namespace Ed448 { - -/* Curve Ed448 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B448_29; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -39081; -const BIG CURVE_B= {0x1FFF6756,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF}; -const BIG CURVE_Order= {0xB5844F3,0x1BC61495,0x1163D548,0x1984E51B,0x3690216,0xDA4D76B,0xFA7113B,0x1FEF9944,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FF}; -//const BIG CURVE_Gx= {0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0x152AAAAA,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x1555}; -//const BIG CURVE_Gy= {0xA9386ED,0x1757DE6F,0x13681AF6,0x19657DA3,0x3098BBB,0x12C19D15,0x12E03595,0xE515B18,0x17B7E36D,0x1AC426E,0xDBB5E8,0x10D8560,0x159D6205,0xB8246D9,0x17A58D2B,0x15C0}; -const BIG CURVE_Gx= {0x70CC05E,0x1135415E,0x24E389,0x1701C316,0x6511433,0xD7B955B,0x11904AB8,0x4947A74,0x7EA6DE3,0x23878BB,0x785195C,0x57E6DB5,0x1D15A62,0x1686F691,0x5C319AF,0x9E3}; -const BIG CURVE_Gy= {0x1230FA14,0x43CADF,0x15F22B66,0x1A26589D,0x39C4FDB,0x1F8E733E,0xB5CEB4F,0x3C0B418,0x87789C,0x1B651CC2,0x12FA9CDC,0xD938EC4,0x7620375,0x1B5E1244,0x1D19C5BA,0xD27}; -const BIG CURVE_HTPC= {0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF}; -#endif - -#if CHUNK==64 - -using namespace B448_58; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= -39081; -const BIG CURVE_B= {0x3FFFFFFFFFF6756L,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL}; -const BIG CURVE_Order= {0x378C292AB5844F3L,0x3309CA37163D548L,0x1B49AED63690216L,0x3FDF3288FA7113BL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFFL}; -//const BIG CURVE_Gx= {0x155555555555555L,0x155555555555555L,0x155555555555555L,0x2A5555555555555L,0x2AAAAAAAAAAAAAAL,0x2AAAAAAAAAAAAAAL,0x2AAAAAAAAAAAAAAL,0x2AAAAAAAAAAL}; -//const BIG CURVE_Gy= {0x2EAFBCDEA9386EDL,0x32CAFB473681AF6L,0x25833A2A3098BBBL,0x1CA2B6312E03595L,0x35884DD7B7E36DL,0x21B0AC00DBB5E8L,0x17048DB359D6205L,0x2B817A58D2BL}; -const BIG CURVE_Gx= {0x226A82BC70CC05EL,0x2E03862C024E389L,0x1AF72AB66511433L,0x928F4E91904AB8L,0x470F1767EA6DE3L,0xAFCDB6A785195CL,0x2D0DED221D15A62L,0x13C65C319AFL}; -const BIG CURVE_Gy= {0x8795BF230FA14L,0x344CB13B5F22B66L,0x3F1CE67C39C4FDBL,0x7816830B5CEB4FL,0x36CA3984087789CL,0x1B271D892FA9CDCL,0x36BC24887620375L,0x1A4FD19C5BAL}; -const BIG CURVE_HTPC= {0x3FFFFFFFFFFFFFEL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP256BN.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP256BN.cpp deleted file mode 100644 index 85140ad..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP256BN.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_FP256BN.h" - -namespace FP256BN { - -/* Curve BN254 - Pairing friendly BN curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 3; -const BIG CURVE_B= {0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x10B500D,0x2D536CD,0x9921AF6,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}; -const BIG CURVE_Gx= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gy= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0xB0A801,0x82F5C03,0x68,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0x9C09EFB,0x2616B68,0xF843CD2,0x539A12B,0x13ACE1C,0x577C289,0x28560F,0xB4C96C2,0xE0C3350,0xF}; -const BIG CURVE_Pxb= {0x37E6A2B,0x69ED34A,0x3589D2,0x78E287D,0x3B924DD,0xC637D81,0x4DB5AE1,0x738AC05,0xEA66057,0x4}; -const BIG CURVE_Pya= {0xEDC27FF,0x9B481B,0x15848E9,0x24758D6,0xE51EFCB,0x75124E3,0x376770D,0xC542A3B,0x2046E7,0x7}; -const BIG CURVE_Pyb= {0xAAD049B,0x1281114,0xA98B3E0,0xBE80821,0x29F8B4C,0x49297EB,0x42EEA6,0xD388C29,0x554E3BC,0x0}; -const BIG CURVE_W[2]= {{0xB054003,0xF0036E1,0xE78663A,0xFFFFFFF,0xFFFF,0x0,0x0,0x0,0x0,0x0},{0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0xC669004,0xF5EEEE7,0xE78670B,0xFFFFFFF,0xFFFF,0x0,0x0,0x0,0x0,0x0},{0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x606100A,0x3D4FFEB,0xB19B4BB,0x65FB129,0x49D0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}}}; -const BIG CURVE_WB[4]= {{0xD30A800,0x20678F0,0x4D2CC10,0x5555555,0x5555,0x0,0x0,0x0,0x0,0x0},{0xD7DC805,0xD6764C0,0xBC3AD1A,0x8FBEA10,0x4467DE,0x8061601,0xD105EB,0x0,0x0,0x0},{0xF173803,0xACB6061,0x5E1D6C1,0x47DF508,0x82233EF,0xC030B00,0x6882F5,0x0,0x0,0x0},{0xE91F801,0x26530F6,0x4D2CCE1,0x5555555,0x5555,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0x5AA80D,0xAA5DACA,0x9921A8D,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}, - {0x5AA80C,0xAA5DACA,0x9921A8D,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}, - {0x5AA80C,0xAA5DACA,0x9921A8D,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}, - {0x1615002,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}, - {{0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x5AA80C,0xAA5DACA,0x9921A8D,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}, - {0x5AA80D,0xAA5DACA,0x9921A8D,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}, - {0x5AA80C,0xAA5DACA,0x9921A8D,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}}, - {{0x1615002,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1615001,0x5EB806,0xD1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}, - {{0xB0A802,0x82F5C03,0x68,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x2C2A002,0xBD700C,0x1A2,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0xFAA000A,0x2767EC6,0x9921A25,0x65FB129,0x49E0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}, - {0xB0A802,0x82F5C03,0x68,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; - - - - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 3; -const BIG CURVE_B= {0x3L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x2D536CD10B500DL,0x65FB1299921AF6L,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL}; -const BIG CURVE_Gx= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Gy= {0x2L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0x82F5C030B0A801L,0x68L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxa= {0x2616B689C09EFBL,0x539A12BF843CD2L,0x577C28913ACE1CL,0xB4C96C2028560FL,0xFE0C3350L}; -const BIG CURVE_Pxb= {0x69ED34A37E6A2BL,0x78E287D03589D2L,0xC637D813B924DDL,0x738AC054DB5AE1L,0x4EA66057L}; -const BIG CURVE_Pya= {0x9B481BEDC27FFL,0x24758D615848E9L,0x75124E3E51EFCBL,0xC542A3B376770DL,0x702046E7L}; -const BIG CURVE_Pyb= {0x1281114AAD049BL,0xBE80821A98B3E0L,0x49297EB29F8B4CL,0xD388C29042EEA6L,0x554E3BCL}; -const BIG CURVE_W[2]= {{0xF0036E1B054003L,0xFFFFFFFE78663AL,0xFFFFL,0x0L,0x0L},{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L}}; -const BIG CURVE_SB[2][2]= {{{0xF5EEEE7C669004L,0xFFFFFFFE78670BL,0xFFFFL,0x0L,0x0L},{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L}},{{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L},{0x3D4FFEB606100AL,0x65FB129B19B4BBL,0x5EEE71A49D0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL}}}; -const BIG CURVE_WB[4]= {{0x20678F0D30A800L,0x55555554D2CC10L,0x5555L,0x0L,0x0L},{0xD6764C0D7DC805L,0x8FBEA10BC3AD1AL,0x806160104467DEL,0xD105EBL,0x0L},{0xACB6061F173803L,0x47DF5085E1D6C1L,0xC030B0082233EFL,0x6882F5L,0x0L},{0x26530F6E91F801L,0x55555554D2CCE1L,0x5555L,0x0L,0x0L}}; -const BIG CURVE_BB[4][4]= {{{0xAA5DACA05AA80DL,0x65FB1299921A8DL,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL},{0xAA5DACA05AA80CL,0x65FB1299921A8DL,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL},{0xAA5DACA05AA80CL,0x65FB1299921A8DL,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL},{0x5EB8061615002L,0xD1L,0x0L,0x0L,0x0L}},{{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L},{0xAA5DACA05AA80CL,0x65FB1299921A8DL,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL},{0xAA5DACA05AA80DL,0x65FB1299921A8DL,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL},{0xAA5DACA05AA80CL,0x65FB1299921A8DL,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL}},{{0x5EB8061615002L,0xD1L,0x0L,0x0L,0x0L},{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L},{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L},{0x5EB8061615001L,0xD1L,0x0L,0x0L,0x0L}},{{0x82F5C030B0A802L,0x68L,0x0L,0x0L,0x0L},{0xBD700C2C2A002L,0x1A2L,0x0L,0x0L,0x0L},{0x2767EC6FAA000AL,0x65FB1299921A25L,0x5EEE71A49E0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL},{0x82F5C030B0A802L,0x68L,0x0L,0x0L,0x0L}}}; - - - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP512BN.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP512BN.cpp deleted file mode 100644 index c9a2edf..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_FP512BN.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_FP512BN.h" - -namespace FP512BN { - -/* Curve FP512BN - Pairing friendly BN curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B512_29; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 3; -const BIG CURVE_B= {0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x119A09ED,0x153252FA,0x1E68AD01,0x627C09,0x79A34A1,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG CURVE_Gx= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gy= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Bnx= {0x1E1BD80F,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - -const BIG CURVE_Pxa= {0xDB646B5,0x183D4B70,0x1CBFFA3,0x11F0E632,0x1C78F221,0x1F10DE5D,0x171B715E,0xF0C6A29,0x10B02453,0xBE63C66,0xE6D5F69,0x166B1E1B,0x4BBBD29,0x179E750F,0x6E9D04,0xC912B10,0x1339E138,0x1D8B2}; -const BIG CURVE_Pxb= {0x1A8AE0E9,0xDAE5F7E,0x22446CF,0x1948239B,0x15ADCE40,0xB709C1E,0x18357943,0xE50AA4D,0x19781E22,0x12B35CA6,0x11DAA2C0,0x18D8DDE4,0x5EA656D,0x15F45A41,0xD311A02,0xCFCD913,0x13CBF850,0x240E0}; -const BIG CURVE_Pya= {0xDDE67A1,0x12401895,0x17BEE178,0x142F5AC2,0xB7BC5CD,0x92A1404,0x1A3B748C,0x17BD82A7,0x14B6CD18,0xAC34CE,0x1740FB97,0x1ECC15F9,0x17085B1D,0x1D1BA793,0x1BD6AC32,0x18F70525,0xC84C827,0x3780F}; -const BIG CURVE_Pyb= {0x84F8E8B,0xC5B8C36,0xFDD85A1,0xB84449,0x19C08DFF,0x56BF713,0x1C5290C4,0x187C5CA0,0x1DA2897F,0x24B0CA0,0x326D8F4,0x2310CF6,0x1021438C,0xFBAEC8F,0xD9030C5,0x1CF06358,0x1CEC8B04,0x28D1D}; -const BIG CURVE_W[2]= {{0x9834583,0x887C4BA,0x5A85CFC,0xBF7223A,0xF63FE96,0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_SB[2][2]= {{{0xD4B9564,0x1D575904,0xD2C64F3,0x202177,0xF63F186,0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x156259CE,0xA01E744,0x5ECB4F9,0x148B7B47,0x79A2790,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}},{{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x9834583,0x887C4BA,0x5A85CFC,0xBF7223A,0xF63FE96,0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}; -const BIG CURVE_WB[4]= {{0x155A29F0,0x16D59B55,0xF4C305,0x18858C0B,0x5215FBF,0xAAAAAAA,0x15555555,0xAAAAAAA,0x555555,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2355D4B,0x1758095D,0x1FE13C5F,0x41F83FA,0xBB5E5CF,0x97D4EF1,0xB503D62,0x172C0C9B,0x16315274,0x15E1A9A8,0x859835D,0x2C3DFC0,0x105EB806,0x68,0x0,0x0,0x0,0x0},{0x289AAD,0x1E781F9C,0x60F9C31,0x1505822E,0x15DAF62B,0x4BEA778,0x15A81EB1,0xB96064D,0xB18A93A,0x1AF0D4D4,0x42CC1AE,0x161EFE0,0x82F5C03,0x34,0x0,0x0,0x0,0x0},{0x192279D1,0xBA52F9F,0x878CAFD,0xCAE8B48,0x52152AF,0xAAAAAAA,0x15555555,0xAAAAAAA,0x555555,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; -const BIG CURVE_BB[4][4]= {{{0x1E1BD810,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1E1BD80F,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1E1BD80F,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x156259CF,0xA01E744,0x5ECB4F9,0x148B7B47,0x79A2790,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}}, - {{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x137E31DE,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}, - {0x137E31DD,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}, - {0x137E31DE,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}}, - {{0x1C37B01E,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}, - {{0x137E31DF,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}, - {0x192AA9AF,0x1ED17B8E,0xD70BCF0,0x8B47A84,0x79A1A80,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}, - {0x1C37B01D,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, - {0x137E31DF,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}}}; - - - -#endif - -#if CHUNK==64 - -using namespace B512_60; - -const int CURVE_Cof_I=1; -const int CURVE_B_I= 3; -const BIG CURVE_B= {0x3L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x6A64A5F519A09EDL,0x10313E04F9A2B40L,0xC65DEAB2679A34AL,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Gx= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Gy= {0x2L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Bnx= {0xB306BB5E1BD80FL,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -const BIG CURVE_Pxa= {0xF07A96E0DB646B5L,0x18F87319072FFE8L,0x7BE21BCBBC78F22L,0x537863514DC6DC5L,0xDA57CC78CD0B024L,0xD29B358F0DB9B57L,0x7412F3CEA1E4BBBL,0xE138648958801BAL,0x3B165339L}; -const BIG CURVE_Pxb= {0xDB5CBEFDA8AE0E9L,0xCA411CD88911B3L,0xD6E1383D5ADCE4L,0x227285526E0D5E5L,0xB02566B94D9781EL,0x56DC6C6EF2476A8L,0x680ABE8B4825EA6L,0xF85067E6C89B4C4L,0x481C13CBL}; -const BIG CURVE_Pya= {0x2480312ADDE67A1L,0xDA17AD615EFB85EL,0x312542808B7BC5CL,0x18BDEC153E8EDD2L,0xE5C158699D4B6CDL,0xB1DF660AFCDD03EL,0xB0CBA374F277085L,0xC827C7B8292EF5AL,0x6F01EC84L}; -const BIG CURVE_Pyb= {0x58B7186C84F8E8BL,0xF05C2224BF76168L,0x10AD7EE279C08DFL,0x7FC3E2E50714A43L,0x3D04961941DA289L,0x38C118867B0C9B6L,0xC315F75D91F0214L,0x8B04E7831AC3640L,0x51A3BCECL}; - - -const BIG CURVE_W[2]= {{0x110F89749834583L,0x65FB911D16A173FL,0xFFFFFFFFCF63FE9L,0xFFFFFFFFFFFFFFFL,0xFFFFL,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}}; -const BIG CURVE_SB[2][2]= {{{0xFAAEB208D4B9564L,0x601010BBB4B193CL,0xFFFFFFFFCF63F18L,0xFFFFFFFFFFFFFFFL,0xFFFFL,0x0L,0x0L,0x0L,0x0L},{0x5403CE8956259CEL,0xA45BDA397B2D3EL,0xC65DEAB2679A279L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}},{{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x110F89749834583L,0x65FB911D16A173FL,0xFFFFFFFFCF63FE9L,0xFFFFFFFFFFFFFFFL,0xFFFFL,0x0L,0x0L,0x0L,0x0L}}}; -const BIG CURVE_WB[4]= {{0x6DAB36AB55A29F0L,0xFC42C60583D30C1L,0x5555555545215FBL,0x555555555555555L,0x5555L,0x0L,0x0L,0x0L,0x0L}, - {0xEEB012BA2355D4BL,0xF20FC1FD7F84F17L,0x892FA9DE2BB5E5CL,0x74B96064DAD40F5L,0xD76BC3535163152L,0x806161EFE021660L,0xD105EBL,0x0L,0x0L}, - {0x7CF03F380289AADL,0xBA82C117183E70CL,0xC497D4EF15DAF62L,0x3A5CB0326D6A07AL,0x6BB5E1A9A8B18A9L,0xC030B0F7F010B30L,0x6882F5L,0x0L,0x0L}, - {0x574A5F3F92279D1L,0xF65745A421E32BFL,0x55555555452152AL,0x555555555555555L,0x5555L,0x0L,0x0L,0x0L,0x0L}}; -const BIG CURVE_BB[4][4]= {{{0xB306BB5E1BD810L,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xB306BB5E1BD80FL,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xB306BB5E1BD80FL,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x5403CE8956259CFL,0xA45BDA397B2D3EL,0xC65DEAB2679A279L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}}, - {{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x5F343A3F37E31DEL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x5F343A3F37E31DDL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x5F343A3F37E31DEL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}}, - {{0x1660D76BC37B01EL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}}, - {{0x5F343A3F37E31DFL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x3DA2F71D92AA9AFL,0x45A3D4235C2F3CL,0xC65DEAB2679A1A8L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x1660D76BC37B01DL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x5F343A3F37E31DFL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}}}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_HIFIVE.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_HIFIVE.cpp deleted file mode 100644 index 3edc1fa..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_HIFIVE.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_HIFIVE.h" - -namespace HIFIVE { - -/* Curve HIFIVE */ - - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B336_29; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 11111; -const BIG CURVE_B= {0x2B67,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1E9FA805,0x197CACB9,0x1E4EEA9E,0x17AD70F,0x1FA9850C,0x38A0A,0x0,0x0,0x0,0x0,0x0,0x4000}; -const BIG CURVE_Gx= {0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Gy= {0x5FE8632,0x15F63428,0xD976C4,0x1AACA194,0x35B6DB5,0x8E3F7A,0x52D1B0E,0xF0A7A36,0x1C161D00,0x8170C70,0x1185AD59,0x181B}; -const BIG CURVE_HTPC= {0x5531622,0x11FEDF60,0x182A7392,0x16BAC746,0x1A3512D9,0x49580D5,0xE77C13C,0x1AAC2086,0x1E3A6A5,0x2B61FB8,0x783F9C2,0x6C0}; -#endif - -#if CHUNK==64 - -using namespace B336_60; - -const int CURVE_Cof_I=8; -const BIG CURVE_Cof= {0x8L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 11111; -const BIG CURVE_B= {0x2B67L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xB2F95973E9FA805L,0xC0BD6B87F93BAA7L,0x71415FA9850L,0x0L,0x0L,0x200000000L}; -const BIG CURVE_Gx= {0xCL,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Gy= {0x2BEC68505FE8632L,0x5D5650CA0365DB1L,0x3811C7EF435B6DBL,0x7853D1B14B46CL,0x56502E18E1C161DL,0xC0DC616BL}; -const BIG CURVE_HTPC= {0xA3FDBEC05531622L,0x9B5D63A360A9CE4L,0xF092B01ABA3512DL,0xA5D56104339DF04L,0x70856C3F701E3A6L,0x3601E0FEL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_JUBJUB.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_JUBJUB.cpp deleted file mode 100644 index 6db686a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_JUBJUB.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_JUBJUB.h" - -namespace JUBJUB { - -/* JUBJUB Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -const int CURVE_Cof_I= 8; -const BIG CURVE_Cof= {0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x16343EB1,0x832FEB6,0x15E74980,0x1AFEDA6E,0x17FD4292,0x903F35E,0xD23D7F6,0x1CE97F45,0x2A9318}; -const BIG CURVE_Order= {0x16F72CB7,0x4B872F6,0x120420B4,0x10412799,0x3B00A66,0x1D80809A,0x1EA4199C,0x1D4CA675,0xE7DB4}; -const BIG CURVE_Gx= {0x14F976C4,0x1A7678D3,0x1CE7B79F,0x18A8D7E5,0x4882000,0x1A6F801C,0xE329892,0x55F1DFE,0x518397}; -const BIG CURVE_Gy= {0x1349702E,0x35D6B84,0x9A0CEC5,0x190E0FFF,0x1C308096,0x62D5ECE,0x10B27A3F,0x8E5945F,0x3B43F8}; -const BIG CURVE_HTPC= {0x47BBBB6,0x83D77CF,0x1D4C82A6,0x1BFEA2A2,0xD546E25,0x1765A39E,0x7500F8F,0x168566F6,0x62FD68}; -#endif - -#if CHUNK==64 - -using namespace B256_56; -const int CURVE_Cof_I= 8; -const BIG CURVE_Cof= {0x8L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x65FD6D6343EB1L,0x7F6D37579D2601L,0x7E6BD7FD4292DL,0x4BFA2B48F5FD92L,0x2A9318E7L}; -const BIG CURVE_Order= {0x970E5ED6F72CB7L,0x2093CCC81082D0L,0x101343B00A668L,0x6533AFA906673BL,0xE7DB4EAL}; -const BIG CURVE_Gx= {0x4ECF1A74F976C4L,0x546BF2F39EDE7FL,0xDF00384882000CL,0xF8EFF38CA624B4L,0x5183972AL}; -const BIG CURVE_Gy= {0x6BAD709349702EL,0x8707FFA6833B14L,0x5ABD9DC308096CL,0x2CA2FC2C9E8FCCL,0x3B43F847L}; -const BIG CURVE_HTPC= {0x7AEF9E47BBBB6L,0xFF515175320A99L,0xCB473CD546E25DL,0x2B37B1D403E3EEL,0x62FD68B4L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_MDC.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_MDC.cpp deleted file mode 100644 index 1da8f55..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_MDC.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_MDC.h" - - -namespace MDC { - -/* Million Dollar Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x300CF89,0x9309250,0x1F041EE,0x70F63F2,0x9625F12,0xCCFB0CB,0xA7CDFBF,0x1965B68,0x7130452,0x5}; -const BIG CURVE_Order= {0x1B0F7FB,0x8552F42,0x974BB58,0x8975FAF,0xF534FB3,0xBF75E97,0xD14CBE4,0x7515ABE,0xC4EDA2E,0x3}; -const BIG CURVE_Gx= {0xE68363B,0x2C25BFE,0x713E223,0x2ABB8D2,0xF6350D7,0x1E03CBC,0x3D85B42,0x7F903B8,0x681886A,0xB}; -const BIG CURVE_Gy= {0xD2864B5,0x73C355B,0x93A3A7E,0xBC3D81A,0xA421DA8,0xCF6563D,0x359814D,0xB59C0B0,0xA6734E1,0xC}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x9309250300CF89L,0x70F63F21F041EEL,0xCCFB0CB9625F12L,0x1965B68A7CDFBFL,0x57130452L}; -const BIG CURVE_Order= {0x8552F421B0F7FBL,0x8975FAF974BB58L,0xBF75E97F534FB3L,0x7515ABED14CBE4L,0x3C4EDA2EL}; -const BIG CURVE_Gx= {0x2C25BFEE68363BL,0x2ABB8D2713E223L,0x1E03CBCF6350D7L,0x7F903B83D85B42L,0xB681886AL}; -const BIG CURVE_Gy= {0x73C355BD2864B5L,0xBC3D81A93A3A7EL,0xCF6563DA421DA8L,0xB59C0B0359814DL,0xCA6734E1L}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST256.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST256.cpp deleted file mode 100644 index fd42dc6..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST256.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NIST256.h" - -namespace NIST256 { - -/* Curve NIST256 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x7D2604B,0xCE3C3E2,0x3B0F63B,0x6B0CC5,0x6BC651D,0x5576988,0x7B3EBBD,0xAA3A93E,0xAC635D8,0x5}; -const BIG CURVE_Order= {0xC632551,0xB9CAC2F,0x79E84F3,0xFAADA71,0xFFFBCE6,0xFFFFFFF,0xFFFFFF,0x0,0xFFFFFFF,0xF}; -const BIG CURVE_Gx= {0x898C296,0xA13945D,0xB33A0F4,0x7D812DE,0xF27703,0xE563A44,0x7F8BCE6,0xE12C424,0xB17D1F2,0x6}; -const BIG CURVE_Gy= {0x7BF51F5,0xB640683,0x15ECECB,0x33576B3,0xE162BCE,0x4A7C0F9,0xB8EE7EB,0xFE1A7F9,0xFE342E2,0x4}; -const BIG CURVE_HTPC= {0xC613926,0xB847959,0xA9DD42E,0xB001452,0x5548D3E,0x8F44A65,0x45240B3,0xB63723A,0xA2AD82C,0x6}; - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xCE3C3E27D2604BL,0x6B0CC53B0F63BL,0x55769886BC651DL,0xAA3A93E7B3EBBDL,0x5AC635D8L}; -const BIG CURVE_Order= {0xB9CAC2FC632551L,0xFAADA7179E84F3L,0xFFFFFFFFFFBCE6L,0xFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Gx= {0xA13945D898C296L,0x7D812DEB33A0F4L,0xE563A440F27703L,0xE12C4247F8BCE6L,0x6B17D1F2L}; -const BIG CURVE_Gy= {0xB6406837BF51F5L,0x33576B315ECECBL,0x4A7C0F9E162BCEL,0xFE1A7F9B8EE7EBL,0x4FE342E2L}; -const BIG CURVE_HTPC= {0xB847959C613926L,0xB001452A9DD42EL,0x8F44A655548D3EL,0xB63723A45240B3L,0x6A2AD82CL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST384.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST384.cpp deleted file mode 100644 index 1349595..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST384.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NIST384.h" - -namespace NIST384 { - -/* Curve NIST384 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x13EC2AEF,0x142E476E,0xBB4674A,0xC731B14,0x1875AC65,0x447A809,0x4480C50,0xDDFD028,0x19181D9C,0x1F1FC168,0x623815A,0x47DCFC9,0x1312FA7E,0x59}; -const BIG CURVE_Order= {0xCC52973,0x760CB56,0xC29DEBB,0x141B6491,0x12DDF581,0x6C0FA1B,0x1FFF1D8D,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG CURVE_Gx= {0x12760AB7,0x12A2F1C3,0x154A5B0E,0x5E4BB7E,0x2A38550,0xF0412A,0xE6167DD,0xC5174F3,0x146E1D3B,0x1799056B,0x3AC71C7,0x1D160A6F,0x87CA22B,0x55}; -const BIG CURVE_Gy= {0x10EA0E5F,0x1218EBE4,0x1FA0675E,0x1639C3A,0xB8C00A6,0x1889DAF8,0x11F3A768,0x17A51342,0x9F8F41D,0x1C9496E1,0x1767A62F,0xC4C58DE,0x17DE4A9,0x1B}; -const BIG CURVE_HTPC= {0xDCD21B,0x1213626A,0x1502B4CF,0x85A550E,0x5FEED05,0x13578422,0xED2F57D,0x16A06E8C,0x2E00897,0x1652C3E0,0x12F5A8FF,0x6E2A490,0x6EF0F22,0x5E}; -#endif - -#if CHUNK==64 - -using namespace B384_56; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x85C8EDD3EC2AEFL,0x398D8A2ED19D2AL,0x8F5013875AC656L,0xFE814112031408L,0xF82D19181D9C6EL,0xE7E4988E056BE3L,0xB3312FA7E23EL}; -const BIG CURVE_Order= {0xEC196ACCC52973L,0xDB248B0A77AECL,0x81F4372DDF581AL,0xFFFFFFFFC7634DL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL}; -const BIG CURVE_Gx= {0x545E3872760AB7L,0xF25DBF55296C3AL,0xE082542A385502L,0x8BA79B9859F741L,0x20AD746E1D3B62L,0x5378EB1C71EF3L,0xAA87CA22BE8BL}; -const BIG CURVE_Gy= {0x431D7C90EA0E5FL,0xB1CE1D7E819D7AL,0x13B5F0B8C00A60L,0x289A147CE9DA31L,0x92DC29F8F41DBDL,0x2C6F5D9E98BF92L,0x3617DE4A9626L}; -const BIG CURVE_HTPC= {0x426C4D40DCD21BL,0x2D2A87540AD33EL,0xAF08445FEED054L,0x37463B4BD5F66L,0x587C02E00897B5L,0x52484BD6A3FECAL,0xBC6EF0F22371L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST521.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST521.cpp deleted file mode 100644 index 68d48ae..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NIST521.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NIST521.h" - -namespace NIST521 { - -/* Curve NIST521 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B528_28; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xB503F00,0x451FD46,0xC34F1EF,0xDF883D2,0xF073573,0xBD3BB1B,0xB1652C0,0xEC7E937,0x6193951,0xF109E15,0x489918E,0x15F3B8B,0x25B99B3,0xEEA2DA7,0xB68540,0x929A21A,0xE1C9A1F,0x3EB9618,0x5195}; -const BIG CURVE_Order= {0x1386409,0x6FB71E9,0xC47AEBB,0xC9B8899,0x5D03BB5,0x48F709A,0xB7FCC01,0xBF2F966,0x1868783,0xFFFFFA5,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF}; -const BIG CURVE_Gx= {0x2E5BD66,0x7E7E31C,0xA429BF9,0xB3C1856,0x8DE3348,0x27A2FFA,0x8FE1DC1,0xEFE7592,0x14B5E77,0x4D3DBAA,0x8AF606B,0xB521F82,0x139053F,0x429C648,0x62395B4,0x9E3ECB6,0x404E9CD,0x8E06B70,0xC685}; -const BIG CURVE_Gy= {0xFD16650,0xBE94769,0x2C24088,0x7086A27,0x761353C,0x13FAD0,0xC550B9,0x5EF4264,0x7EE7299,0x3E662C9,0xFBD1727,0x446817A,0x449579B,0xD998F54,0x42C7D1B,0x5C8A5FB,0xA3BC004,0x296A789,0x11839}; -const BIG CURVE_HTPC= {0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFF}; -#endif - -#if CHUNK==64 - -using namespace B528_60; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xF451FD46B503F00L,0x73DF883D2C34F1EL,0x2C0BD3BB1BF0735L,0x3951EC7E937B165L,0x9918EF109E15619L,0x5B99B315F3B8B48L,0xB68540EEA2DA72L,0x8E1C9A1F929A21AL,0x51953EB961L}; -const BIG CURVE_Order= {0xB6FB71E91386409L,0xB5C9B8899C47AEBL,0xC0148F709A5D03BL,0x8783BF2F966B7FCL,0xFFFFFFFFFFA5186L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x1FFFFFFFFFFL}; -const BIG CURVE_Gx= {0x97E7E31C2E5BD66L,0x48B3C1856A429BFL,0xDC127A2FFA8DE33L,0x5E77EFE75928FE1L,0xF606B4D3DBAA14BL,0x39053FB521F828AL,0x62395B4429C6481L,0x404E9CD9E3ECB6L,0xC6858E06B7L}; -const BIG CURVE_Gy= {0x8BE94769FD16650L,0x3C7086A272C2408L,0xB9013FAD076135L,0x72995EF42640C55L,0xD17273E662C97EEL,0x49579B446817AFBL,0x42C7D1BD998F544L,0x9A3BC0045C8A5FBL,0x11839296A78L}; -const BIG CURVE_HTPC= {0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256E.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256E.cpp deleted file mode 100644 index d35fbd1..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256E.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NUMS256E.h" - -namespace NUMS256E { - -/* NUMS 256-bit Curve - Edwards */ - -#if CHUNK==16 - -using namespace B256_13; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -15342; -const BIG CURVE_B= {0x355,0x1FFE,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FF}; -const BIG CURVE_Order= {0xAF5,0x16EA,0x43B,0xF63,0x11A4,0x1CD,0x1D65,0x14A5,0x155A,0x20C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80}; -const BIG CURVE_Gx= {0x13DA,0x1768,0x40B,0x1D81,0xA0D,0x1AC3,0xC20,0x1DC,0x198A,0x1061,0x6F5,0x1241,0x15F6,0xF1E,0x1734,0x46F,0xAEA,0x7DB,0x1D45,0x114}; -const BIG CURVE_Gy= {0x9E6,0xC54,0x19DE,0xC2D,0x12FA,0x1769,0x215,0x1B02,0x1F61,0x38A,0x4,0xC97,0x1D9A,0xB32,0x1F3A,0x4B8,0x19D9,0x14FE,0x154F,0x89}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -#endif - -#if CHUNK==32 - -using namespace B256_29; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -15342; -const BIG CURVE_B= {0x1FFFC355,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF}; -const BIG CURVE_Order= {0xEDD4AF5,0x123D8C87,0x1650E6C6,0xAB54A5E,0x419,0x0,0x0,0x0,0x400000}; -const BIG CURVE_Gx= {0xEED13DA,0x6F60481,0x20D61A8,0x13141DC6,0x9BD60C3,0x1EAFB490,0xDF73478,0x1F6D5D44,0x8A7514}; -const BIG CURVE_Gy= {0x198A89E6,0x1D30B73B,0x15BB4CB,0x1EC3B021,0x18010715,0x12ECD325,0x171F3A59,0x13FB3B24,0x44D53E}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= -15342; -const BIG CURVE_B= {0xFFFFFFFFFFC355L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Order= {0x47B190EEDD4AF5L,0x5AA52F59439B1AL,0x4195L,0x0L,0x40000000L}; -const BIG CURVE_Gx= {0xDEC0902EED13DAL,0x8A0EE3083586A0L,0x5F69209BD60C39L,0x6AEA237DCD1E3DL,0x8A7514FBL}; -const BIG CURVE_Gy= {0xA616E7798A89E6L,0x61D810856ED32FL,0xD9A64B8010715FL,0xD9D925C7CE9665L,0x44D53E9FL}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256W.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256W.cpp deleted file mode 100644 index 16da170..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS256W.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NUMS256W.h" - -namespace NUMS256W { - -/* NUMS 256-bit Curve - Weierstrass */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 152961; -const BIG CURVE_B= {0x25581,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x751A825,0xAB20294,0x65C6020,0x8275EA2,0xFFFE43C,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}; -const BIG CURVE_Gx= {0x21AACB1,0x52EE1EB,0x4C73ABC,0x9B0903D,0xB098357,0xA04F42C,0x1297A95,0x5AAADB6,0xC9ED6B6,0xB}; -const BIG CURVE_Gy= {0x184DE9F,0xB5B9CB2,0x10FBB80,0xC3D1153,0x35C955,0xF77E04E,0x673448B,0x3399B6A,0x8FC0F1,0xD}; -const BIG CURVE_HTPC= {0x52B84D6,0xFC6F759,0xE89E05,0x92C6204,0x6AE4640,0x70CADDC,0x5B22ED0,0x5411E3B,0xF7F44E4,0xC}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 152961; -const BIG CURVE_B= {0x25581L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xAB20294751A825L,0x8275EA265C6020L,0xFFFFFFFFFFE43CL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Gx= {0x52EE1EB21AACB1L,0x9B0903D4C73ABCL,0xA04F42CB098357L,0x5AAADB61297A95L,0xBC9ED6B6L}; -const BIG CURVE_Gy= {0xB5B9CB2184DE9FL,0xC3D115310FBB80L,0xF77E04E035C955L,0x3399B6A673448BL,0xD08FC0F1L}; -const BIG CURVE_HTPC= {0xFC6F75952B84D6L,0x92C62040E89E05L,0x70CADDC6AE4640L,0x5411E3B5B22ED0L,0xCF7F44E4L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384E.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384E.cpp deleted file mode 100644 index 6f12a5b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384E.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NUMS384E.h" - -namespace NUMS384E { - -/* NUMS 384-bit Curve - Edwards */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -11556; -const BIG CURVE_B= {0x1FFFD19F,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG CURVE_Order= {0x6A3897D,0x5CEE627,0xD721E48,0x8AAB556,0x1E1CF61E,0xD0E5A35,0x1FFF891C,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1F}; -const BIG CURVE_Gx= {0xC206BDE,0x6AA0723,0x116504D4,0x52562CA,0x163406FF,0x1FD47998,0x10015D8F,0x8DCB7C9,0x15B30BF4,0x14D72AED,0x102DA884,0xB524CD9,0x1B111FB4,0x30}; -const BIG CURVE_Gy= {0x10729392,0xC681F0F,0x1B123727,0x561F28D,0x1964B007,0xC7BFB22,0x1D5A0C3E,0xE9E284B,0x1716AD82,0x11D886E,0x1CE2C69,0x134DDD61,0x983E67B,0x41}; -const BIG CURVE_HTPC= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -#endif - -#if CHUNK==64 - -using namespace B384_58; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= -11556; -const BIG CURVE_B= {0x3FFFFFFFFFFD19FL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFL}; -const BIG CURVE_Order= {0xB9DCC4E6A3897DL,0x11556AACD721E48L,0x1A1CB46BE1CF61EL,0x3FFFFFFFFFF891CL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFL}; -const BIG CURVE_Gx= {0xD540E46C206BDEL,0xA4AC59516504D4L,0x3FA8F33163406FFL,0x11B96F930015D8FL,0x29AE55DB5B30BF4L,0x16A499B302DA884L,0x61B111FB4L}; -const BIG CURVE_Gy= {0x18D03E1F0729392L,0xAC3E51BB123727L,0x18F7F645964B007L,0x1D3C5097D5A0C3EL,0x23B10DD716AD82L,0x269BBAC21CE2C69L,0x82983E67BL}; -const BIG CURVE_HTPC= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384W.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384W.cpp deleted file mode 100644 index 6b1741b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS384W.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NUMS384W.h" - -namespace NUMS384W { - -/* NUMS 384-bit Curve - Weierstrass */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -34568; -const BIG CURVE_B= {0x1FFF77BB,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG CURVE_Order= {0x1B0E61B9,0x26C0FB3,0xDF89E98,0x153A7A98,0x16881BED,0x178F75AE,0x1FFF587A,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG CURVE_Gx= {0x98152A,0x1CE5D021,0x18711EFA,0x1DDA201E,0xC742522,0x148D9536,0x7D3CEF4,0x19BF703F,0x60225C1,0x12082F8D,0x12203288,0x2DE3038,0x17956F0B,0x3A}; -const BIG CURVE_Gy= {0x6180716,0x3A5C763,0x1D2B4997,0xD69B77F,0x837EBCD,0x1BE890D,0xE72E482,0xEFF0FEE,0x1EB00469,0x2C267B,0x15F8CF4C,0x3371C71,0xDEE368E,0x56}; -const BIG CURVE_HTPC= {0x1FFFFF61,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3F}; -#endif - -#if CHUNK==64 - -using namespace B384_58; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= -34568; -const BIG CURVE_B= {0x3FFFFFFFFFF77BBL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFL}; -const BIG CURVE_Order= {0x4D81F67B0E61B9L,0x2A74F530DF89E98L,0x2F1EEB5D6881BEDL,0x3FFFFFFFFFF587AL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFL}; -const BIG CURVE_Gx= {0x39CBA042098152AL,0x3BB4403D8711EFAL,0x291B2A6CC742522L,0x337EE07E7D3CEF4L,0x24105F1A60225C1L,0x5BC60712203288L,0x757956F0BL}; -const BIG CURVE_Gy= {0x74B8EC66180716L,0x1AD36EFFD2B4997L,0x37D121A837EBCDL,0x1DFE1FDCE72E482L,0x584CF7EB00469L,0x66E38E35F8CF4CL,0xACDEE368EL}; -const BIG CURVE_HTPC= {0x3FFFFFFFFFFFF61L,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x7FFFFFFFFL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512E.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512E.cpp deleted file mode 100644 index d9138d9..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512E.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NUMS512E.h" - -namespace NUMS512E { - -/* NUMS 512-bit Curve - Edwards */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B512_29; - -const int CURVE_Cof_I=4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= -78296; -const BIG CURVE_B= {0x1FFECBEF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG CURVE_Order= {0x1BEED46D,0x1A3467A8,0x1BFB3FD9,0xC0AF0DB,0x86F52A4,0xC64B85B,0x6EA78FF,0xDA5F9F2,0x1FB4F063,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFF}; -const BIG CURVE_Gx= {0x19EC57FE,0xDCD594C,0x113C0571,0xA4A84F9,0x104AD0FE,0x4C92B44,0xC3DE2F7,0x9DDC8CE,0x74621C1,0x1139DC0A,0x9E85FAF,0x1B894704,0x1D1E79F4,0x9E29997,0x32DE223,0x16D38F43,0x116D128D,0x6FC71}; -const BIG CURVE_Gy= {0x1E2F5E1,0x136EF606,0x1C7407CC,0xDA71537,0xC1FD026,0x3431576,0x15898068,0x1E5D32C6,0x120CA53,0xC84F41A,0xA4ADAE5,0x104B3A45,0x76F726D,0x1512B772,0x3D5DEA0,0x194E3316,0x1FF39D49,0x3684D}; -const BIG CURVE_HTPC= {0x1FFFFDC6,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -#endif - -#if CHUNK==64 - -using namespace B512_60; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= -78296; -const BIG CURVE_B= {0xFFFFFFFFFFECBEFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Order= {0x7468CF51BEED46DL,0x4605786DEFECFF6L,0xFD8C970B686F52AL,0x636D2FCF91BA9E3L,0xFFFFFFFFFFFB4F0L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFL}; -const BIG CURVE_Gx= {0x5B9AB2999EC57FEL,0xE525427CC4F015CL,0xDC992568904AD0FL,0xC14EEE46730F78BL,0xEBE273B81474621L,0x9F4DC4A38227A17L,0x888D3C5332FD1E7L,0x128DB69C7A18CB7L,0xDF8E316DL}; -const BIG CURVE_Gy= {0x26DDEC0C1E2F5E1L,0x66D38A9BF1D01F3L,0xA06862AECC1FD02L,0x53F2E9963562601L,0xB95909E834120CAL,0x26D8259D22A92B6L,0x7A82A256EE476F7L,0x9D49CA7198B0F57L,0x6D09BFF3L}; -const BIG CURVE_HTPC= {0xFFFFFFFFFFFFDC6L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512W.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512W.cpp deleted file mode 100644 index 616f30b..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_NUMS512W.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_NUMS512W.h" - -namespace NUMS512W { - -/* NUMS 512-bit Curve - Weierstrass */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B512_29; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 121243; -const BIG CURVE_B= {0x1D99B,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x433555D,0x10A9F9C8,0x1F3490F3,0xD166CC0,0xBDC63B5,0xC76CBE8,0xC6D3F09,0x1F729CF0,0x1F5B3CA4,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG CURVE_Gx= {0xCABAE57,0x4143CAC,0x1BD778B7,0x1AC026FA,0x15831D5,0x14312AB,0x167A4DE5,0xA20ED66,0x195021A1,0x129836CF,0x1141B830,0xA03ED0A,0xCAD83BB,0x1E9DA94C,0xDC00A80,0x1527B45,0x1447141D,0x1D601}; -const BIG CURVE_Gy= {0x183527A6,0x1D043B01,0x1F43FA48,0x16B83C99,0x5602CF2,0x1420592D,0x17A70486,0x1B5161DD,0x14A28415,0x3DE8A78,0x3D2C983,0x17797719,0x197DBDEA,0x15D88025,0x1BBB718F,0xAD679C1,0x14CA29AD,0x4A1D2}; -const BIG CURVE_HTPC= {0x1FFFFEE3,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x3FFFF}; -#endif - -#if CHUNK==64 - -using namespace B512_60; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 121243; -const BIG CURVE_B= {0x1D99BL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xE153F390433555DL,0x568B36607CD243CL,0x258ED97D0BDC63BL,0xA4FB94E7831B4FCL,0xFFFFFFFFFFF5B3CL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Gx= {0xC8287958CABAE57L,0x5D60137D6F5DE2DL,0x94286255615831DL,0xA151076B359E937L,0xC25306D9F95021L,0x3BB501F6854506EL,0x2A03D3B5298CAD8L,0x141D0A93DA2B700L,0x3AC03447L}; -const BIG CURVE_Gy= {0x3A08760383527A6L,0x2B5C1E4CFD0FE92L,0x1A840B25A5602CFL,0x15DA8B0EEDE9C12L,0x60C7BD14F14A284L,0xDEABBCBB8C8F4B2L,0xC63EBB1004B97DBL,0x29AD56B3CE0EEEDL,0x943A54CAL}; -const BIG CURVE_HTPC= {0xFFFFFFFFFFFFEE3L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x7FFFFFFFL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP160R1.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP160R1.cpp deleted file mode 100644 index 03ffa33..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP160R1.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_SECP160R1.h" - -namespace SECP160R1 { - -/* Curve SECP160R1 */ - -#if CHUNK==16 - -using namespace B160_13; -// Base Bits= 13 - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x1A45,0xB2F,0xB71,0x9A9,0x181D,0x1C4F,0x16B3,0x116C,0x1D7A,0x2A5,0xFBF,0x192F,0x1}; -const BIG CURVE_Order= {0x257,0x13A9,0x14F2,0xF5D,0xF92,0x1A64,0x7,0x0,0x0,0x0,0x0,0x0,0x10}; -const BIG CURVE_Gx= {0x1C82,0x1E5F,0xE44,0x717,0x168C,0x14C4,0x1991,0x508,0x1573,0x477,0xD5A,0x152D,0x4}; -const BIG CURVE_Gy= {0x1B32,0x162F,0xDDE,0x6A2,0x42,0x489,0x773,0xFAB,0x894,0x98B,0xA15,0x74C,0x2}; -const BIG CURVE_HTPC= {0xDA,0x12DE,0x1CE8,0x15F5,0x105D,0x1539,0xB39,0xDF,0x1A61,0x166A,0xF40,0x1CA1,0x1}; -#endif - -#if CHUNK==32 - -using namespace B160_29; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0x565FA45,0xEA6A56E,0xB3E27E0,0x1AF516CB,0x1BEFC54B,0xE4B}; -const BIG CURVE_Order= {0xA752257,0x93D769E,0x7D323E,0x0,0x0,0x8000}; -const BIG CURVE_Gx= {0x13CBFC82,0x61C5DC8,0x191A625A,0xAE6508C,0xB5688EF,0x254B}; -const BIG CURVE_Gy= {0x1AC5FB32,0x11A89BB,0x17324481,0x1128FAB3,0x2855316,0x11D3}; -const BIG CURVE_HTPC= {0x25BC0DA,0xED7D79D,0x139A9CC1,0x14C20DF5,0xBD02CD5,0xF28}; -#endif - -#if CHUNK==64 - -using namespace B160_56; - -// Base Bits= 56 -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xD4D4ADC565FA45L,0x7A8B65ACF89F81L,0x1C97BEFC54BDL}; -const BIG CURVE_Order= {0x27AED3CA752257L,0x1F4C8F9L,0x1000000000000L}; -const BIG CURVE_Gx= {0xC38BB913CBFC82L,0x73284664698968L,0x4A96B5688EF5L}; -const BIG CURVE_Gy= {0x2351377AC5FB32L,0x947D59DCC91204L,0x23A628553168L}; -const BIG CURVE_HTPC= {0xDAFAF3A25BC0DAL,0x6106FACE6A7305L,0x1E50BD02CD5AL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP256K1.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP256K1.cpp deleted file mode 100644 index 5241cb1..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SECP256K1.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_SECP256K1.h" - -namespace SECP256K1 { - -/* Curve SECP256K1 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 7; -const BIG CURVE_B= {0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x364141,0xD25E8CD,0x8A03BBF,0xDCE6AF4,0xFFEBAAE,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}; -const BIG CURVE_Gx= {0x6F81798,0xF2815B1,0xE28D959,0xFCDB2DC,0xB07029B,0x95CE870,0xC55A062,0xF9DCBBA,0x9BE667E,0x7}; -const BIG CURVE_Gy= {0xB10D4B8,0x47D08FF,0x554199C,0xB448A68,0x8A8FD17,0xFC0E110,0x55DA4FB,0x26A3C46,0x83ADA77,0x4}; -//const BIG HTPC= {0xCD5F852,0x8D27AE1,0x4ECD47D,0x6D15DA1,0x62CC61F,0xC2A7979,0xF233770,0x3507F1D,0xA2D2BA9,0x0}; -const BIG CURVE_HTPC= {0xE8624AA,0xC813789,0xF508ECD,0xCA45C23,0xD8BBBFD,0x640A39C,0xF4D5B4,0x813FFE3,0xCE8E9E8,0xC}; - -#if HTC_ISO_SECP256K1 != 0 -const BIG CURVE_Ad= {0xA444533,0x5447C01,0xF0E5D40,0xD363CB6,0x272E953,0x58F0F5D,0xCA08A55,0xDD661AD,0xF8731AB,0x3}; -const BIG CURVE_Bd= {0x6EB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG PC[13]= {{0xAAAA88C,0x38E38DA,0xE38E38E,0x8E38E38,0x38E38E3,0xE38E38E,0x8E38E38,0x38E38E3,0xE38E38E,0x8},{0xD9DD262,0xCBD0B53,0xC40314E,0x6144037,0xAECE450,0xDECA25C,0x6E2A413,0x23F234E,0x34C328D,0x5},{0x17C6581,0xFF1044F,0x63B92DF,0xD2FC0BF,0x4C5D595,0xCEA7FD4,0x5B9F315,0xBC321D,0x7D3D4C8,0x0},{0xAAAA8C7,0x38E38DA,0xE38E38E,0x8E38E38,0x38E38E3,0xE38E38E,0x8E38E38,0x38E38E3,0xE38E38E,0x8},{0xA8C6D14,0x2A56612,0xE41BBC5,0x6B641F5,0x25406D3,0xD51B542,0xDF7C4B2,0x4383DC1,0xDADC6F6,0xE},{0x81EB49B,0xE6B7457,0x8487D9F,0x409542F,0xDD86CD,0xCBB7B64,0xA9CA34C,0x3D94918,0x3577119,0xD},{0x8E38D84,0xBDA12F3,0xA12F684,0x2F684BD,0x684BDA1,0x4BDA12F,0xDA12F68,0x12F684B,0xF684BDA,0x2},{0xECEE931,0x65E85A9,0xE2018A7,0x30A201B,0x5767228,0xEF6512E,0x3715209,0x91F91A7,0x9A61946,0x2},{0x1D71A3,0xFC90FC2,0x6DA6FDF,0xB046D68,0x6D5647A,0x4B12A0A,0xFA9D0A5,0xD5CB7C0,0x75E0C32,0xC},{0xE38E23C,0x2F684B8,0x684BDA1,0x4BDA12F,0xDA12F68,0x12F684B,0xF684BDA,0x84BDA12,0xBDA12F6,0x4},{0xFD2A76F,0xBF8192B,0xD6299A7,0x21162F0,0x37E0A3D,0x3FA8FE3,0xCF3A70C,0x6545CA2,0x484AA71,0x6},{0x85C2573,0xB425D26,0x8D978DF,0xC1BFC8E,0x2989467,0x632722C,0xFD5E9E6,0xB8BDB49,0xA06534B,0x7},{0xFFFF93B,0xFFFFFEF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}}; -#endif - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const int CURVE_Cof_I=1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 7; -const BIG CURVE_B= {0x7L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0xD25E8CD0364141L,0xDCE6AF48A03BBFL,0xFFFFFFFFFEBAAEL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG CURVE_Gx= {0xF2815B16F81798L,0xFCDB2DCE28D959L,0x95CE870B07029BL,0xF9DCBBAC55A062L,0x79BE667EL}; -const BIG CURVE_Gy= {0x47D08FFB10D4B8L,0xB448A68554199CL,0xFC0E1108A8FD17L,0x26A3C4655DA4FBL,0x483ADA77L}; -//const BIG HTPC= {0x8D27AE1CD5F852L,0x6D15DA14ECD47DL,0xC2A797962CC61FL,0x3507F1DF233770L,0xA2D2BA9L}; -const BIG CURVE_HTPC= {0xC813789E8624AAL,0xCA45C23F508ECDL,0x640A39CD8BBBFDL,0x813FFE30F4D5B4L,0xCCE8E9E8L}; - -#if HTC_ISO_SECP256K1 != 0 -const BIG CURVE_Ad= {0x5447C01A444533L,0xD363CB6F0E5D40L,0x58F0F5D272E953L,0xDD661ADCA08A55L,0x3F8731ABL}; -const BIG CURVE_Bd= {0x6EBL,0x0L,0x0L,0x0L,0x0L}; -const BIG PC[13]= {{0x38E38DAAAAA88CL,0x8E38E38E38E38EL,0xE38E38E38E38E3L,0x38E38E38E38E38L,0x8E38E38EL},{0xCBD0B53D9DD262L,0x6144037C40314EL,0xDECA25CAECE450L,0x23F234E6E2A413L,0x534C328DL},{0xFF1044F17C6581L,0xD2FC0BF63B92DFL,0xCEA7FD44C5D595L,0xBC321D5B9F315L,0x7D3D4C8L},{0x38E38DAAAAA8C7L,0x8E38E38E38E38EL,0xE38E38E38E38E3L,0x38E38E38E38E38L,0x8E38E38EL},{0x2A56612A8C6D14L,0x6B641F5E41BBC5L,0xD51B54225406D3L,0x4383DC1DF7C4B2L,0xEDADC6F6L},{0xE6B745781EB49BL,0x409542F8487D9FL,0xCBB7B640DD86CDL,0x3D94918A9CA34CL,0xD3577119L},{0xBDA12F38E38D84L,0x2F684BDA12F684L,0x4BDA12F684BDA1L,0x12F684BDA12F68L,0x2F684BDAL},{0x65E85A9ECEE931L,0x30A201BE2018A7L,0xEF6512E5767228L,0x91F91A73715209L,0x29A61946L},{0xFC90FC201D71A3L,0xB046D686DA6FDFL,0x4B12A0A6D5647AL,0xD5CB7C0FA9D0A5L,0xC75E0C32L},{0x2F684B8E38E23CL,0x4BDA12F684BDA1L,0x12F684BDA12F68L,0x84BDA12F684BDAL,0x4BDA12F6L},{0xBF8192BFD2A76FL,0x21162F0D6299A7L,0x3FA8FE337E0A3DL,0x6545CA2CF3A70CL,0x6484AA71L},{0xB425D2685C2573L,0xC1BFC8E8D978DFL,0x632722C2989467L,0xB8BDB49FD5E9E6L,0x7A06534BL},{0xFFFFFEFFFFF93BL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}}; -#endif - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SM2.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SM2.cpp deleted file mode 100644 index ddf9230..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_SM2.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_SM2.h" - -namespace SM2 { - -/* Curve SM2 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xD940E93,0xBCBD414,0xB8F92DD,0x89F515A,0x9A7F397,0x4BCF650,0x44D5A9E,0x9D9F5E3,0x8E9FA9E,0x2}; -const BIG CURVE_Order= {0x9D54123,0xBBF4093,0x6052B53,0xDF6B21C,0xFFF7203,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFE,0xF}; -const BIG CURVE_Gx= {0x34C74C7,0x5A45893,0x60BE171,0xBBFF26,0x9948FE3,0x466A39C,0x95F9904,0x1F19811,0x2C4AE2C,0x3}; -const BIG CURVE_Gy= {0x139F0A0,0xDF32E52,0xA474002,0x877CC62,0x153D0A9,0xE36B692,0xC59BDCE,0xF4F6779,0xC3736A2,0xB}; -const BIG CURVE_HTPC= {0xFFFFFFF,0xFFFFFFF,0x55555FF,0xFFFF555,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xAAAAAA9,0xA}; - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 0; -const BIG CURVE_B= {0xBCBD414D940E93L,0x89F515AB8F92DDL,0x4BCF6509A7F397L,0x9D9F5E344D5A9EL,0x28E9FA9EL}; -const BIG CURVE_Order= {0xBBF40939D54123L,0xDF6B21C6052B53L,0xFFFFFFFFFF7203L,0xFFFFFFFFFFFFFFL,0xFFFFFFFEL}; -const BIG CURVE_Gx= {0x5A4589334C74C7L,0xBBFF2660BE171L,0x466A39C9948FE3L,0x1F1981195F9904L,0x32C4AE2CL}; -const BIG CURVE_Gy= {0xDF32E52139F0A0L,0x877CC62A474002L,0xE36B692153D0A9L,0xF4F6779C59BDCEL,0xBC3736A2L}; -const BIG CURVE_HTPC= {0xFFFFFFFFFFFFFFL,0xFFFF55555555FFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xAAAAAAA9L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDEE.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDEE.cpp deleted file mode 100644 index 7e6e35a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDEE.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_TWEEDLEDEE.h" - - -namespace TWEEDLEDEE { -/* TWEEDLEDEE Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -//*** rom curve parameters ***** -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1,0xA032710,0xFD66E68,0x15424ED8,0x38,0x0,0x0,0x0,0x400000}; -const BIG CURVE_Gx= {0x0,0x1657EA0,0x18A1B261,0x15424ED2,0x38,0x0,0x0,0x0,0x400000}; -const BIG CURVE_Gy= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0xD69C848,0x1C30E5ED,0xBBDA1CC,0x180EA8CE,0xE9704A,0x1172DE0D,0x1C820B1A,0x1BC54C92,0x3AC188}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -//*** rom curve parameters ***** -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x4064E200000001L,0xA1276C3F59B9A1L,0x38AL,0x0L,0x40000000L}; -const BIG CURVE_Gx= {0x2CAFD400000000L,0xA127696286C984L,0x38AL,0x0L,0x40000000L}; -const BIG CURVE_Gy= {0x2L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0x861CBDAD69C848L,0x754672EF68733L,0xE5BC1A0E9704ACL,0x2A64972082C6A2L,0x3AC188DEL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDUM.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDUM.cpp deleted file mode 100644 index bfe803e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_TWEEDLEDUM.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_TWEEDLEDUM.h" - - -namespace TWEEDLEDUM { -/* TWEEDLEDUM Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -//*** rom curve parameters ***** -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0x1,0x1657EA0,0x18A1B261,0x15424ED2,0x38,0x0,0x0,0x0,0x400000}; -const BIG CURVE_Gx= {0x0,0xA032710,0xFD66E68,0x15424ED8,0x38,0x0,0x0,0x0,0x400000}; -const BIG CURVE_Gy= {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_HTPC= {0x1381795,0x16B3AA9A,0xF3EF0D9,0x15DD7A0,0xBAA53E1,0xC45B655,0xFD3BC53,0x1E66E041,0x3AB46C}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -//*** rom curve parameters ***** -const int CURVE_Cof_I= 1; -const BIG CURVE_Cof= {0x1L,0x0L,0x0L,0x0L,0x0L}; -const int CURVE_B_I= 5; -const BIG CURVE_B= {0x5L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x2CAFD400000001L,0xA127696286C984L,0x38AL,0x0L,0x40000000L}; -const BIG CURVE_Gx= {0x4064E200000000L,0xA1276C3F59B9A1L,0x38AL,0x0L,0x40000000L}; -const BIG CURVE_Gy= {0x2L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_HTPC= {0xD6755341381795L,0xAEEBD03CFBC366L,0x8B6CAABAA53E10L,0x37020BF4EF14D8L,0x3AB46CF3L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_X448.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_X448.cpp deleted file mode 100644 index 52d8001..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_curve_X448.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "ecp_X448.h" - -namespace X448 { - -/* Curve X448 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B448_29; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG CURVE_Order= {0xB5844F3,0x1BC61495,0x1163D548,0x1984E51B,0x3690216,0xDA4D76B,0xFA7113B,0x1FEF9944,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FF}; -const BIG CURVE_Gx= {0x5}; -const BIG CURVE_HTPC= {0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF}; -#endif - -#if CHUNK==64 - -using namespace B448_58; - -const int CURVE_Cof_I= 4; -const BIG CURVE_Cof= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG CURVE_Order= {0x378C292AB5844F3L,0x3309CA37163D548L,0x1B49AED63690216L,0x3FDF3288FA7113BL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFFL}; -const BIG CURVE_Gx= {0x5L}; -const BIG CURVE_HTPC= {0x3FFFFFFFFFFFFFEL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_ANSSI.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_ANSSI.cpp deleted file mode 100644 index e2d6f30..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_ANSSI.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_ANSSI.h" - -namespace ANSSI { - -/* ANNSI Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0x86E9C03,0xFCF353D,0x8CA6DE8,0xADBCABC,0x35B3961,0xE8CE424,0xF10126D,0xB3AD58,0x1FD178C,0xF}; -const BIG ROI= {0x86E9C02,0xFCF353D,0x8CA6DE8,0xADBCABC,0x35B3961,0xE8CE424,0xF10126D,0xB3AD58,0x1FD178C,0xF}; -const BIG R2modp= {0x288CC9C,0x18D2374,0x646BD2B,0x4929E67,0xD6F7F2D,0x220E6C1,0xABCE02E,0x751B1FD,0x7401B78,0xE}; -const chunk MConst= 0x64E1155; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFCF353D86E9C03L,0xADBCABC8CA6DE8L,0xE8CE42435B3961L,0xB3AD58F10126DL,0xF1FD178CL}; -const BIG ROI= {0xFCF353D86E9C02L,0xADBCABC8CA6DE8L,0xE8CE42435B3961L,0xB3AD58F10126DL,0xF1FD178CL}; -const BIG R2modp= {0x18D2374288CC9CL,0x4929E67646BD2BL,0x220E6C1D6F7F2DL,0x751B1FDABCE02EL,0xE7401B78L}; -const chunk MConst= 0x97483A164E1155L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12381.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12381.cpp deleted file mode 100644 index f7fbfd0..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12381.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS12381.h" - -namespace BLS12381 { - -/* Curve BLS12381 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFAAAB,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD}; -const BIG ROI= {0x1FFFAAAA,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD}; -const BIG R2modp= {0x15BEF7AE,0x1031CD0E,0x2DD93E8,0x9226323,0xE6E2CD2,0x11684DAA,0x1170E5DB,0x88E25B1,0x1B366399,0x1C536F47,0xD1F9CBC,0x278B67F,0x1EA66A2B,0xC}; -const BIG CRu= {0x1FFEFFFE,0x100FFFFF,0x280008B,0xFB026C4,0x9688DE1,0x149DF37C,0x1FAB76CE,0xED41EE,0x11BA69C6,0x1EFBB672,0x17C659CB,0x0,0x0,0x0}; -const chunk MConst= 0x1FFCFFFD; -const BIG Fra= {0x12235FB8,0x83BAF6C,0x19E04F63,0x1D4A7AC7,0xB9C4F67,0x1EBC25D,0x1D3DEC91,0x1FA797AB,0x1F0FD603,0x1016068,0x108C6FAD,0x5760CCF,0x104D3BF0,0xC}; -const BIG Frb= {0xDDC4AF3,0x7BC5093,0x1B1FB08B,0x1AB5829A,0x3C5F282,0x764B8FB,0xDBFB032,0x10F6D8F6,0x1854A147,0x1118FCFD,0x23A7A40,0xD89C065,0xFC3E2B3,0x0}; -const BIG SQRTm3= {0x1AAAE,0xFD80000,0xFFFFED7,0x189FAFDA,0x1C912627,0x14945F,0xBA6AF26,0xEC3ECC4,0x13EFA3BF,0x1422F081,0x33A3655,0x12FFCD33,0x111EA3,0xD}; -#endif - -#if CHUNK==64 - -using namespace B384_58; -// Base Bits= 58 -const BIG Modulus= {0x1FEFFFFFFFFAAABL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L}; -const BIG ROI= {0x1FEFFFFFFFFAAAAL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L}; -const BIG R2modp= {0x20639A1D5BEF7AEL,0x1244C6462DD93E8L,0x22D09B54E6E2CD2L,0x111C4B63170E5DBL,0x38A6DE8FB366399L,0x4F16CFED1F9CBCL,0x19EA66A2BL}; -const BIG CRu= {0x201FFFFFFFEFFFEL,0x1F604D88280008BL,0x293BE6F89688DE1L,0x1DA83DDFAB76CEL,0x3DF76CE51BA69C6L,0x17C659CBL,0x0L}; -const chunk MConst= 0x1F3FFFCFFFCFFFDL; -const BIG Fra= {0x10775ED92235FB8L,0x3A94F58F9E04F63L,0x3D784BAB9C4F67L,0x3F4F2F57D3DEC91L,0x202C0D1F0FD603L,0xAEC199F08C6FADL,0x1904D3BF0L}; -const BIG Frb= {0xF78A126DDC4AF3L,0x356B0535B1FB08BL,0xEC971F63C5F282L,0x21EDB1ECDBFB032L,0x2231F9FB854A147L,0x1B1380CA23A7A40L,0xFC3E2B3L}; -const BIG SQRTm3= {0x1FB00000001AAAEL,0x313F5FB4FFFFED7L,0x2928BFC912627L,0x1D87D988BA6AF26L,0x2845E1033EFA3BFL,0x25FF9A6633A3655L,0x1A0111EA3L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12383.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12383.cpp deleted file mode 100644 index a5b8849..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12383.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS12383.h" - -namespace BLS12383 { - -/* Curve BLS12383 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -// Base Bits= 29 -const BIG Modulus= {0x5AAB0AB,0x11B8EB24,0x19214AF6,0x187E5314,0x124F47A8,0x1C00B4B0,0x1446B0C6,0x59E6CB4,0x4A0AD46,0xFF5494,0x81B6B71,0x956DD6B,0x16556956,0x2A}; -const BIG ROI= {0x5AAB0AA,0x11B8EB24,0x19214AF6,0x187E5314,0x124F47A8,0x1C00B4B0,0x1446B0C6,0x59E6CB4,0x4A0AD46,0xFF5494,0x81B6B71,0x956DD6B,0x16556956,0x2A}; -const BIG R2modp= {0x116907F4,0x405B700,0x1752AC11,0x67A9E7C,0x1941C581,0x1AEA38C4,0xB1E4D22,0xCE841AE,0xA0FC49B,0xB4B1F48,0x13852312,0x1B3FDCED,0x1FECE397,0x26}; - -const BIG CRu= {0xEAAC2A9,0x61B3A81,0x17D974B7,0xBED0345,0xA341BC2,0x17A51A6F,0x5738948,0x69B7BAE,0x14605445,0x374A43,0x8116AD1,0x956DD69,0x16556956,0x2A}; -const chunk MConst= 0x73435FD; -const BIG Fra= {0x1311DAC1,0x296B969,0x19DCF806,0x126901FC,0xD8C8A36,0x1A2572A8,0xA1A0959,0x1A47F743,0x110E4C6C,0x1608DA97,0xCE2E7F0,0x4FED178,0xACD5BF0,0x11}; -const BIG Frb= {0x1298D5EA,0xF2231BA,0x1F4452F0,0x6155117,0x4C2BD72,0x1DB4208,0xA2CA76D,0xB567571,0x139260D9,0xAF679FC,0x1B388380,0x4580BF2,0xB880D66,0x19}; -const BIG SQRTm3= {0x17AAD4A8,0x1A7D89DE,0x16919E77,0x1F5BB376,0x218EFDB,0x1349802E,0x16A061CA,0x7988AA7,0x41FFB44,0x1F6F3FF3,0x8076A30,0x956DD67,0x16556956,0x2A}; -#endif - -#if CHUNK==64 - -using namespace B384_58; - -// Base Bits= 58 -const BIG Modulus= {0x2371D6485AAB0ABL,0x30FCA6299214AF6L,0x3801696124F47A8L,0xB3CD969446B0C6L,0x1FEA9284A0AD46L,0x12ADBAD681B6B71L,0x556556956L}; -const BIG ROI= {0x2371D6485AAB0AAL,0x30FCA6299214AF6L,0x3801696124F47A8L,0xB3CD969446B0C6L,0x1FEA9284A0AD46L,0x12ADBAD681B6B71L,0x556556956L}; -const BIG R2modp= {0x80B6E0116907F4L,0xCF53CF9752AC11L,0x35D47189941C581L,0x19D0835CB1E4D22L,0x16963E90A0FC49BL,0x367FB9DB3852312L,0x4DFECE397L}; - -const BIG CRu= {0xC367502EAAC2A9L,0x17DA068B7D974B7L,0x2F4A34DEA341BC2L,0xD36F75C5738948L,0x6E94874605445L,0x12ADBAD28116AD1L,0x556556956L}; -const chunk MConst= 0x1BC0571073435FDL; -const BIG Fra= {0x52D72D3311DAC1L,0x24D203F99DCF806L,0x344AE550D8C8A36L,0x348FEE86A1A0959L,0x2C11B52F10E4C6CL,0x9FDA2F0CE2E7F0L,0x22ACD5BF0L}; -const BIG Frb= {0x1E446375298D5EAL,0xC2AA22FF4452F0L,0x3B684104C2BD72L,0x16ACEAE2A2CA76DL,0x15ECF3F939260D9L,0x8B017E5B388380L,0x32B880D66L}; -const BIG SQRTm3= {0x34FB13BD7AAD4A8L,0x3EB766ED6919E77L,0x2693005C218EFDBL,0xF31154F6A061CAL,0x3EDE7FE641FFB44L,0x12ADBACE8076A30L,0x556556956L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12443.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12443.cpp deleted file mode 100644 index a63e1a0..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12443.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS12443.h" - -namespace BLS12443 { - -/* Curve BLS12443 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B448_29; - -// Base Bits= 29 -const BIG Modulus= {0x10AAAAAB,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE}; -const BIG R2modp= {0x1118A8F7,0x1AB7CA8,0x2333712,0x132DCAD3,0x16E13882,0x10A03200,0x5B25363,0x9C87B7C,0xB9A40C9,0x975222C,0x28F658F,0x147AD511,0xF6028F0,0xBA52E95,0x262ED53,0x69}; -const BIG ROI= {0x10AAAAAA,0x1FD55555,0x1921AAFF,0xA59AAAA,0x1424ABF7,0x19024801,0x1C42D855,0x96E429D,0x5119FF1,0x7855CAF,0x1020B3B1,0x4B6ABA4,0x92300A8,0x1054E434,0x1694F72C,0xAE}; -const BIG SQRTm3= {0x14AAAAA8,0x1ED55556,0x16F7ACFF,0x6B6AA9,0x1E4D5046,0x1413E017,0x19DD9B9D,0x1E5F53AC,0x64B9158,0x1368614B,0x1F58A387,0x96E1519,0x8A07BAD,0x1054E434,0x1694F72C,0xAE}; -const BIG CRu= {0x2AAAAA9,0x1F555556,0x80CABFF,0x15628AAA,0x1938FE1E,0x168B140C,0xB1039F9,0x3E6CB25,0x5AE98A5,0xD76DEFD,0x7BCAB9C,0x1712605F,0x8E1BE2A,0x1054E434,0x1694F72C,0xAE}; -const chunk MConst= 0x15FFFFFD; -const BIG Fra= {0x49551C8,0x9D8A27E,0x1FACD18F,0x10236D5E,0x1D38DC4B,0xA2FCECB,0x46BF1F0,0x1C2F955E,0x1029E275,0x7D8436E,0x13DD8C0,0x1C9052A0,0x1979B8C6,0x1F97223F,0xC24C77,0x88}; -const BIG Frb= {0xC1558E3,0x15FCB2D7,0x1974D970,0x1A363D4B,0x16EBCFAB,0xED27935,0x17D6E665,0xD3EAD3F,0x14E7BD7B,0x1FAD1940,0xEE2DAF0,0x8265904,0xFA947E1,0x10BDC1F4,0x15D2AAB4,0x26}; -#endif - -#if CHUNK==64 - -using namespace B448_60; - -// Base Bits= 60 -const BIG Modulus= {0xFFAAAAAB0AAAAABL,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L}; -const BIG R2modp= {0xF5CDA0EB0AD64E2L,0xDE66AA74FAE046BL,0x8B9229B598075AEL,0xDFAFBC5DB0E321EL,0x9AF61017ADA96A8L,0xFFAEA657DE81FE0L,0x1800170F84B9395L,0x8E3DDL}; -const BIG ROI= {0xFFAAAAAB0AAAAAAL,0x752CD5556486ABFL,0x572049003424ABFL,0xF14B7214EF10B61L,0xEC4F0AB95E5119FL,0xA825B55D24082CL,0xDCB20A9C8689230L,0x575A53L}; -const BIG SQRTm3= {0xFDAAAAAD4AAAAA8L,0x6035B554DBDEB3FL,0x76827C02FE4D504L,0x58F2FA9D667766EL,0xE1E6D0C29664B91L,0xBAD4B70A8CFD628L,0xDCB20A9C8688A07L,0x575A53L}; -const BIG CRu= {0xFEAAAAAC2AAAAA9L,0xEAB145552032AFFL,0xE6D162819938FE1L,0xA51F36592AC40E7L,0xE71AEDBDFA5AE98L,0xE2AB89302F9EF2AL,0xDCB20A9C8688E1BL,0x575A53L}; -const chunk MConst= 0xC04000035FFFFFDL; -const BIG Fra= {0xD3B144FC49551C8L,0xB811B6AF7EB3463L,0xC145F9D97D38DC4L,0x75E17CAAF11AFC7L,0x300FB086DD029E2L,0x8C6E48295004F76L,0x31DFF2E447F979BL,0x440309L}; -const BIG Frb= {0x2BF965AEC1558E3L,0xBD1B1EA5E5D365CL,0x95DA4F26B6EBCFAL,0x7B69F569FDF5B99L,0xBC3F5A32814E7BDL,0x7E14132C823B8B6L,0xAAD217B83E8FA94L,0x13574AL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12461.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12461.cpp deleted file mode 100644 index 2c68a27..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS12461.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS12461.h" - -namespace BLS12461 { - -/* Curve BLS12461 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B464_28; - -// Base Bits= 28 -const BIG Modulus= {0xAAAAAAB,0xAC0000A,0x54AAAAA,0x5555,0x400020,0x91557F0,0xF26AA,0xFA5C1CC,0xB42A8DF,0x7B14848,0x8BACCA4,0x6F1E32D,0x4935FBD,0x55D6941,0xD5A555A,0x5545554,0x1555}; -const BIG ROI= {0xAAAAAAA,0xAC0000A,0x54AAAAA,0x5555,0x400020,0x91557F0,0xF26AA,0xFA5C1CC,0xB42A8DF,0x7B14848,0x8BACCA4,0x6F1E32D,0x4935FBD,0x55D6941,0xD5A555A,0x5545554,0x1555}; -const BIG R2modp= {0xC9B6A33,0x2ECD087,0x3CCB2B1,0xCD461FE,0x8CB5AB2,0xC5B9635,0x5312E92,0xB659F64,0x3B596FA,0x8679006,0xA92E2B3,0x3CE05E3,0x363550F,0x7C07A8E,0x382C083,0x6347FEA,0xBD}; -const BIG CRu= {0xFFFFFFE,0x40001F,0xFE00000,0xFFE7FFF,0xF0FFF6F,0x7200C47,0x7BCC604,0x15796DB,0xCF47771,0x9875433,0x613F0E8,0x5000502,0xEBFFF60,0x1FFFFF,0x0,0x0,0x0}; -const chunk MConst= 0xFFFFFFD; -const BIG Fra= {0xB812A3A,0x7117BF9,0x99C400F,0xC6308A5,0x5BF8A1,0x510E075,0x45FA5A6,0xCE4858D,0x770B31A,0xBC2CB04,0xE2FC61E,0xD073588,0x4366190,0x4DFEFA8,0x69E55E2,0x504B7F,0x12E4}; -const BIG Frb= {0xF298071,0x3AE8410,0xBAE6A9B,0x39D4CAF,0xFE4077E,0x404777A,0xBAF8104,0x2C13C3E,0x3D1F5C5,0xBEE7D44,0xA8B0685,0x9EAADA4,0x5CFE2C,0x7D7999,0x6BBFF78,0x50409D5,0x271}; -const BIG SQRTm3= {0xAAAAAAE,0xA3FFFCA,0x58AAAAA,0x35555,0x2200140,0xAD53F60,0x959AA1,0xCF69415,0x159B9FD,0x4A29FE1,0xC92EAD3,0xCF1D928,0x71360FC,0x51D6941,0xD5A555A,0x5545554,0x1555}; -#endif - -#if CHUNK==64 - -using namespace B464_60; - -// Base Bits= 60 -const BIG Modulus= {0xAAC0000AAAAAAABL,0x20000555554AAAAL,0x6AA91557F004000L,0xA8DFFA5C1CC00F2L,0xACCA47B14848B42L,0x935FBD6F1E32D8BL,0xD5A555A55D69414L,0x15555545554L}; -const BIG ROI= {0xAAC0000AAAAAAAAL,0x20000555554AAAAL,0x6AA91557F004000L,0xA8DFFA5C1CC00F2L,0xACCA47B14848B42L,0x935FBD6F1E32D8BL,0xD5A555A55D69414L,0x15555545554L}; -const BIG R2modp= {0x96D08774614DDA8L,0xCD45F539225D5BDL,0xD712EB760C95AB1L,0xB3B687155F30B55L,0xC4E62A05C3F5B81L,0xBA1151676CA3CD0L,0x7EDD8A958F442BEL,0x12B89DD3F91L}; -const BIG CRu= {0x40001FFFFFFFEL,0x6FFFE7FFFFE0000L,0x6047200C47F0FFFL,0x777115796DB7BCCL,0x3F0E89875433CF4L,0xBFFF60500050261L,0x1FFFFFEL,0x0L}; -const chunk MConst= 0xC0005FFFFFFFDL; -const BIG Fra= {0xF7117BF9B812A3AL,0xA1C6308A599C400L,0x5A6510E07505BF8L,0xB31ACE4858D45FAL,0xFC61EBC2CB04770L,0x366190D073588E2L,0x69E55E24DFEFA84L,0x12E40504B7FL}; -const BIG Frb= {0xB3AE8410F298071L,0x7E39D4CAFBAE6A9L,0x104404777AFE407L,0xF5C52C13C3EBAF8L,0xB0685BEE7D443D1L,0x5CFE2C9EAADA4A8L,0x6BBFF7807D79990L,0x27150409D5L}; -const BIG SQRTm3= {0xAA3FFFCAAAAAAAEL,0x40003555558AAAAL,0xAA1AD53F6022001L,0xB9FDCF694150959L,0x2EAD34A29FE1159L,0x1360FCCF1D928C9L,0xD5A555A51D69417L,0x15555545554L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS24479.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS24479.cpp deleted file mode 100644 index 413382d..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS24479.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS24479.h" - -namespace BLS24479 { - -/* Curve BLS24479 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B480_29; - -const BIG Modulus= {0xA06152B,0x2260B3A,0xB4C36BE,0x5FFC5D0,0xBDB6A64,0x5B78E2E,0x1C1A28CA,0x10E6441B,0x1F244061,0xB4704F0,0x141E5CCD,0x9837504,0x3F2E77E,0xD763740,0x1316EA0E,0xF0079,0x555C}; -const BIG ROI= {0xA06152A,0x2260B3A,0xB4C36BE,0x5FFC5D0,0xBDB6A64,0x5B78E2E,0x1C1A28CA,0x10E6441B,0x1F244061,0xB4704F0,0x141E5CCD,0x9837504,0x3F2E77E,0xD763740,0x1316EA0E,0xF0079,0x555C}; -const BIG R2modp= {0x8533EA9,0x6A02789,0x183B24DE,0x1E45ECF8,0xC8F8F37,0x10CAD209,0x4C0C4B8,0x9B1FABD,0xDEBE4C0,0xDC353F9,0x18A18E26,0x10F489BB,0x31206A5,0x19673BBF,0x6BE69F9,0xB091169,0x9CD}; -const BIG CRu= {0xDD794A9,0x1DE138A3,0x2BCCE90,0xC746127,0x15223DDC,0x1DD8890B,0xED08DB7,0xE24B9F,0xE379CE6,0x37011AC,0x11BAC820,0x1EEFAD01,0x200860F,0x147218A6,0xF16A209,0xF0079,0x555C}; -const chunk MConst= 0x95FE7D; -const BIG Fra= {0x1BF96F1D,0xAE53A55,0x31BFEEB,0x183FF17A,0x6237469,0x12A4F4F1,0x12101FE3,0x16E79D94,0xFF59267,0x5EB4EB4,0x78CC49F,0x274BA33,0x149184F3,0x16C6DCBA,0x1C90B694,0x10F729CE,0x4BBC}; -const BIG Frb= {0xE0CA60E,0x1740D0E4,0x83037D2,0xDBFD456,0x5B7F5FA,0x1312993D,0xA0A08E6,0x19FEA687,0xF2EADF9,0x55BB63C,0xC91982E,0x70EBAD1,0xF61628B,0x16AF5A85,0x16863379,0xF17D6AA,0x99F}; -const BIG SQRTm3= {0x11A91428,0x199C660C,0x1A2D6663,0x12E8FC7D,0x1E691154,0x15F983E8,0x186F2A5,0x10DE5323,0x1D4AF96A,0x1B991E67,0xF573372,0x145BE4FE,0xE24A1,0x1B6DFA0C,0xB165A04,0xF0079,0x555C}; -const BIG TWK= {0x16EA62F3,0x52C4905,0x17CF5F35,0x13967138,0x16BCA61B,0xF766FBB,0x9B547D6,0x11625BCD,0x1AFF154D,0xDE4D18C,0xF9C3EF8,0x84619DC,0x15E18EE4,0x1D55B149,0xED04681,0x64CDD9E,0x337A}; -#endif - -#if CHUNK==64 - -using namespace B480_56; -// Base Bits= 56 -const BIG Modulus= {0x44C1674A06152BL,0xFFE2E82D30DAF8L,0x6F1C5CBDB6A642L,0x3220DF068A328BL,0xE09E1F24406187L,0xBA825079733568L,0x6E803F2E77E4C1L,0x3CCC5BA839AECL,0x555C0078L}; -const BIG ROI= {0x44C1674A06152AL,0xFFE2E82D30DAF8L,0x6F1C5CBDB6A642L,0x3220DF068A328BL,0xE09E1F24406187L,0xBA825079733568L,0x6E803F2E77E4C1L,0x3CCC5BA839AECL,0x555C0078L}; -const BIG R2modp= {0x6A4A1FE013DF5BL,0xE8E46D4D1BDE65L,0x1F841391F45C67L,0x9148A4516FB28L,0x4398524EDF4C88L,0x41C0E241B6DCE8L,0xE42C208C19411L,0xA7FE6FD73A7B1CL,0xFCCCA76L}; -const BIG CRu= {0xBC27146DD794A9L,0x3A30938AF33A43L,0xB112175223DDC6L,0x125CFBB4236DFBL,0x2358E379CE607L,0xD680C6EB20806EL,0x314C200860FF77L,0x3CBC5A88268E4L,0x555C0078L}; -const chunk MConst= 0xBD5D7D8095FE7DL; -const BIG Fra= {0x5CA74ABBF96F1DL,0x1FF8BD0C6FFBADL,0x49E9E26237469CL,0x3CECA48407F8E5L,0x69D68FF59267B7L,0x5D199E33127CBDL,0xB97549184F313AL,0x4E77242DA52D8DL,0x4BBC87B9L}; -const BIG Frb= {0xE81A1C8E0CA60EL,0xDFEA2B20C0DF4AL,0x25327A5B7F5FA6L,0xF5343A828239A6L,0x76C78F2EADF9CFL,0x5D68B24660B8ABL,0xB50AF61628B387L,0xB555A18CDE6D5EL,0x99F78BEL}; -const BIG SQRTm3= {0x338CC191A91428L,0x747E3EE8B5998FL,0xF307D1E6911549L,0xF2991861BCA96BL,0x23CCFD4AF96A86L,0xF27F3D5CCDCB73L,0xF41800E24A1A2DL,0x3CAC5968136DBL,0x555C0078L}; -const BIG TWK= {0xA58920B6EA62F3L,0xCB389C5F3D7CD4L,0xECDF776BCA61B9L,0x12DE6A6D51F59EL,0x9A319AFF154D8BL,0xCEE3E70FBE1BCL,0x62935E18EE4423L,0xECF3B411A07AABL,0x337A3266L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48286.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48286.cpp deleted file mode 100644 index 7966399..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48286.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS48286.h" - -namespace BLS48286 { - -/* Curve BLS48286 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B288_29; - -// Base Bits= 29 -const BIG Modulus= {0x9C345B,0x13A815C9,0x38D4B67,0xC8388A5,0x4809AAF,0x63F0D60,0x516A1B2,0x16040390,0x11EC7BD7,0x14B9629}; -const BIG R2modp= {0x8484275,0x16B4A09C,0x13973525,0x19DBD350,0x188DE1C0,0x111BD51D,0x113A0F92,0x6489CAD,0xF188E5E,0xCED0C0}; -const BIG ROI= {0x9C345A,0x13A815C9,0x38D4B67,0xC8388A5,0x4809AAF,0x63F0D60,0x516A1B2,0x16040390,0x11EC7BD7,0x14B9629}; -const BIG CRu= {0x3773F7B,0xD329CB0,0xC2BB8E5,0x99D4594,0x667A6F2,0x1945AD4C,0x159AC407,0x20C33EA,0x332B8D8,0x14B921E}; -const chunk MConst= 0x16EA242D; -const BIG Fra= {0x1FC90183,0x15434AF9,0xF4FA4DB,0xAAD7DA3,0x8F09A7C,0x81F7813,0x1F8010F6,0x9D15D85,0xC522C11,0x6CA0BF}; -const BIG Frb= {0xD332D8,0x1E64CACF,0x143DA68B,0x1D60B01,0x1B900033,0x1E1F954C,0x59690BB,0xC32A60A,0x59A4FC6,0xDEF56A}; -const BIG SQRTm3= {0x6524A9C,0x6BD2397,0x14CA2663,0x6B70283,0x84EB335,0xC4C4D38,0x61EE65D,0xE146445,0x1478F5D8,0x14B8E12}; -const BIG TWK= {0x3D05DCC,0x13ECB9AE,0x10A9C2E6,0x132E0A8A,0x1AA2C6A1,0x65E8A65,0x19C887EF,0xA33E6E6,0xF448A33,0xE9076F}; -#endif - -#if CHUNK==64 - -using namespace B288_60; - -// Base Bits= 60 -const BIG Modulus= {0xE7502B9209C345BL,0xF641C4528E352D9L,0xC8C7E1AC04809AAL,0xD7B0201C8145A86L,0x2972C531EC7BL}; -const BIG R2modp= {0x61F9539D245AF2CL,0xA1991A6E51410D8L,0x1603A99FC661885L,0xC8A2CE485CD7822L,0xD54A6F0B25EL}; -const BIG ROI= {0xE7502B9209C345AL,0xF641C4528E352D9L,0xC8C7E1AC04809AAL,0xD7B0201C8145A86L,0x2972C531EC7BL}; -const BIG CRu= {0x5A6539603773F7BL,0x24CEA2CA30AEE39L,0x1F28B5A98667A6FL,0xD810619F5566B10L,0x297243C332B8L}; -const chunk MConst= 0x227E5D8F6EA242DL; -const BIG Fra= {0xEA8695F3FC90183L,0xC556BED1BD3E936L,0xD903EF0268F09A7L,0x114E8AEC2FE0043L,0xD9417EC522CL}; -const BIG Frb= {0xFCC9959E0D332D8L,0x30EB0580D0F69A2L,0xEFC3F2A99B90003L,0xC66195305165A42L,0x1BDEAD459A4FL}; -const BIG SQRTm3= {0xCD7A472E6524A9CL,0x535B8141D328998L,0x758989A7084EB33L,0xD870A3222987B99L,0x2971C25478F5L}; -const BIG TWK= {0xA7D9735C3D05DCCL,0x1997054542A70B9L,0xBCCBD14CBAA2C6AL,0x33519F37367221FL,0x1D20EDEF448AL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48556.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48556.cpp deleted file mode 100644 index 66b5331..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48556.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS48556.h" - -namespace BLS48556 { - -/* Curve BLS48556 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B560_29; - -// Base Bits= 29 -const BIG Modulus= {0x1CF6AC0B,0x17B7307F,0x19877E7B,0x12CE0134,0x14228402,0x1BD4C386,0x1DACBB04,0x40410D0,0x25A415,0x980B53E,0xDE6E250,0x15D9AAD6,0x5DA950,0x1029B7A,0x54AB351,0x14AD90CE,0x3729047,0x1FE7E2D9,0x145F610B,0x1F}; -const BIG ROI= {0x1CF6AC0A,0x17B7307F,0x19877E7B,0x12CE0134,0x14228402,0x1BD4C386,0x1DACBB04,0x40410D0,0x25A415,0x980B53E,0xDE6E250,0x15D9AAD6,0x5DA950,0x1029B7A,0x54AB351,0x14AD90CE,0x3729047,0x1FE7E2D9,0x145F610B,0x1F}; -const BIG R2modp= {0xD59D0FA,0x12F01FD0,0xDE8FD41,0x35AAEE1,0xB937F48,0x50700E8,0x1F50EFCE,0x1019B13C,0x3470A2F,0x11094115,0xF9FB72D,0x6AD10E2,0x1CFD9F8,0x44F4785,0x2B48793,0x1148ED3,0xF609E61,0x1EE34BC7,0x1735D29E,0x0}; -const BIG CRu= {0xCBBA429,0x1B273F3,0xD3DD160,0x19C61452,0x308093A,0x146E1E34,0xAE0E768,0x1185948,0x1B73BC2D,0x93D855C,0x1B1A639C,0x118C919B,0xFF04AE3,0xF1CCD77,0x91318E5,0x10644780,0x3A79F7,0x1BE77919,0x145F60F3,0x1F}; -const chunk MConst= 0x9DA805D; -const BIG Fra= {0x1325BF89,0x1311E7EC,0xCD0A56F,0x1A0FD46E,0xE83BCCA,0xCA97DD0,0x18D1D297,0x5F1E137,0x7AB9F2C,0x13FC255F,0x1C9DECEB,0x9DEF4A2,0x3C0F60B,0x1D9909E4,0x1FF27FF7,0x1DBF8208,0x89BB36C,0x40044E0,0x62E01EE,0x5}; -const BIG Frb= {0x1325BF89,0x1311E7EC,0xCD0A56F,0x1A0FD46E,0xE83BCCA,0xCA97DD0,0x18D1D297,0x5F1E137,0x7AB9F2C,0x13FC255F,0x1C9DECEB,0x9DEF4A2,0x3C0F60B,0x1D9909E4,0x1FF27FF7,0x1DBF8208,0x89BB36C,0x40044E0,0x62E01EE,0x5}; -const BIG SQRTm3= {0x1C809C48,0xBADB766,0xF42444,0xBE2770,0x11ED8E73,0xD0778E1,0x181513CC,0x1E2CA1BF,0x16C1D444,0x8FA557B,0x84DE4E8,0xD3F7861,0x1F82EC76,0x1D36FF74,0xCDB7E79,0xC1AFE32,0x1D0263A7,0x17E70F58,0x145F60DB,0x1F}; -const BIG TWK= {0x16F9937,0x9133D51,0xD89F92B,0x17A682C,0x16600368,0x1830F509,0x1531266E,0x159D972D,0x1C269C72,0x46E0687,0xCAA903,0x1EEF4D3A,0xED502F8,0x1046B2AB,0x1EC6EF4F,0xFD93805,0x1EEEDD57,0xD0AFF3F,0xC83E724,0x8}; -#endif - -#if CHUNK==64 - -using namespace B560_58; - -// Base Bits= 58 -const BIG Modulus= {0x2F6E60FFCF6AC0BL,0x259C02699877E7BL,0x37A9870D4228402L,0x80821A1DACBB04L,0x13016A7C025A415L,0x2BB355ACDE6E250L,0x20536F405DA950L,0x295B219C54AB351L,0x3FCFC5B23729047L,0x3F45F610BL}; -const BIG ROI= {0x2F6E60FFCF6AC0AL,0x259C02699877E7BL,0x37A9870D4228402L,0x80821A1DACBB04L,0x13016A7C025A415L,0x2BB355ACDE6E250L,0x20536F405DA950L,0x295B219C54AB351L,0x3FCFC5B23729047L,0x3F45F610BL}; -const BIG R2modp= {0x25E03FA0D59D0FAL,0x6B55DC2DE8FD41L,0xA0E01D0B937F48L,0x20336279F50EFCEL,0x2212822A3470A2FL,0xD5A21C4F9FB72DL,0x89E8F0A1CFD9F8L,0x2291DA62B48793L,0x3DC6978EF609E61L,0x1735D29EL}; -const BIG CRu= {0x364E7E6CBBA429L,0x338C28A4D3DD160L,0x28DC3C68308093AL,0x230B290AE0E768L,0x127B0AB9B73BC2DL,0x23192337B1A639CL,0x1E399AEEFF04AE3L,0x20C88F0091318E5L,0x37CEF23203A79F7L,0x3F45F60F3L}; -const chunk MConst= 0x21BFCBCA9DA805DL; -const BIG Fra= {0x2623CFD9325BF89L,0x341FA8DCCD0A56FL,0x1952FBA0E83BCCAL,0xBE3C26F8D1D297L,0x27F84ABE7AB9F2CL,0x13BDE945C9DECEBL,0x3B3213C83C0F60BL,0x3B7F0411FF27FF7L,0x80089C089BB36CL,0xA62E01EEL}; -const BIG Frb= {0x2623CFD9325BF89L,0x341FA8DCCD0A56FL,0x1952FBA0E83BCCAL,0xBE3C26F8D1D297L,0x27F84ABE7AB9F2CL,0x13BDE945C9DECEBL,0x3B3213C83C0F60BL,0x3B7F0411FF27FF7L,0x80089C089BB36CL,0xA62E01EEL}; -const BIG SQRTm3= {0x175B6ECDC809C48L,0x17C4EE00F42444L,0x1A0EF1C31ED8E73L,0x3C59437F81513CCL,0x11F4AAF76C1D444L,0x1A7EF0C284DE4E8L,0x3A6DFEE9F82EC76L,0x1835FC64CDB7E79L,0x2FCE1EB1D0263A7L,0x3F45F60DBL}; -const BIG TWK= {0x12267AA216F9937L,0x2F4D058D89F92BL,0x3061EA136600368L,0x2B3B2E5B531266EL,0x8DC0D0FC269C72L,0x3DDE9A740CAA903L,0x208D6556ED502F8L,0x1FB2700BEC6EF4FL,0x1A15FE7FEEEDD57L,0x10C83E724L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48581.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48581.cpp deleted file mode 100644 index f0af263..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BLS48581.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BLS48581.h" - -namespace BLS48581 { - -/* Curve BLS48581 - Pairing friendly BLS curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B584_29; - -// Base Bits= 29 -const BIG Modulus= {0x565912B,0x16E0AA73,0x12922B0F,0x1FBEE434,0xEE0A578,0x12A898B8,0xBDA0D9E,0x9E8E6DB,0x19CD3039,0x17041566,0x2B90EBD,0xEA88949,0xC0F1F39,0x18DD9DF3,0x1E344884,0xADD09,0x1D47012A,0x9C12718,0x1CD1DBCC,0x501EE7F,0x1}; -const BIG ROI= {0x565912A,0x16E0AA73,0x12922B0F,0x1FBEE434,0xEE0A578,0x12A898B8,0xBDA0D9E,0x9E8E6DB,0x19CD3039,0x17041566,0x2B90EBD,0xEA88949,0xC0F1F39,0x18DD9DF3,0x1E344884,0xADD09,0x1D47012A,0x9C12718,0x1CD1DBCC,0x501EE7F,0x1}; -const BIG R2modp= {0x19BCC5B0,0x126A343E,0xA46F6C0,0x29B7799,0xB758510,0x1357043D,0x1DC2D482,0x115A8C75,0x1F6CA5F6,0x9B40365,0x16E1C7DB,0x1A304684,0xA85F60F,0x16E21141,0x1D5AE21,0xD9EA745,0x1641FB69,0x249C4AC,0xA2B23E1,0x14FCE472,0x0}; -const BIG CRu= {0x1C79B90,0x6F4D62F,0x3977A09,0x19B1C7F1,0x1421A205,0x190FBA7B,0x16D758AA,0x129736C1,0x2F43166,0x115AFDC,0x1E9AA9CD,0xD508D6B,0xBED6FF4,0x1360F2FE,0x95960F5,0x709E55F,0x1F4E2096,0x2AEEAE8,0xB1A2DD4,0x0,0x0}; -const chunk MConst= 0x39D5A7D; -const BIG Fra= {0x42AEB25,0x1175B67F,0x182B4FE5,0x1683284E,0x115ECE4D,0x1EF92B83,0x22B03E9,0x6EF6A24,0x8C41890,0x4249F0E,0x61F9A1,0xC60FC53,0x16B62F49,0x71E57E,0xF9E161D,0xFA08F30,0x1E55F606,0x1AE6BF39,0x140527E9,0x1FA61B6,0x0}; -const BIG Frb= {0x42AEB25,0x1175B67F,0x182B4FE5,0x1683284E,0x115ECE4D,0x1EF92B83,0x22B03E9,0x6EF6A24,0x8C41890,0x4249F0E,0x61F9A1,0xC60FC53,0x16B62F49,0x71E57E,0xF9E161D,0xFA08F30,0x1E55F606,0x1AE6BF39,0x140527E9,0x1FA61B6,0x0}; -const BIG SQRTm3= {0x1D65A0A,0x8F6FE15,0xB6336FD,0xC5B5452,0x69D616D,0x8923C1,0x1E2B5C49,0x4BA7957,0x13E4CD6C,0x14D8B5AE,0x583BB23,0x14076E71,0x14343F50,0x121BB7F6,0xB818699,0x11F7124B,0x1EAABFFD,0x4635146,0x69D8024,0x501EE7F,0x1}; -const BIG TWK= {0x1F426953,0x1DA19E92,0xEE618F5,0x159C8B24,0xD37E160,0x145DEFD1,0xD2F0630,0x1FF9915F,0x2C4F62,0xDA1C978,0x51E0598,0x4FD2A34,0x132462ED,0x13341DC2,0x81D59C2,0x19374271,0x1D9EAEB8,0x1ABB4E6E,0xDEF0401,0x74CB4A,0x0}; -#endif - -#if CHUNK==64 - -using namespace B584_60; - -// Base Bits= 60 -const BIG Modulus= {0xEDC154E6565912BL,0x8FDF721A4A48AC3L,0x7A5513170EE0A57L,0x394F4736DAF6836L,0xAF6E082ACD9CD30L,0xF3975444A48AE43L,0x22131BB3BE6C0F1L,0x12A0056E84F8D1L,0x76F313824E31D47L,0x1280F73FF34L}; -const BIG ROI= {0xEDC154E6565912AL,0x8FDF721A4A48AC3L,0x7A5513170EE0A57L,0x394F4736DAF6836L,0xAF6E082ACD9CD30L,0xF3975444A48AE43L,0x22131BB3BE6C0F1L,0x12A0056E84F8D1L,0x76F313824E31D47L,0x1280F73FF34L}; -const BIG R2modp= {0x79868479F1B5833L,0xFB6EBA8FCB82D07L,0x9CC8A7F1FD84C7FL,0x402C51CF5CC3CBBL,0x3F3114F078502CL,0xFC90829BDC8336EL,0xC7BE91DE9CA8EEDL,0xD4D273BB17BFADBL,0x6EC7C9A81E792CAL,0x1DC317A6E4L}; -const BIG CRu= {0x4DE9AC5E1C79B90L,0x5CD8E3F88E5DE82L,0xAB21F74F7421A20L,0x6694B9B60DB5D62L,0x73422B5FB82F431L,0xFF46A846B5FA6AAL,0x83D66C1E5FCBED6L,0x2096384F2AFA565L,0x8B75055DD5D1F4EL,0x2C6L}; -const chunk MConst= 0x148B81FC39D5A7DL; -const BIG Fra= {0x62EB6CFE42AEB25L,0xDB41942760AD3F9L,0xA7DF2570715ECE4L,0x90377B51208AC0FL,0x6848493E1C8C418L,0xF496307E298187EL,0x58740E3CAFD6B62L,0xF6067D047983E78L,0x49FA75CD7E73E55L,0xFD30DB501L}; -const BIG Frb= {0x62EB6CFE42AEB25L,0xDB41942760AD3F9L,0xA7DF2570715ECE4L,0x90377B51208AC0FL,0x6848493E1C8C418L,0xF496307E298187EL,0x58740E3CAFD6B62L,0xF6067D047983E78L,0x49FA75CD7E73E55L,0xFD30DB501L}; -const BIG SQRTm3= {0x51EDFC2A1D65A0AL,0xD62DAA292D8CDBFL,0x24112478269D616L,0x6C25D3CABF8AD71L,0xC8E9B16B5D3E4CDL,0xF50A03B738960EEL,0x1A664376FED4343L,0xBFFD8FB8925AE06L,0x600908C6A28DEAAL,0x1280F73F9A7L}; -const BIG TWK= {0x7B433D25F426953L,0xACE45923B9863DL,0xC28BBDFA2D37E16L,0x62FFCC8AFB4BC18L,0x661B4392F002C4FL,0x2ED27E951A14781L,0x670A6683B853246L,0xAEB8C9BA138A075L,0xC10075769CDDD9EL,0x3A65A537BL}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN158.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN158.cpp deleted file mode 100644 index 7e0d583..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN158.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BN158.h" - -namespace BN158 { - -/* Curve BN158 - Pairing friendly BN curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B160_28; - -// Base Bits= 28 -const BIG Modulus= {0xB04E013,0x72280A,0xFD3FB95,0x9953CF6,0x27628C,0x24012}; -const BIG R2modp= {0x545973D,0xA60739B,0x65DB288,0x526165,0xB226C,0x17315}; -const BIG ROI= {0xB04E012,0x72280A,0xFD3FB95,0x9953CF6,0x27628C,0x24012}; -const BIG SQRTm3= {0x8018004,0x7F0E404,0x99F4CE2,0x95F35CA,0x2761FC,0x24012}; -const BIG CRu= {0x181B007,0x440A203,0x31A5759,0x1B0396,0x48,0x0}; -const chunk MConst= 0x4F615E5; -const BIG Fra= {0x6ECE2A9,0xA167429,0x99296F2,0xE1BF21C,0xCF82A02,0xA85E}; -const BIG Frb= {0x417FD6A,0x65BB3E1,0x64164A2,0xB794ADA,0x32F3889,0x197B3}; -#endif - -#if CHUNK==64 - -using namespace B160_56; - -// Base Bits= 56 -const BIG Modulus= {0x72280AB04E013L,0x9953CF6FD3FB95L,0x24012027628CL}; -const BIG R2modp= {0xA60739B545973DL,0x52616565DB288L,0x1731500B226CL}; -const BIG ROI= {0x72280AB04E012L,0x9953CF6FD3FB95L,0x24012027628CL}; -const BIG SQRTm3= {0x7F0E4048018004L,0x95F35CA99F4CE2L,0x2401202761FCL}; -const BIG CRu= {0x440A203181B007L,0x1B039631A5759L,0x48L}; -const chunk MConst= 0xFC609004F615E5L; -const BIG Fra= {0xA1674296ECE2A9L,0xE1BF21C99296F2L,0xA85ECF82A02L}; -const BIG Frb= {0x65BB3E1417FD6AL,0xB794ADA64164A2L,0x197B332F3889L}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254.cpp deleted file mode 100644 index 9588d4a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BN254.h" - -namespace BN254 { - -/* Curve BN254 - Pairing friendly BN curve */ - -/* Nogami's fast curve */ - -#if CHUNK==16 - -using namespace B256_13; - -// Base Bits= 13 -const BIG Modulus= {0x13,0x0,0x0,0x0,0x1A70,0x9,0x0,0x0,0x100,0x309,0x2,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A}; -const BIG ROI= {0x12,0x0,0x0,0x0,0x1A70,0x9,0x0,0x0,0x100,0x309,0x2,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A}; -const BIG R2modp= {0xF32,0x239,0x14DC,0xCE8,0x928,0x11B6,0x130F,0x1183,0x56E,0x1AEE,0x124F,0xD2A,0x7F8,0x1CE6,0x1B50,0x77C,0x3A,0x1A9E,0x1EFD,0x1C}; -const BIG CRu= {0x7,0x0,0x0,0x0,0xCD8,0x3,0x0,0x0,0x900,0x1248,0x0,0x0,0x400,0x19B1,0x126,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x15E5; -const BIG Fra= {0xDE9,0x1953,0x101B,0x1BCD,0xE17,0x1BE1,0x14FD,0x1249,0x974,0x1C28,0x54F,0x108D,0x150A,0x4CD,0x12D9,0xF91,0x12E,0x10C9,0xDDD,0x36}; -const BIG Frb= {0x122A,0x6AC,0xFE4,0x432,0xC58,0x428,0xB02,0xDB6,0x178B,0x6E0,0x1AB2,0xF72,0x2F5,0x1559,0x140F,0x106E,0x1ED1,0x1348,0x1AFB,0x13}; -const BIG SQRTm3= {0x4,0x0,0x0,0x0,0xC0,0x3,0x0,0x0,0xF00,0x1E78,0x0,0x0,0x1000,0x6C4,0x49B,0x0,0x0,0x412,0x8D9,0x4A}; -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0x13,0x0,0x13A7,0x0,0x86121,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2}; -const BIG ROI= {0x12,0x0,0x13A7,0x0,0x86121,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2}; -const BIG R2modp= {0xF5E7E39,0x2F2A96F,0xB96F13C,0x64E8642,0xC7146,0x9926F7B,0x4DACD24,0x8321E7B,0xD127A2E,0x1}; -const BIG CRu= {0x7,0x8000000,0x6CD,0x0,0x24909,0x4000000,0x49B362,0x0,0x0,0x0}; -const chunk MConst= 0x79435E5; -const BIG Fra= {0xF2A6DE9,0x7DE6C06,0xF77C2E1,0x74924D3,0x53F8509,0x50A8469,0xCB6499B,0x212E7C8,0xB377619,0x1}; -const BIG Frb= {0xD5922A,0x82193F9,0x8850C5,0x8B6DB2C,0xAC8DC17,0x2F57B96,0x503EAB2,0x1ED1837,0x9EBEE69,0x0}; -const BIG SQRTm3= {0x4,0x0,0x60C,0x0,0x3CF0F,0x0,0x126CD89,0x4000000,0x5236482,0x2}; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0x13L,0x13A7L,0x80000000086121L,0x40000001BA344DL,0x25236482L}; -const BIG ROI= {0x12L,0x13A7L,0x80000000086121L,0x40000001BA344DL,0x25236482L}; -const BIG R2modp= {0x2F2A96FF5E7E39L,0x64E8642B96F13CL,0x9926F7B00C7146L,0x8321E7B4DACD24L,0x1D127A2EL}; -const BIG CRu= {0x80000000000007L,0x6CDL,0x40000000024909L,0x49B362L,0x0L}; -const chunk MConst= 0x435E50D79435E5L; -const BIG Fra= {0x7DE6C06F2A6DE9L,0x74924D3F77C2E1L,0x50A846953F8509L,0x212E7C8CB6499BL,0x1B377619L}; -const BIG Frb= {0x82193F90D5922AL,0x8B6DB2C08850C5L,0x2F57B96AC8DC17L,0x1ED1837503EAB2L,0x9EBEE69L}; -const BIG SQRTm3= {0x4L,0x60CL,0x3CF0FL,0x4000000126CD89L,0x25236482L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254CX.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254CX.cpp deleted file mode 100644 index 6eaa2f5..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN254CX.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BN254CX.h" - -namespace BN254CX { - -/* Curve BN254CX - Pairing friendly BN curve */ - -/* CertiVox BN curve/field */ - -#if CHUNK==16 - -using namespace B256_13; - -// Base Bits= 13 -const BIG Modulus= {0x15B3,0xDA,0x1BD7,0xC47,0x1BE6,0x1F70,0x24,0x1DC3,0x1FD6,0x1921,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48}; -const BIG ROI= {0x15B2,0xDA,0x1BD7,0xC47,0x1BE6,0x1F70,0x24,0x1DC3,0x1FD6,0x1921,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48}; -const BIG R2modp= {0x1527,0x146B,0x12A7,0x1A60,0x1E0A,0x1382,0x2BC,0x1D3F,0xB30,0xA8,0xD19,0x11AB,0x1D40,0x1965,0xD6D,0x643,0x10FF,0x1BC7,0x1E61,0x31}; -const BIG CRu= {0x1C97,0x11A,0x5E5,0x126,0x31E,0x3AB,0x7BE,0xC8E,0x1DDF,0x205,0xFC5,0x1950,0x0,0x0,0x120,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x1E85; -const BIG Fra= {0xEA3,0xE40,0xCD5,0x1210,0x15BD,0x1C10,0x5CF,0x4DE,0x773,0x343,0x626,0x194E,0x18AA,0x10C5,0x12BF,0x2C,0x63A,0x17D,0x1642,0x26}; -const BIG Frb= {0x710,0x129A,0xF01,0x1A37,0x628,0x360,0x1A55,0x18E4,0x1863,0x15DE,0x138E,0x1B78,0x1D9C,0xE29,0x403,0x515,0x236,0x1E83,0x9BD,0x21}; -const BIG SQRTm3= {0x1C84,0x1EA4,0x100C,0x9FB,0x15AA,0x181A,0x10A8,0x4A6,0x418,0x1516,0x1A2A,0x225,0x1646,0x1EEF,0x1482,0x541,0x870,0x0,0x0,0x48}; -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0xC1B55B3,0x6623EF5,0x93EE1BE,0xD6EE180,0x6D3243F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2}; -const BIG ROI= {0xC1B55B2,0x6623EF5,0x93EE1BE,0xD6EE180,0x6D3243F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2}; -const BIG R2modp= {0x8A0800A,0x466A061,0x43056A3,0x2B3A225,0x9C6600,0x148515B,0x6BDF50,0xEC9EA56,0xC992E66,0x1}; -const chunk MConst= 0x9789E85; -const BIG Fra= {0x5C80EA3,0xD908335,0x3F8215B,0x7326F17,0x8986867,0x8AACA71,0x4AFE18B,0xA63A016,0x359082F,0x1}; -const BIG Frb= {0x6534710,0x8D1BBC0,0x546C062,0x63C7269,0xE3ABBD8,0xD9CDBC4,0x900DC53,0x623628A,0xA6F7D0,0x1}; -const BIG SQRTm3= {0x3D49C84,0xA4FDC03,0xA30355A,0x1825342,0x8AAA2C4,0x646112E,0xD20BDDF,0x8702A0,0x4000000,0x2}; - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0x6623EF5C1B55B3L,0xD6EE18093EE1BEL,0x647A6366D3243FL,0x8702A0DB0BDDFL,0x24000000L}; -const BIG ROI= {0x6623EF5C1B55B2L,0xD6EE18093EE1BEL,0x647A6366D3243FL,0x8702A0DB0BDDFL,0x24000000L}; -const BIG R2modp= {0x466A0618A0800AL,0x2B3A22543056A3L,0x148515B09C6600L,0xEC9EA5606BDF50L,0x1C992E66L}; -const chunk MConst= 0x4E205BF9789E85L; -const BIG Fra= {0xD9083355C80EA3L,0x7326F173F8215BL,0x8AACA718986867L,0xA63A0164AFE18BL,0x1359082FL}; -const BIG Frb= {0x8D1BBC06534710L,0x63C7269546C062L,0xD9CDBC4E3ABBD8L,0x623628A900DC53L,0x10A6F7D0L}; -const BIG SQRTm3= {0xA4FDC033D49C84L,0x1825342A30355AL,0x646112E8AAA2C4L,0x8702A0D20BDDFL,0x24000000L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN462.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN462.cpp deleted file mode 100644 index e3af5c1..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BN462.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BN462.h" - -namespace BN462 { - -/* Curve BN462 - Pairing friendly BN curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B464_28; - -// Base Bits= 28 -const BIG Modulus= {0x138013,0x1B0084,0x24,0xF640000,0xC6FF687,0xF6FF66F,0xFFFFFFF,0xC8020FF,0x2908F41,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}; -const BIG ROI= {0x138012,0x1B0084,0x24,0xF640000,0xC6FF687,0xF6FF66F,0xFFFFFFF,0xC8020FF,0x2908F41,0xD81,0xA000000,0xB7D9BFC,0x6FF0CF6,0xFFFFFFF,0x23FFF,0x8036012,0x2404}; -const BIG R2modp= {0x88F9612,0xC8B9999,0x247088C,0xDB3ACD5,0xCA792EF,0x6E92E73,0x34F5999,0x4273E13,0x6714A6A,0xCBFE239,0xA0E2617,0x2487CB3,0xBE0EA3C,0x97791E4,0x8A07DE5,0x56CFA97,0x373}; -const BIG CRu= {0x4235C97,0xE093179,0xF875631,0xDF6471E,0xF1440BD,0xCA83,0x480000,0x0,0x0,0x0}; -const chunk MConst= 0x11BB5E5; -const BIG Fra= {0x2575D1A,0xE4BE3FF,0x659DBDE,0xFC7D89,0x93FA118,0xD45D1D,0xCC78D9,0x6217331,0xD547C05,0xC792504,0x9A87E11,0x92ED03A,0x1727085,0xB5A8CC1,0xB40BCFD,0xF4348CB,0x16F}; -const BIG Frb= {0x55FF85B,0x204AE09,0x57BEB62,0x9023886,0xD630A20,0xF94F4B,0x84FF0D0,0x14A1A7A,0xB1DBADB,0xB00D8E4,0x1E85F7,0x7493CA0,0x68325B2,0x2008E6B,0xE90EA88,0x7F80940,0x23C3}; -const BIG SQRTm3= {0x210022,0x2400CC,0x24,0xEF80000,0xB07F12F,0xF6FF4BF,0xFFFFFFF,0x7C032FF,0x440AEC2,0xD81,0x8000000,0xDFD2FFB,0x6FF03F5,0xFFFFFFF,0x23FFF,0x8036012,0x2404}; -#endif - -#if CHUNK==64 - -using namespace B464_60; - -// Base Bits= 60 -const BIG Modulus= {0x401B00840138013L,0x87F640000000002L,0xFFFF6FF66FC6FF6L,0x8F41C8020FFFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}; -const BIG ROI= {0x401B00840138012L,0x87F640000000002L,0xFFFF6FF66FC6FF6L,0x8F41C8020FFFFFFL,0xD81290L,0xFF0CF6B7D9BFCA0L,0x23FFFFFFFFFF6L,0x24048036012L}; -const BIG R2modp= {0x89118D28DC21038L,0x1C24CD524708896L,0x96F6AF594FD13D3L,0xFC17B3AFB34F599L,0x617CBFE0F54B3BCL,0x105034B613F1E2L,0x47E597791E4CB9L,0x12EACA995DAL}; -const BIG CRu= {0xE0931794235C97L,0xDF6471EF875631L,0xCA83F1440BDL,0x480000L,0x0L}; -const chunk MConst= 0x718CE9E711BB5E5L; -const BIG Fra= {0xEE4BE3FF2575D1AL,0x180FC7D89659DBDL,0x8D90D45D1D93FA1L,0x7C0562173310CC7L,0x87E11C792504D54L,0x72708592ED03A9AL,0xB40BCFDB5A8CC11L,0x16FF4348CBL}; -const BIG Frb= {0x2204AE0955FF85BL,0x20902388657BEB6L,0xD00F94F4BD630AL,0xBADB14A1A7A84FFL,0xE85F7B00D8E4B1DL,0x8325B27493CA001L,0xE90EA882008E6B6L,0x23C37F80940L}; -const BIG SQRTm3= {0x402400CC0210022L,0x2FEF80000000002L,0xFFFF6FF4BFB07F1L,0xAEC27C032FFFFFFL,0xD81440L,0xFF03F5DFD2FFB80L,0x23FFFFFFFFFF6L,0x24048036012L}; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BRAINPOOL.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BRAINPOOL.cpp deleted file mode 100644 index 008745f..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_BRAINPOOL.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_BRAINPOOL.h" - -namespace BRAINPOOL { - -/* Brainpool Modulus */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0xF6E5377,0x13481D1,0x6202820,0xF623D52,0xD726E3B,0x909D838,0xC3E660A,0xA1EEA9B,0x9FB57DB,0xA}; -const BIG ROI= {0xF6E5376,0x13481D1,0x6202820,0xF623D52,0xD726E3B,0x909D838,0xC3E660A,0xA1EEA9B,0x9FB57DB,0xA}; -const BIG R2modp= {0xB9A3787,0x9E04F49,0x8F3CF49,0x2931721,0xF1DBC89,0x54E8C3C,0xF7559CA,0xBB411A3,0x773E15F,0x9}; -const chunk MConst= 0xEFD89B9; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0x13481D1F6E5377L,0xF623D526202820L,0x909D838D726E3BL,0xA1EEA9BC3E660AL,0xA9FB57DBL}; -const BIG ROI= {0x13481D1F6E5376L,0xF623D526202820L,0x909D838D726E3BL,0xA1EEA9BC3E660AL,0xA9FB57DBL}; -const BIG R2modp= {0x9E04F49B9A3787L,0x29317218F3CF49L,0x54E8C3CF1DBC89L,0xBB411A3F7559CAL,0x9773E15FL}; -const chunk MConst= 0xA75590CEFD89B9L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1174.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1174.cpp deleted file mode 100644 index dbbf0f5..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1174.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_C1174.h" - -namespace C1174 { - -/* Curve C1174 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFF7,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG R2modp= {0x5100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG ROI= {0x1FFFFFF6,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const chunk MConst= 0x9; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFFFFFF7L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x7FFFFFFL}; -const BIG R2modp= {0x0L,0x144L,0x0L,0x0L,0x0L}; -const BIG ROI= {0xFFFFFFFFFFFFF6L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x7FFFFFFL}; -const chunk MConst= 0x9L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1665.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1665.cpp deleted file mode 100644 index 1f2dea3..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C1665.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_C1665.h" - -namespace C1665 { - -/* Curve C1665 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B168_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFFB,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFF}; -const BIG R2modp= {0x190000,0x0,0x0,0x0,0x0,0x0}; -const BIG ROI= {0x1FFFFFFA,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFF}; -const chunk MConst= 0x5; -#endif - -#if CHUNK==64 - -using namespace B168_60; - -// Base Bits= 60 -const BIG Modulus= {0xFFFFFFFFFFFFFFBL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFL}; -const BIG R2modp= {0x190000000L,0x0L,0x0L}; -const BIG ROI= {0xFFFFFFFFFFFFFFAL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFL}; -const chunk MConst= 0x5L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C41417.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C41417.cpp deleted file mode 100644 index 0c03263..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_C41417.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_C41417.h" - -namespace C41417 { - -/* Curve C41417 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B416_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFEF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFF}; -const BIG ROI= {0x1FFFFFEE,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFF}; -const BIG R2modp= {0x0,0x242000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x11; -#endif - -#if CHUNK==64 - -using namespace B416_60; - -// Base Bits= 60 -const BIG Modulus= {0xFFFFFFFFFFFFFEFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFL}; -const BIG ROI= {0xFFFFFFFFFFFFFEEL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFL}; -const BIG R2modp= {0x121000L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const chunk MConst= 0x11L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F25519.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F25519.cpp deleted file mode 100644 index 67ae9e2..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F25519.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_F25519.h" - - -namespace F25519 { -/* Curve 25519 */ - -#if CHUNK==16 - -using namespace B256_13; - -// Base Bits= 13 -const BIG Modulus= {0x1FED,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0xFF}; -const BIG ROI= {0xB0,0x1075,0x9D2,0x1C36,0xC4E,0x123C,0x14BF,0xD5,0x318,0x197A,0x15E9,0x1BF7,0x993,0x680,0xCAD,0x1BE1,0xFC1,0x402,0xC9,0x57}; -const BIG R2modp= {0x400,0x2D,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x13; - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFED,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF}; -const BIG ROI= {0xA0EA0B0,0x770D93A,0xBF91E31,0x6300D5A,0x1D7A72F4,0x4C9EFD,0x1C2CAD34,0x1009F83B,0x2B8324}; -const BIG R2modp= {0x169000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x13; - - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFFFFFEDL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x7FFFFFFFL}; -const BIG ROI= {0xEE1B274A0EA0B0L,0x1806AD2FE478C4L,0x993DFBD7A72F43L,0x4FC1DF0B2B4D00L,0x2B832480L}; -const BIG R2modp= {0xA4000000000000L,0x5L,0x0L,0x0L,0x0L}; -const chunk MConst= 0x13L; - - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PME.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PME.cpp deleted file mode 100644 index 4fc103f..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PME.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_F256PME.h" - -namespace F256PME { - -/* NUMS 256-bit modulus */ - - -#if CHUNK==16 - -using namespace B256_13; - -// Base Bits= 13 -const BIG Modulus= {0x1F43,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FF}; -const BIG ROI= {0x1F42,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FF}; -const BIG R2modp= {0x900,0x45C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0xBD; -#endif - -#if CHUNK==32 - -using namespace B256_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFF43,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF}; -const BIG ROI= {0x1FFFFF42,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF}; -const BIG R2modp= {0x22E2400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0xBD; - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFFFFF43L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG ROI= {0xFFFFFFFFFFFF42L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG R2modp= {0x89000000000000L,0x8BL,0x0L,0x0L,0x0L}; -const chunk MConst= 0xBDL; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PMW.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PMW.cpp deleted file mode 100644 index 8314087..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F256PMW.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_F256PMW.h" - -namespace F256PMW { - -/* NUMS 256-bit modulus */ - - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0xFFFFF43,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}; -const BIG ROI= {0xFFFFF42,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}; -const BIG R2modp= {0x0,0x8900000,0x8B,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0xBD; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFFFFF43L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG ROI= {0xFFFFFFFFFFFF42L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG R2modp= {0x89000000000000L,0x8BL,0x0L,0x0L,0x0L}; -const chunk MConst= 0xBDL; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F384PM.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F384PM.cpp deleted file mode 100644 index 4331717..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F384PM.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_F384PM.h" - -namespace F384PM { - -/* NUMS 384-bit modulus */ - - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFEC3,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG ROI= {0x1FFFFEC2,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG R2modp= {0x0,0x4448000,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x13D; -#endif - -#if CHUNK==64 - -using namespace B384_58; - -// Base Bits= 58 -const BIG Modulus= {0x3FFFFFFFFFFFEC3L,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFL}; -const BIG R2modp= {0x88900000000000L,0x6L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG ROI= {0x3FFFFFFFFFFFEC2L,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFL}; -const chunk MConst= 0x13DL; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F448.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F448.cpp deleted file mode 100644 index 15d291e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F448.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_F448.h" - -namespace F448 { - -/* Curve Ed448 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B448_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF}; -const BIG ROI= {0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF}; -const BIG R2modp= {0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x3000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x1; -//const int BTset= 224; - -#endif - -#if CHUNK==64 - -using namespace B448_58; - -// Base Bits= 58 -const BIG Modulus= {0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL}; -const BIG ROI= {0x3FFFFFFFFFFFFFEL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL}; -const BIG R2modp= {0x200000000L,0x0L,0x0L,0x0L,0x3000000L,0x0L,0x0L,0x0L}; -const chunk MConst= 0x1L; -//const int BTset=224; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F512PM.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F512PM.cpp deleted file mode 100644 index 40388c3..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_F512PM.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_F512PM.h" - -namespace F512PM { - -/* NUMS 512-bit modulus */ - - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B512_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFDC7,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG ROI= {0x1FFFFDC6,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG R2modp= {0xB100000,0x278,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x239; -#endif - -#if CHUNK==64 - -using namespace B512_60; - -// Base Bits= 60 -const BIG Modulus= {0xFFFFFFFFFFFFDC7L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG R2modp= {0x100000000000000L,0x4F0BL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const BIG ROI= {0xFFFFFFFFFFFFDC6L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const chunk MConst= 0x239L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP256BN.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP256BN.cpp deleted file mode 100644 index fa66c7a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP256BN.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_FP256BN.h" - -namespace FP256BN { - -/* Curve FP512BN - Pairing friendly BN curve */ - -/* ISO curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 - -const BIG Modulus= {0xED33013,0x292DDBA,0x80A82D3,0x65FB129,0x49F0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}; -const BIG ROI= {0xED33012,0x292DDBA,0x80A82D3,0x65FB129,0x49F0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF}; -const BIG R2modp= {0x3B9F8B,0xEDE3363,0xFEC54E8,0x92FFEE9,0x3C55F79,0x13C1C06,0xC0123FA,0xA12F2EA,0xE559B2A,0x8}; -const chunk MConst= 0x537E5E5; -const BIG CRu= {0x3A1B807,0x1C0A24A,0x32D1EDB,0xD79DF19,0x8659BCD,0x4092101,0x13988E1,0x0,0x0,0x0}; -const BIG Fra= {0xF943106,0x760328A,0xAB28F74,0x71511E3,0x7CF39A1,0x8DDB086,0x52D1A6E,0xCA786F3,0xD617662,0x3}; -const BIG Frb= {0xF3EFF0D,0xB32AB2F,0xD57F35E,0xF4A9F45,0xCCFD33A,0xD113693,0x819CB83,0x3584819,0x29E899D,0xC}; -const BIG SQRTm3= {0x78FC004,0xF119926,0x1B0451C,0xB6BF2F7,0x3D3D540,0xDDCA517,0xAD3D42F,0xFFFCF0C,0xFFFFFFF,0xF}; - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0x292DDBAED33013L,0x65FB12980A82D3L,0x5EEE71A49F0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL}; -const BIG ROI= {0x292DDBAED33012L,0x65FB12980A82D3L,0x5EEE71A49F0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL}; -const BIG R2modp= {0xEDE336303B9F8BL,0x92FFEE9FEC54E8L,0x13C1C063C55F79L,0xA12F2EAC0123FAL,0x8E559B2AL}; -const chunk MConst= 0x6C964E0537E5E5L; -const BIG CRu= {0x1C0A24A3A1B807L,0xD79DF1932D1EDBL,0x40921018659BCDL,0x13988E1L,0x0L}; -const BIG Fra= {0x760328AF943106L,0x71511E3AB28F74L,0x8DDB0867CF39A1L,0xCA786F352D1A6EL,0x3D617662L}; -const BIG Frb= {0xB32AB2FF3EFF0DL,0xF4A9F45D57F35EL,0xD113693CCFD33AL,0x3584819819CB83L,0xC29E899DL}; -const BIG SQRTm3= {0xF11992678FC004L,0xB6BF2F71B0451CL,0xDDCA5173D3D540L,0xFFFCF0CAD3D42FL,0xFFFFFFFFL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP512BN.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP512BN.cpp deleted file mode 100644 index e26c498..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_FP512BN.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_FP512BN.h" - -namespace FP512BN { - -/* Curve FP512BN - Pairing friendly BN curve */ - -/* ISO curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B512_29; - -// Base Bits= 29 - -const BIG Modulus= {0x2ADEF33,0x7594049,0x131919ED,0x14AB9CBE,0x16FE1916,0x12EF5591,0x2E39231,0x3D597D3,0x55146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG ROI= {0x2ADEF32,0x7594049,0x131919ED,0x14AB9CBE,0x16FE1916,0x12EF5591,0x2E39231,0x3D597D3,0x55146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG R2modp= {0xFD68B47,0xFCF5D2C,0x437675A,0x1BBC3FBF,0x1411E413,0x13453559,0x10B5639,0x1C34CE79,0x6D476BF,0xFD05F2B,0x15D17C28,0x6C9F76E,0x1C2375B3,0x78CCE9B,0x15F0AB33,0x1960F32E,0x1A8D44E,0x57A38}; -const chunk MConst= 0x1CCC5C05; -const BIG CRu= {0x1C79298A,0x1838B104,0x2C5F052,0x1DCCF337,0x6092AEC,0x4B35F29,0x1EB361E,0x11384EA,0x3074B20,0x17BB08FD,0x3A8B3E3,0xD70D66F,0x3D2A614,0x1CF63EE4,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; -const BIG Fra= {0x14B73AB2,0x4B0BD8F,0xABB47D,0x2A29EC4,0x18681E17,0x104069DE,0x12EED67D,0x1553D0A5,0x398E9F8,0x7971034,0xAC9AF23,0x52DEF23,0x14EA18A5,0x1463E345,0x6DE465A,0x17F212B4,0x1AA9CF5B,0xF7B8}; -const BIG Frb= {0xDF6B481,0x2A882B9,0x126D6570,0x1208FDFA,0x1E95FAFF,0x2AEEBB2,0xFF4BBB4,0xE81C72D,0x1B85CD6,0xF67746,0x56549CD,0xC68B6EC,0x776A178,0x8925C3B,0x1921B9A5,0x80DED4B,0x55630A4,0x70847}; -const BIG SQRTm3= {0x164463E2,0x91821C0,0x1272C6B8,0x6EE49AF,0x15143CC3,0x167768C0,0xF2DA0A,0x1E517201,0xBD4F70,0x6E88A80,0x17226ED7,0x94B06CE,0xB44920B,0x1CF63E47,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}; - - -#endif - -#if CHUNK==64 - -using namespace B512_60; - -// Base Bits= 60 - -const BIG Modulus= {0x4EB280922ADEF33L,0x6A55CE5F4C6467BL,0xC65DEAB236FE191L,0xCF1EACBE98B8E48L,0x3C111B0EF455146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG ROI= {0x4EB280922ADEF32L,0x6A55CE5F4C6467BL,0xC65DEAB236FE191L,0xCF1EACBE98B8E48L,0x3C111B0EF455146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG R2modp= {0x1FA6DCEF99812E9L,0xAB3452895A0B74EL,0xC53EA988C079E1EL,0x1E90E033BA630B9L,0xF1EA41C0714D8B0L,0xE72785387509E28L,0xD86794F834DAB00L,0x9757C2ACCD342A1L,0x44ECB079L}; -const chunk MConst= 0x692A189FCCC5C05L; -const BIG CRu= {0xB0716209C79298AL,0xCEE6799B8B17C14L,0x78966BE526092AEL,0x20089C27507ACD8L,0xF8EF7611FA3074BL,0x6146B86B378EA2CL,0xFFFF9EC7DC83D2AL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG Fra= {0x49617B1F4B73AB2L,0x71514F6202AED1FL,0xF6080D3BD8681E1L,0xF8AA9E852CBBB59L,0xC8CF2E2068398E9L,0x8A5296F791AB26BL,0x196A8C7C68B4EA1L,0xCF5BBF9095A1B79L,0x1EF71AA9L}; -const BIG Frb= {0x5510572DF6B481L,0xF9047EFD49B595CL,0xD055DD765E95FAFL,0xD6740E396BFD2EEL,0x7341ECEE8C1B85CL,0x1786345B7615952L,0xE695124B876776AL,0x30A4406F6A5E486L,0xE108E556L}; -const BIG SQRTm3= {0x1230438164463E2L,0x337724D7C9CB1AEL,0x2ACEED1815143CCL,0x70F28B90083CB68L,0xB5CDD115000BD4FL,0x20B4A583675C89BL,0xFFFF9EC7C8EB449L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_HIFIVE.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_HIFIVE.cpp deleted file mode 100644 index 924cd1f..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_HIFIVE.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_HIFIVE.h" - -namespace HIFIVE { - -/* Curve HIFIVE */ - - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B336_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFFD,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFF}; -const BIG ROI= {0x1559D3B8,0x1C02413F,0xFAB18DA,0x128A7172,0xB95DA4C,0x16D4FE54,0x3107D87,0xAA7BEF3,0x1C38B2B4,0x1A93C08F,0x10F80C7B,0x1F27F}; -const BIG R2modp= {0x9000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x3; -#endif - -#if CHUNK==64 - -using namespace B336_60; - -// Base Bits= 60 -const BIG Modulus= {0xFFFFFFFFFFFFFFDL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFL}; -const BIG ROI= {0xB804827F559D3B8L,0xC94538B93EAC636L,0x1EDA9FCA8B95DA4L,0xB4553DF798C41F6L,0x1EF527811FC38B2L,0xF93FC3E03L}; -const BIG R2modp= {0x9000000000000L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const chunk MConst= 0x3L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_JUBJUB.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_JUBJUB.cpp deleted file mode 100644 index a20171f..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_JUBJUB.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_JUBJUB.h" - -namespace JUBJUB { - -/* JUBJUB Modulus */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -// Base Bits= 29 -const BIG Modulus= {0x1,0x1FFFFFF8,0x1F96FFBF,0x1B4805FF,0x1D80553B,0xC0404D0,0x1520CCE7,0xA6533AF,0x73EDA7}; -const BIG ROI= {0xB912F1F,0x1BC47A80,0xCF82506,0x49FE4E1,0xD6C0C40,0x16E468B4,0xDBC3F55,0x13CB682D,0x212D7}; -const BIG R2modp= {0xA71B3C0,0x1D32207E,0x1663D999,0x1C5ABC93,0x3B58C44,0xBE37438,0x829F771,0x1660139E,0x27FD91}; -const chunk MConst= 0x1FFFFFFF; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFF00000001L,0xA402FFFE5BFEFFL,0x809A1D80553BDL,0x299D7D483339D8L,0x73EDA753L}; -const BIG ROI= {0x788F500B912F1FL,0x4FF270B3E0941BL,0xC8D168D6C0C402L,0x5B416B6F0FD56DL,0x212D79EL}; -const BIG R2modp= {0x3B3440EC31BBA9L,0x8929657E045FB0L,0x2D645CF57C6E1AL,0xEA6A1C5012ECF5L,0x3C7B9D12L}; -const chunk MConst= 0xFFFFFEFFFFFFFFL; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_MDC.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_MDC.cpp deleted file mode 100644 index a193694..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_MDC.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_MDC.h" - -namespace MDC { - -/* Million Dollar Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0x779EC13,0x3710405,0x7AF9EC1,0x9037EF0,0xD4F086A,0xFDD7A5F,0x4532F92,0xD456AFB,0x13B68B9,0xF}; -const BIG R2modp= {0xDA5D1FE,0xDE5B77F,0x2985975,0x3228385,0x95FA423,0xA24A9FC,0xA869FAE,0x6853D0E,0xEC4B765,0x3}; -const BIG ROI= {0x779EC12,0x3710405,0x7AF9EC1,0x9037EF0,0xD4F086A,0xFDD7A5F,0x4532F92,0xD456AFB,0x13B68B9,0xF}; -const chunk MConst= 0xAE541E5; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0x3710405779EC13L,0x9037EF07AF9EC1L,0xFDD7A5FD4F086AL,0xD456AFB4532F92L,0xF13B68B9L}; -const BIG R2modp= {0xDE5B77FDA5D1FEL,0x32283852985975L,0xA24A9FC95FA423L,0x6853D0EA869FAEL,0x3EC4B765L}; -const BIG ROI= {0x3710405779EC12L,0x9037EF07AF9EC1L,0xFDD7A5FD4F086AL,0xD456AFB4532F92L,0xF13B68B9L}; -const chunk MConst= 0xF10FDDAAE541E5L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST256.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST256.cpp deleted file mode 100644 index 234638e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST256.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_NIST256.h" - -namespace NIST256 { - -/* Curve NIST256 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFF,0x0,0x0,0x1000000,0x0,0xFFFFFFF,0xF}; -const BIG ROI= {0xFFFFFFE,0xFFFFFFF,0xFFFFFFF,0xFFF,0x0,0x0,0x1000000,0x0,0xFFFFFFF,0xF}; -const BIG R2modp= {0x50000,0x300000,0x0,0x0,0xFFFFFFA,0xFFFFFBF,0xFFFFEFF,0xFFFAFFF,0x2FFFF,0x0}; -const chunk MConst= 0x1; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFL,0x0L,0x1000000L,0xFFFFFFFFL}; -const BIG ROI= {0xFFFFFFFFFFFFFEL,0xFFFFFFFFFFL,0x0L,0x1000000L,0xFFFFFFFFL}; -const BIG R2modp= {0x3000000050000L,0x0L,0xFFFFFBFFFFFFFAL,0xFFFAFFFFFFFEFFL,0x2FFFFL}; -const chunk MConst= 0x1L; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST384.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST384.cpp deleted file mode 100644 index 59d5672..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST384.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_NIST384.h" - -namespace NIST384 { - -/* Curve NIST384 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B384_29; - -// Base Bits= 29 -const BIG Modulus= {0x1FFFFFFF,0x7,0x0,0x1FFFFE00,0x1FFFEFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG ROI= {0x1FFFFFFE,0x7,0x0,0x1FFFFE00,0x1FFFEFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F}; -const BIG R2modp= {0x0,0x8000,0x1FF80000,0x1FFFFF,0x2000000,0x0,0x0,0x1FFFFFFC,0xF,0x100,0x400,0x0,0x0,0x0}; -const chunk MConst= 0x1; -#endif - -#if CHUNK==64 - -using namespace B384_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFL,0xFFFF0000000000L,0xFFFFFFFFFEFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL}; -const BIG ROI= {0xFFFFFFFEL,0xFFFF0000000000L,0xFFFFFFFFFEFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL}; -const BIG R2modp= {0xFE000000010000L,0xFFFFFFL,0x2L,0xFFFFFFFE00L,0x1000000020000L,0x0L,0x0L}; -const chunk MConst= 0x100000001L; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST521.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST521.cpp deleted file mode 100644 index 29ce9c1..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_NIST521.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_NIST521.h" - -namespace NIST521 { - -/* Curve NIST521 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B528_28; - -// Base Bits= 28 -const BIG Modulus= {0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF}; -const BIG ROI= {0xFFFFFFE,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF}; -const BIG R2modp= {0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x1; -#endif - -#if CHUNK==64 - -using namespace B528_60; - -// Base Bits= 60 -const BIG Modulus= {0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x1FFFFFFFFFFL}; -const BIG ROI= {0xFFFFFFFFFFFFFFEL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x1FFFFFFFFFFL}; -const BIG R2modp= {0x4000000000L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}; -const chunk MConst= 0x1L; -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP160R1.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP160R1.cpp deleted file mode 100644 index 71fdf8e..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP160R1.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_SECP160R1.h" - -namespace SECP160R1 { - -/* Curve SECP160R1 */ - -#if CHUNK==16 -using namespace B160_13; -// Base Bits= 13 -const BIG Modulus= {0x1FFF,0x1FFF,0x1FDF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0xF}; -const BIG R2modp= {0x0,0x20,0x0,0x800,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0}; -const BIG ROI= {0x1FFE,0x1FFF,0x1FDF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0xF}; -const chunk MConst= 0x1; - -#endif - -#if CHUNK==32 - -using namespace B160_29; - -// Base Bits= 29 - - -const BIG Modulus= {0x1FFFFFFF,0x1FFFFFFB,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFF}; -const BIG R2modp= {0x10000000,0x0,0x4,0x8,0x0,0x0}; -const BIG ROI= {0x1FFFFFFE,0x1FFFFFFB,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFF}; -const chunk MConst= 0x1; - - -#endif - -#if CHUNK==64 - -using namespace B160_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFF7FFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL}; -const BIG R2modp= {0x1000000010000L,0x400000L,0x0L}; -const BIG ROI= {0xFFFFFF7FFFFFFEL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL}; -const chunk MConst= 0xFFFFFF80000001L; - - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP256K1.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP256K1.cpp deleted file mode 100644 index 5d19274..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SECP256K1.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_SECP256K1.h" - -namespace SECP256K1 { - -/* Curve SECP256K1 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0xFFFFC2F,0xFFFFFEF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}; -const BIG ROI= {0xFFFFC2E,0xFFFFFEF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF}; -const BIG R2modp= {0x0,0xA100000,0x2000E90,0x7A,0x1,0x0,0x0,0x0,0x0,0x0}; -const chunk MConst= 0x2253531; -const BIG SQRTm3= {0x4,0x0,0x60C,0x0,0x3CF0F,0x0,0x126CD89,0x4000000,0x5236482,0x2}; - - -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFEFFFFFC2FL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG ROI= {0xFFFFFEFFFFFC2EL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL}; -const BIG R2modp= {0xA1000000000000L,0x7A2000E90L,0x1L,0x0L,0x0L}; -const chunk MConst= 0x38091DD2253531L; -const BIG SQRTm3= {0x8D27AE1CD5F852L,0x6D15DA14ECD47DL,0xC2A797962CC61FL,0x3507F1DF233770L,0xA2D2BA9L}; - - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SM2.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SM2.cpp deleted file mode 100644 index de85654..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_SM2.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_SM2.h" - -namespace SM2 { - -/* Curve SM2 */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_28; - -// Base Bits= 28 -const BIG Modulus= {0xFFFFFFF,0xFFFFFFF,0xFF,0xFFFF000,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFE,0xF}; -const BIG ROI= {0xFFFFFFE,0xFFFFFFF,0xFF,0xFFFF000,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFE,0xF}; -const BIG R2modp= {0x40000,0x300000,0xE000000,0xFFFFFFF,0x2,0x30,0x100,0x1000,0x60000,0x0}; -const chunk MConst= 0x1; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base Bits= 56 -const BIG Modulus= {0xFFFFFFFFFFFFFFL,0xFFFF00000000FFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFEL}; -const BIG ROI= {0xFFFFFFFFFFFFFEL,0xFFFF00000000FFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFEL}; -const BIG R2modp= {0x3000000040000L,0xFFFFFFFE000000L,0x300000002L,0x10000000100L,0x60000L}; -const chunk MConst= 0x1L; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDEE.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDEE.cpp deleted file mode 100644 index 2b13555..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDEE.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_TWEEDLEDEE.h" - -namespace TWEEDLEDEE { - -/* TWEEDLEDEE Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -// Base bits= 29 -const BIG Modulus= {0x1,0x1657EA0,0x18A1B261,0x15424ED2,0x38,0x0,0x0,0x0,0x400000}; -const BIG R2modp= {0x3FF4,0xE8E1080,0xA9C2909,0xC128269,0x89F8301,0x19607541,0x1F4C0E6F,0x3443009,0x22B644}; -const BIG ROI= {0x69D57EC,0x5E991A4,0x213EFC7,0x10FBA370,0x72930A2,0x5B22D4C,0x102FC76F,0xA21B807,0x113EFC}; -const BIG SQRTm3= {0x91F49FA,0x17E6AD31,0x19F5AE40,0x8F54DB0,0x3FFCD01,0xB5FF973,0x12C43D6C,0xE878126,0x2D8CDA}; -const chunk MConst= 0x1FFFFFFF; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base bits= 56 -const BIG Modulus= {0x2CAFD400000001L,0xA127696286C984L,0x38AL,0x0L,0x40000000L}; -const BIG R2modp= {0x21CA8949BBE5DFL,0x717E3D9E719200L,0xB8A93694FCEE5L,0xE6FCB03AA0A27EL,0x2013F4C0L}; -const BIG ROI= {0xBD3234869D57ECL,0x7DD1B8084FBF1CL,0x645A9872930A28L,0xDC03C0BF1DBCBL,0x113EFC51L}; -const BIG SQRTm3= {0xFCD5A6291F49FAL,0x7AA6D867D6B902L,0xBFF2E63FFCD014L,0x3C0934B10F5B16L,0x2D8CDA74L}; -const chunk MConst= 0x2CAFD3FFFFFFFFL; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDUM.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDUM.cpp deleted file mode 100644 index 9e9f6e5..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rom_field_TWEEDLEDUM.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "arch.h" -#include "fp_TWEEDLEDUM.h" - -namespace TWEEDLEDUM { - -/* TWEEDLEDUM Curve */ - -#if CHUNK==16 - -#error Not supported - -#endif - -#if CHUNK==32 - -using namespace B256_29; - -// Base bits= 29 -const BIG Modulus= {0x1,0xA032710,0xFD66E68,0x15424ED8,0x38,0x0,0x0,0x0,0x400000}; -const BIG R2modp= {0x3FF4,0x1B622B40,0x1166FB28,0x5BEEDDF,0x16646668,0x321298C,0xDD7B28E,0x3E66507,0x22B644}; -const BIG ROI= {0x188837CE,0x1EF4F98D,0x1AA67594,0xDD1E7E7,0x2D57FF4,0x197557C6,0xBF3D893,0x2F121DC,0x2AE451}; -const BIG SQRTm3= {0x17DE6C70,0x10786BD5,0x1DC95B25,0xD55C069,0x184CB128,0x16EB9107,0x1B5B20A1,0x95285A0,0x15EF7D}; -const chunk MConst= 0x1FFFFFFF; -#endif - -#if CHUNK==64 - -using namespace B256_56; - -// Base bits= 56 -const BIG Modulus= {0x4064E200000001L,0xA1276C3F59B9A1L,0x38AL,0x0L,0x40000000L}; -const BIG R2modp= {0xFC85D749BBE0CDL,0x64ED6614FCA69BL,0x9925C8F6AC3D6DL,0x28E19094C65991L,0xA0EDD7BL}; -const BIG ROI= {0xDE9F31B88837CEL,0xE8F3F3EA99D653L,0xEAAF8C2D57FF46L,0x890EE2FCF624F2L,0x2AE45117L}; -const BIG SQRTm3= {0xF0D7AB7DE6C70L,0xAAE034F7256C96L,0xD7220F84CB1286L,0x942D06D6C8286DL,0x15EF7D4AL}; -const chunk MConst= 0x4064E1FFFFFFFFL; - -#endif - -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rsa.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rsa.cpp deleted file mode 100644 index 3665a48..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/rsa.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* RSA Functions - see main program below */ - -#include -#include -#include -#include - -#include "rsa_WWW.h" - -using namespace XXX; - -/* generate an RSA key pair */ -void WWW::RSA_KEY_PAIR(csprng *RNG, sign32 e, rsa_private_key *PRIV, rsa_public_key *PUB, octet *P, octet* Q) -{ - /* IEEE1363 A16.11/A16.12 more or less */ - BIG t[HFLEN_WWW], p1[HFLEN_WWW], q1[HFLEN_WWW]; - - if (RNG != NULL) - { - - for (;;) - { - - FF_random(PRIV->p, RNG, HFLEN_WWW); - while (FF_lastbits(PRIV->p, 2) != 3) FF_inc(PRIV->p, 1, HFLEN_WWW); - while (!FF_prime(PRIV->p, RNG, HFLEN_WWW)) - FF_inc(PRIV->p, 4, HFLEN_WWW); - - FF_copy(p1, PRIV->p, HFLEN_WWW); - FF_dec(p1, 1, HFLEN_WWW); - - if (FF_cfactor(p1, e, HFLEN_WWW)) continue; - break; - } - - for (;;) - { - FF_random(PRIV->q, RNG, HFLEN_WWW); - while (FF_lastbits(PRIV->q, 2) != 3) FF_inc(PRIV->q, 1, HFLEN_WWW); - while (!FF_prime(PRIV->q, RNG, HFLEN_WWW)) - FF_inc(PRIV->q, 4, HFLEN_WWW); - - FF_copy(q1, PRIV->q, HFLEN_WWW); - FF_dec(q1, 1, HFLEN_WWW); - if (FF_cfactor(q1, e, HFLEN_WWW)) continue; - - break; - } - - } - else - { - FF_fromOctet(PRIV->p, P, HFLEN_WWW); - FF_fromOctet(PRIV->q, Q, HFLEN_WWW); - - FF_copy(p1, PRIV->p, HFLEN_WWW); - FF_dec(p1, 1, HFLEN_WWW); - - FF_copy(q1, PRIV->q, HFLEN_WWW); - FF_dec(q1, 1, HFLEN_WWW); - } - - FF_mul(PUB->n, PRIV->p, PRIV->q, HFLEN_WWW); - PUB->e = e; - -// Only works for 3 mod 4 primes (as always generated above) - - FF_copy(t, p1, HFLEN_WWW); - FF_shr(t, HFLEN_WWW); - FF_init(PRIV->dp, e, HFLEN_WWW); - FF_invmodp(PRIV->dp, PRIV->dp, t, HFLEN_WWW); - if (FF_parity(PRIV->dp) == 0) FF_add(PRIV->dp, PRIV->dp, t, HFLEN_WWW); - FF_norm(PRIV->dp, HFLEN_WWW); - - FF_copy(t, q1, HFLEN_WWW); - FF_shr(t, HFLEN_WWW); - FF_init(PRIV->dq, e, HFLEN_WWW); - FF_invmodp(PRIV->dq, PRIV->dq, t, HFLEN_WWW); - if (FF_parity(PRIV->dq) == 0) FF_add(PRIV->dq, PRIV->dq, t, HFLEN_WWW); - FF_norm(PRIV->dq, HFLEN_WWW); - - FF_invmodp(PRIV->c, PRIV->p, PRIV->q, HFLEN_WWW); - - return; -} - -// Input private key from OpenSSL format -// e.g as in openssl rsa -in privkey.pem -noout -text -// Note order swap - For MIRACL c=1/p mod q, for OpenSSL c=1/q mod p -void WWW::RSA_PRIVATE_KEY_FROM_OPENSSL(octet *P,octet* Q,octet *DP,octet *DQ,octet *C,rsa_private_key *PRIV) -{ - FF_fromOctet(PRIV->p,Q,HFLEN_WWW); - FF_fromOctet(PRIV->q,P,HFLEN_WWW); - FF_fromOctet(PRIV->dp,DQ,HFLEN_WWW); - FF_fromOctet(PRIV->dq,DP,HFLEN_WWW); - FF_fromOctet(PRIV->c,C,HFLEN_WWW); -} - -void WWW::RSA_KEY_PAIR_FROM_OPENSSL(sign32 e,octet *P,octet* Q,octet *DP,octet *DQ,octet *C,rsa_private_key *PRIV,rsa_public_key *PUB) -{ - RSA_PRIVATE_KEY_FROM_OPENSSL(P,Q,DP,DQ,C,PRIV); - FF_mul(PUB->n, PRIV->p, PRIV->q, HFLEN_WWW); - PUB->e = e; -} - -/* destroy the Private Key structure */ -void WWW::RSA_PRIVATE_KEY_KILL(rsa_private_key *PRIV) -{ - FF_zero(PRIV->p, HFLEN_WWW); - FF_zero(PRIV->q, HFLEN_WWW); - FF_zero(PRIV->dp, HFLEN_WWW); - FF_zero(PRIV->dq, HFLEN_WWW); - FF_zero(PRIV->c, HFLEN_WWW); -} - -void WWW::RSA_fromOctet(BIG x[], octet *w) -{ - FF_fromOctet(x, w, FFLEN_WWW); -} - -/* RSA encryption with the public key */ -void WWW::RSA_ENCRYPT(rsa_public_key *PUB, octet *F, octet *G) -{ - BIG f[FFLEN_WWW]; - FF_fromOctet(f, F, FFLEN_WWW); - - FF_power(f, f, PUB->e, PUB->n, FFLEN_WWW); - - FF_toOctet(G, f, FFLEN_WWW); -} - -/* RSA decryption with the private key */ -void WWW::RSA_DECRYPT(rsa_private_key *PRIV, octet *G, octet *F) -{ - BIG g[FFLEN_WWW], t[FFLEN_WWW], jp[HFLEN_WWW], jq[HFLEN_WWW]; - - FF_fromOctet(g, G, FFLEN_WWW); - - FF_dmod(jp, g, PRIV->p, HFLEN_WWW); - FF_dmod(jq, g, PRIV->q, HFLEN_WWW); - - FF_skpow(jp, jp, PRIV->dp, PRIV->p, HFLEN_WWW); - FF_skpow(jq, jq, PRIV->dq, PRIV->q, HFLEN_WWW); - - - FF_zero(g, FFLEN_WWW); - FF_copy(g, jp, HFLEN_WWW); - FF_mod(jp, PRIV->q, HFLEN_WWW); - if (FF_comp(jp, jq, HFLEN_WWW) > 0) - FF_add(jq, jq, PRIV->q, HFLEN_WWW); - FF_sub(jq, jq, jp, HFLEN_WWW); - FF_norm(jq, HFLEN_WWW); - - FF_mul(t, PRIV->c, jq, HFLEN_WWW); - FF_dmod(jq, t, PRIV->q, HFLEN_WWW); - - FF_mul(t, jq, PRIV->p, HFLEN_WWW); - FF_add(g, t, g, FFLEN_WWW); - FF_norm(g, FFLEN_WWW); - - FF_toOctet(F, g, FFLEN_WWW); - - return; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/share.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/share.cpp deleted file mode 100644 index 103c7cc..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/share.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Shamir threshold secret sharing module */ -/* Split any octet into number of shares <256 */ -/* Specify number of shares required for recovery - nsr */ - -/* See testmpin.cpp for an example of use */ - -#include "arch.h" -#include "core.h" - -using namespace core; -/* Field GF(2^8) precalculated tables */ - -static const uchar ptab[] = -{ - 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, - 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, - 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, - 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205, - 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136, - 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154, - 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, - 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, - 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, - 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, - 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, - 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, - 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, - 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, - 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, - 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1 -}; - -static const uchar ltab[] = -{ - 0, 255, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, - 100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193, - 125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120, - 101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142, - 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56, - 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16, - 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186, - 43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87, - 175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232, - 44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160, - 127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183, - 204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157, - 151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, - 83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, - 68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, - 103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7 -}; - -/* field addition */ -static uchar add(uchar x,uchar y) -{ - return (x^y); -} - -/* x.y= AntiLog(Log(x) + Log(y)) */ -static uchar mul(uchar x,uchar y) -{ - if (x && y) return ptab[(ltab[x]+ltab[y])%255]; - else return 0; -} - -/* multiplicative inverse */ -static uchar inv(uchar x) -{ - return ptab[255-ltab[x]]; -} - -/* Lagrange interpolation */ -static int interpolate(int n, uchar x[], uchar y[]) -{ - int i,j; - uchar p,yp=0; - for(i=0;i=256 || nsr<2 || nsr>=256) - { - Sh.id=0; - Sh.nsr=0; - Sh.B=NULL; - return Sh; - } - RAND_clean(&rng); - RAND_seed(&rng,R->len,R->val); - Sh.id=id; - Sh.nsr=nsr; - Sh.B=S; - m=M->len; - S->len=m; - for (j=0;jval[j]=M->val[j]; - for (n=1;nval[j]=add(S->val[j],mul(RAND_byte(&rng),x)); - x=mul(x,(uchar)id); - } - } - return Sh; -} - -/* Recover message from shares */ - -int core::recover(octet *M,share S[]) -{ - uchar x[256],y[256]; - int i,j,res=0; - int len=S[0].B->len; - int nsr=S[0].nsr; - for (i=1;ilen!=len) - { - res=-1; - break; - } - } - if (res) return res; - - for (j=0;jval[j]; - } - M->val[j]=interpolate(nsr,x,y); - } - M->len=len; - return res; -} - -/* -#include -#include - -int main() -{ // test driver - int ii,j,k,l,m,n,nsr; - char mc[10],b1c[10],b2c[10],b3c[10],b4c[10],r[30]; - octet M={0,sizeof(mc),mc}; - octet B1={0,sizeof(b1c),b1c}; - octet B2={0,sizeof(b2c),b2c}; - octet B3={0,sizeof(b3c),b3c}; - octet B4={0,sizeof(b4c),b4c}; - octet R={0,sizeof(r),r}; - share S[3]; - - nsr=3; - - srand(time(NULL)); - - M.len=5; - M.val[0]=rand()%128; M.val[1]=rand()%128; M.val[2]=rand()%128; M.val[3]=rand()%128; M.val[4]=rand()%128; - - printf("Message= "); OCT_output(&M); - - R.len=(nsr-1)*M.len; - for (j=0;j -#include -#include -#include -#include "bls_BN254.h" - -#if CHUNK==32 || CHUNK==64 -#include "bls_BLS12383.h" -#include "bls192_BLS24479.h" -#include "bls256_BLS48556.h" -#endif - -#include "randapi.h" - -/* To reverse the groups G1 and G2, edit BLS*.cpp - -Swap G1 <-> G2 -Swap ECP <-> ECPn -Disable G2 precomputation -Switch G1/G2 parameter order in pairing function calls - -#define REVERSE here - -See BLSREV*.cpp - -*/ - -//#define REVERSE - -using namespace core; - -static char message[] = "This is a test message"; - -int bls_BN254(csprng *RNG) -{ - using namespace BN254; - - int i,res; - char s[BGS_BN254]; - char ikm[64]; -#ifdef REVERSE - char w[BFS_BN254+1], sig[4 * BFS_BN254 + 1]; // w is 2* if not compressed else 1*. sig is 4* if not compressed, else 2* -#else - char w[4 * BFS_BN254 + 1], sig[BFS_BN254 + 1]; // w is 4* if not compressed else 2*. sig is 2* if not compressed, else 1* -#endif - octet S = {0, sizeof(s), s}; - octet W = {0, sizeof(w), w}; - octet SIG = {0, sizeof(sig), sig}; - octet IKM = {0, sizeof(ikm), ikm}; - octet M = {0,sizeof(message), message}; - - OCT_jstring(&M,message); - - res = BLS_INIT(); - if (res == BLS_FAIL) - { - printf("Failed to initialize\n"); - return res; - } - - OCT_rand(&IKM,RNG,32); - //IKM.len=32; - //for (i=0;i> 8; - RAW.val[2] = ran >> 16; - RAW.val[3] = ran >> 24; - for (i = 4; i < 100; i++) RAW.val[i] = i; - - CREATE_CSPRNG(&RNG, &RAW); // initialise strong RNG - - printf("%d bit build\n", CHUNK); - - printf("\nTesting BLS signature for curve BN254\n"); - bls_BN254(&RNG); - -#if CHUNK!=16 - printf("\nTesting BLS signature for curve BLS12383\n"); - bls_BLS12383(&RNG); - - printf("\nTesting BLS signature for curve BLS24479\n"); - bls_BLS24479(&RNG); - - printf("\nTesting BLS signature for curve BLS48556\n"); - bls_BLS48556(&RNG); -#endif - - KILL_CSPRNG(&RNG); -} - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm deleted file mode 100644 index a50d53885e1e7653dd9ef9d438e09e9ed632a7c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82512 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 diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm.cpp deleted file mode 100644 index f7326a0..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testdlthm.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012-2021 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* test driver and function exerciser for Dilithium functions */ - -// See https://eprint.iacr.org/2017/633 (Ducas, Lepoint, Lyubashevsky, Schwabe, Seiler, Stehle) - -/* g++ -O2 testdlthm.cpp core.a -o testdlthm */ - -#include -#include -#include "dilithium.h" - -using namespace core; - -#define LOOPS 100 - -int main() { - int i,j,attempts; - unsigned long ran; - bool result; - char raw[100]; - byte tau[32]; - csprng RNG; - char sk[DL_SK_SIZE_3], pk[DL_PK_SIZE_3], sig[DL_SIG_SIZE_3],m[128]; - octet SK = {0, sizeof(sk), sk}; - octet PK = {0, sizeof(pk), pk}; - octet SIG = {0, sizeof(sig), sig}; - octet M = {0, sizeof(m), m}; - - time((time_t *)&ran); - - raw[0] = ran; - raw[1] = ran >> 8; - raw[2] = ran >> 16; - raw[3] = ran >> 24; - - for (i = 0; i < 100; i++) raw[i] = i + 1; // change to i = 4 to randomize - RAND_seed(&RNG, 100, raw); - - printf("Testing Dilithium signature\n"); - int tats=0; - for (i=0;i1) - printf("Average= %d\n",tats/LOOPS); - return 0; -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc deleted file mode 100644 index 3fbf9e6c96cfefb30b9728ae7c6a33ea1d753795..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381104 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 diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc.cpp deleted file mode 100644 index e3a61c3..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testecc.cpp +++ /dev/null @@ -1,623 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* test driver and function exerciser for ECDH/ECIES/ECDSA API Functions */ - -#include -#include -#include -#include -#include "ecdh_Ed25519.h" -#include "rsa_RSA2048.h" -#include "randapi.h" - -#if CHUNK==32 || CHUNK==64 -#include "ecdh_NIST256.h" -#include "ecdh_Ed448.h" -#endif - -using namespace core; - -int ecdh_Ed25519(csprng *RNG) -{ - using namespace Ed25519; - - int i, res; - unsigned long ran; - char *pp = (char *)"M0ng00se"; - // These octets are automatically protected against buffer overflow attacks - // Note salt must be big enough to include an appended word - // Note ECIES ciphertext C must be big enough to include at least 1 appended block - // Recall EFS_Ed25519 is field size in bytes. So EFS_Ed25519=32 for 256-bit curve - char s0[2 * EGS_Ed25519], s1[EGS_Ed25519], w0[2 * EFS_Ed25519 + 1], w1[2 * EFS_Ed25519 + 1], z0[EFS_Ed25519], z1[EFS_Ed25519], key[AESKEY_Ed25519], salt[40], pw[40]; - octet S0 = {0, sizeof(s0), s0}; - octet S1 = {0, sizeof(s1), s1}; - octet W0 = {0, sizeof(w0), w0}; - octet W1 = {0, sizeof(w1), w1}; - octet Z0 = {0, sizeof(z0), z0}; - octet Z1 = {0, sizeof(z1), z1}; - octet KEY = {0, sizeof(key), key}; - octet SALT = {0, sizeof(salt), salt}; - octet PW = {0, sizeof(pw), pw}; - - SALT.len = 8; - for (i = 0; i < 8; i++) SALT.val[i] = i + 1; // set Salt - - printf("Alice's Passphrase= %s\n", pp); - - OCT_empty(&PW); - OCT_jstring(&PW, pp); // set Password from string - - // private key S0 of size EGS_Ed25519 bytes derived from Password and Salt - - PBKDF2(MC_SHA2,HASH_TYPE_Ed25519, &S0, EGS_Ed25519, &PW, &SALT, 1000); - - printf("Alices private key= 0x"); - OCT_output(&S0); - - // Generate Key pair S/W - - ECP_KEY_PAIR_GENERATE(NULL, &S0, &W0); - printf("Alices public key= 0x"); - OCT_output(&W0); - - res = ECP_PUBLIC_KEY_VALIDATE(&W0); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - - // Random private key for other party - ECP_KEY_PAIR_GENERATE(RNG, &S1, &W1); - res = ECP_PUBLIC_KEY_VALIDATE(&W1); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - printf("Servers private key= 0x"); - OCT_output(&S1); - printf("Servers public key= 0x"); - OCT_output(&W1); - - // Calculate common key using DH - IEEE 1363 method - - ECP_SVDP_DH(&S0, &W1, &Z0, 0); - ECP_SVDP_DH(&S1, &W0, &Z1, 0); - - if (!OCT_comp(&Z0, &Z1)) - { - printf("*** ECPSVDP-DH Failed\n"); - return 0; - } - - KDF2(MC_SHA2, HASH_TYPE_Ed25519, &KEY, AESKEY_Ed25519, &Z0, NULL); - - printf("Alice's DH Key= 0x"); - OCT_output(&KEY); - printf("Servers DH Key= 0x"); - OCT_output(&KEY); - -#if CURVETYPE_Ed25519 != MONTGOMERY - - char ds[EGS_Ed25519], p1[30], p2[30], v[2 * EFS_Ed25519 + 1], m[32], c[64], t[32], cs[EGS_Ed25519]; - octet DS = {0, sizeof(ds), ds}; - octet CS = {0, sizeof(cs), cs}; - octet P1 = {0, sizeof(p1), p1}; - octet P2 = {0, sizeof(p2), p2}; - octet V = {0, sizeof(v), v}; - octet M = {0, sizeof(m), m}; - octet C = {0, sizeof(c), c}; - octet T = {0, sizeof(t), t}; - - printf("Testing ECIES\n"); - - P1.len = 3; - P1.val[0] = 0x0; - P1.val[1] = 0x1; - P1.val[2] = 0x2; - P2.len = 4; - P2.val[0] = 0x0; - P2.val[1] = 0x1; - P2.val[2] = 0x2; - P2.val[3] = 0x3; - - M.len = 17; - for (i = 0; i <= 16; i++) M.val[i] = i; - - ECP_ECIES_ENCRYPT(HASH_TYPE_Ed25519, &P1, &P2, RNG, &W1, &M, 12, &V, &C, &T); - - printf("Ciphertext= \n"); - printf("V= 0x"); - OCT_output(&V); - printf("C= 0x"); - OCT_output(&C); - printf("T= 0x"); - OCT_output(&T); - - if (!ECP_ECIES_DECRYPT(HASH_TYPE_Ed25519, &P1, &P2, &V, &C, &T, &S1, &M)) - { - printf("*** ECIES Decryption Failed\n"); - return 0; - } - else printf("Decryption succeeded\n"); - - printf("Message is 0x"); - OCT_output(&M); - - - printf("Testing ECDSA\n"); - - if (ECP_SP_DSA(HASH_TYPE_Ed25519, RNG, NULL, &S0, &M, &CS, &DS) != 0) - { - printf("***ECDSA Signature Failed\n"); - return 0; - } - - printf("Signature C = 0x"); - OCT_output(&CS); - printf("Signature D = 0x"); - OCT_output(&DS); - - if (ECP_VP_DSA(HASH_TYPE_Ed25519, &W0, &M, &CS, &DS) != 0) - { - printf("***ECDSA Verification Failed\n"); - return 0; - } - else - { - printf("ECDSA Signature/Verification succeeded\n"); - } - -#endif - - return 1; -} - -#if CHUNK==32 || CHUNK==64 -int ecdh_NIST256(csprng *RNG) -{ - using namespace NIST256; - - int i, res; - unsigned long ran; - char *pp = (char *)"M0ng00se"; - // These octets are automatically protected against buffer overflow attacks - // Note salt must be big enough to include an appended word - // Note ECIES ciphertext C must be big enough to include at least 1 appended block - // Recall EFS_NIST256 is field size in bytes. So EFS_NIST256=32 for 256-bit curve - char s0[2 * EGS_NIST256], s1[EGS_NIST256], w0[2 * EFS_NIST256 + 1], w1[2 * EFS_NIST256 + 1], z0[EFS_NIST256], z1[EFS_NIST256], key[AESKEY_NIST256], salt[40], pw[40]; - octet S0 = {0, sizeof(s0), s0}; - octet S1 = {0, sizeof(s1), s1}; - octet W0 = {0, sizeof(w0), w0}; - octet W1 = {0, sizeof(w1), w1}; - octet Z0 = {0, sizeof(z0), z0}; - octet Z1 = {0, sizeof(z1), z1}; - octet KEY = {0, sizeof(key), key}; - octet SALT = {0, sizeof(salt), salt}; - octet PW = {0, sizeof(pw), pw}; - - SALT.len = 8; - for (i = 0; i < 8; i++) SALT.val[i] = i + 1; // set Salt - - printf("Alice's Passphrase= %s\n", pp); - - OCT_empty(&PW); - OCT_jstring(&PW, pp); // set Password from string - - // private key S0 of size EGS_NIST256 bytes derived from Password and Salt - - PBKDF2(MC_SHA2, HASH_TYPE_NIST256, &S0, EGS_NIST256, &PW, &SALT, 1000); - - printf("Alices private key= 0x"); - OCT_output(&S0); - - // Generate Key pair S/W - - ECP_KEY_PAIR_GENERATE(NULL, &S0, &W0); - printf("Alices public key= 0x"); - OCT_output(&W0); - - res = ECP_PUBLIC_KEY_VALIDATE(&W0); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - - // Random private key for other party - ECP_KEY_PAIR_GENERATE(RNG, &S1, &W1); - res = ECP_PUBLIC_KEY_VALIDATE(&W1); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - printf("Servers private key= 0x"); - OCT_output(&S1); - printf("Servers public key= 0x"); - OCT_output(&W1); - - // Calculate common key using DH - IEEE 1363 method - - ECP_SVDP_DH(&S0, &W1, &Z0, 0); - ECP_SVDP_DH(&S1, &W0, &Z1, 0); - - if (!OCT_comp(&Z0, &Z1)) - { - printf("*** ECPSVDP-DH Failed\n"); - return 0; - } - - KDF2(MC_SHA2, HASH_TYPE_NIST256, &KEY, AESKEY_NIST256, &Z0, NULL); - - printf("Alice's DH Key= 0x"); - OCT_output(&KEY); - printf("Servers DH Key= 0x"); - OCT_output(&KEY); - -#if CURVETYPE_NIST256 != MONTGOMERY - - char ds[EGS_NIST256], p1[30], p2[30], v[2 * EFS_NIST256 + 1], m[32], c[64], t[32], cs[EGS_NIST256]; - octet DS = {0, sizeof(ds), ds}; - octet CS = {0, sizeof(cs), cs}; - octet P1 = {0, sizeof(p1), p1}; - octet P2 = {0, sizeof(p2), p2}; - octet V = {0, sizeof(v), v}; - octet M = {0, sizeof(m), m}; - octet C = {0, sizeof(c), c}; - octet T = {0, sizeof(t), t}; - - printf("Testing ECIES\n"); - - P1.len = 3; - P1.val[0] = 0x0; - P1.val[1] = 0x1; - P1.val[2] = 0x2; - P2.len = 4; - P2.val[0] = 0x0; - P2.val[1] = 0x1; - P2.val[2] = 0x2; - P2.val[3] = 0x3; - - M.len = 17; - for (i = 0; i <= 16; i++) M.val[i] = i; - - ECP_ECIES_ENCRYPT(HASH_TYPE_NIST256, &P1, &P2, RNG, &W1, &M, 12, &V, &C, &T); - - printf("Ciphertext= \n"); - printf("V= 0x"); - OCT_output(&V); - printf("C= 0x"); - OCT_output(&C); - printf("T= 0x"); - OCT_output(&T); - - if (!ECP_ECIES_DECRYPT(HASH_TYPE_NIST256, &P1, &P2, &V, &C, &T, &S1, &M)) - { - printf("*** ECIES Decryption Failed\n"); - return 0; - } - else printf("Decryption succeeded\n"); - - printf("Message is 0x"); - OCT_output(&M); - - - printf("Testing ECDSA\n"); - - if (ECP_SP_DSA(HASH_TYPE_NIST256, RNG, NULL, &S0, &M, &CS, &DS) != 0) - { - printf("***ECDSA Signature Failed\n"); - return 0; - } - - printf("Signature C = 0x"); - OCT_output(&CS); - printf("Signature D = 0x"); - OCT_output(&DS); - - if (ECP_VP_DSA(HASH_TYPE_NIST256, &W0, &M, &CS, &DS) != 0) - { - printf("***ECDSA Verification Failed\n"); - return 0; - } - else - { - printf("ECDSA Signature/Verification succeeded\n"); - } - -#endif - - return 1; -} - -int ecdh_Ed448(csprng *RNG) -{ - using namespace Ed448; - - int i, res; - unsigned long ran; - char *pp = (char *)"M0ng00se"; - // These octets are automatically protected against buffer overflow attacks - // Note salt must be big enough to include an appended word - // Note ECIES ciphertext C must be big enough to include at least 1 appended block - // Recall EFS_Ed448 is field size in bytes. So EFS_Ed448=32 for 256-bit curve - char s0[2 * EGS_Ed448], s1[EGS_Ed448], w0[2 * EFS_Ed448 + 1], w1[2 * EFS_Ed448 + 1], z0[EFS_Ed448], z1[EFS_Ed448], key[AESKEY_Ed448], salt[40], pw[40]; - octet S0 = {0, sizeof(s0), s0}; - octet S1 = {0, sizeof(s1), s1}; - octet W0 = {0, sizeof(w0), w0}; - octet W1 = {0, sizeof(w1), w1}; - octet Z0 = {0, sizeof(z0), z0}; - octet Z1 = {0, sizeof(z1), z1}; - octet KEY = {0, sizeof(key), key}; - octet SALT = {0, sizeof(salt), salt}; - octet PW = {0, sizeof(pw), pw}; - - SALT.len = 8; - for (i = 0; i < 8; i++) SALT.val[i] = i + 1; // set Salt - - printf("Alice's Passphrase= %s\n", pp); - - OCT_empty(&PW); - OCT_jstring(&PW, pp); // set Password from string - - // private key S0 of size EGS_Ed448 bytes derived from Password and Salt - - PBKDF2(MC_SHA2, HASH_TYPE_Ed448, &S0, EGS_Ed448, &PW, &SALT, 1000); - - printf("Alices private key= 0x"); - OCT_output(&S0); - - // Generate Key pair S/W - - ECP_KEY_PAIR_GENERATE(NULL, &S0, &W0); - printf("Alices public key= 0x"); - OCT_output(&W0); - - res = ECP_PUBLIC_KEY_VALIDATE(&W0); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - - // Random private key for other party - ECP_KEY_PAIR_GENERATE(RNG, &S1, &W1); - res = ECP_PUBLIC_KEY_VALIDATE(&W1); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - printf("Servers private key= 0x"); - OCT_output(&S1); - printf("Servers public key= 0x"); - OCT_output(&W1); - - // Calculate common key using DH - IEEE 1363 method - - ECP_SVDP_DH(&S0, &W1, &Z0, 0); - ECP_SVDP_DH(&S1, &W0, &Z1, 0); - - if (!OCT_comp(&Z0, &Z1)) - { - printf("*** ECPSVDP-DH Failed\n"); - return 0; - } - - KDF2(MC_SHA2, HASH_TYPE_Ed448, &KEY, AESKEY_Ed448, &Z0, NULL); - - printf("Alice's DH Key= 0x"); - OCT_output(&KEY); - printf("Servers DH Key= 0x"); - OCT_output(&KEY); - -#if CURVETYPE_Ed448 != MONTGOMERY - - char ds[EGS_Ed448], p1[30], p2[30], v[2 * EFS_Ed448 + 1], m[32], c[64], t[32], cs[EGS_Ed448]; - octet DS = {0, sizeof(ds), ds}; - octet CS = {0, sizeof(cs), cs}; - octet P1 = {0, sizeof(p1), p1}; - octet P2 = {0, sizeof(p2), p2}; - octet V = {0, sizeof(v), v}; - octet M = {0, sizeof(m), m}; - octet C = {0, sizeof(c), c}; - octet T = {0, sizeof(t), t}; - - printf("Testing ECIES\n"); - - P1.len = 3; - P1.val[0] = 0x0; - P1.val[1] = 0x1; - P1.val[2] = 0x2; - P2.len = 4; - P2.val[0] = 0x0; - P2.val[1] = 0x1; - P2.val[2] = 0x2; - P2.val[3] = 0x3; - - M.len = 17; - for (i = 0; i <= 16; i++) M.val[i] = i; - - ECP_ECIES_ENCRYPT(HASH_TYPE_Ed448, &P1, &P2, RNG, &W1, &M, 12, &V, &C, &T); - - printf("Ciphertext= \n"); - printf("V= 0x"); - OCT_output(&V); - printf("C= 0x"); - OCT_output(&C); - printf("T= 0x"); - OCT_output(&T); - - if (!ECP_ECIES_DECRYPT(HASH_TYPE_Ed448, &P1, &P2, &V, &C, &T, &S1, &M)) - { - printf("*** ECIES Decryption Failed\n"); - return 0; - } - else printf("Decryption succeeded\n"); - - printf("Message is 0x"); - OCT_output(&M); - - - printf("Testing ECDSA\n"); - - if (ECP_SP_DSA(HASH_TYPE_Ed448, RNG, NULL, &S0, &M, &CS, &DS) != 0) - { - printf("***ECDSA Signature Failed\n"); - return 0; - } - - printf("Signature C = 0x"); - OCT_output(&CS); - printf("Signature D = 0x"); - OCT_output(&DS); - - if (ECP_VP_DSA(HASH_TYPE_Ed448, &W0, &M, &CS, &DS) != 0) - { - printf("***ECDSA Verification Failed\n"); - return 0; - } - else - { - printf("ECDSA Signature/Verification succeeded\n"); - } - -#endif - - return 1; -} -#endif - -int rsa_2048(csprng *RNG) -{ - using namespace RSA2048; - - int i,valid; - unsigned long ran; - char m[RFS_RSA2048], ml[RFS_RSA2048], c[RFS_RSA2048], e[RFS_RSA2048], s[RFS_RSA2048]; - rsa_public_key pub; - rsa_private_key priv; - - octet M = {0, sizeof(m), m}; - octet ML = {0, sizeof(ml), ml}; - octet C = {0, sizeof(c), c}; - octet E = {0, sizeof(e), e}; - octet S = {0, sizeof(s), s}; - - printf("Generating public/private key pair\n"); - RSA_KEY_PAIR(RNG, 65537, &priv, &pub, NULL, NULL); - - printf("Encrypting test string\n"); - OCT_jstring(&M, (char *)"Hello World\n"); - - OAEP_ENCODE(HASH_TYPE_RSA_RSA2048, &M, RNG, NULL, &E); // OAEP encode message m to e - - RSA_ENCRYPT(&pub, &E, &C); // encrypt encoded message - printf("Ciphertext= "); - OCT_output(&C); - - printf("Decrypting test string\n"); - RSA_DECRYPT(&priv, &C, &ML); // ... and then decrypt it - printf("Decrypted\n"); - OAEP_DECODE(HASH_TYPE_RSA_RSA2048, NULL, &ML); // decode it - printf("Decoded\n"); - OCT_output_string(&ML); - - - PSS_ENCODE(HASH_TYPE_RSA_RSA2048, &M, RNG, &C); - //printf("T= 0x");OCT_output(&C); - if (PSS_VERIFY(HASH_TYPE_RSA_RSA2048, &M, &C)) - printf("PSS encoding OK\n"); - else - printf("PSS Encoding FAILED\n"); - - -// Signature - printf("Signing message\n"); - PKCS15(HASH_TYPE_RSA_RSA2048, &M, &C); - - RSA_DECRYPT(&priv, &C, &S); // create signature in S - - printf("Signature= "); - OCT_output(&S); - - - -// Verification - valid=0; - RSA_ENCRYPT(&pub, &S, &ML); - PKCS15(HASH_TYPE_RSA_RSA2048, &M, &C); - - if (OCT_comp(&C, &ML)) valid=1; - else { - PKCS15b(HASH_TYPE_RSA_RSA2048, &M, &C); - if (OCT_comp(&C, &ML)) valid=1; - } - - if (valid) printf("Signature is valid\n"); - else printf("Signature is INVALID\n"); - - RSA_PRIVATE_KEY_KILL(&priv); - - OCT_clear(&M); - OCT_clear(&ML); // clean up afterwards - OCT_clear(&C); - OCT_clear(&E); - - return 1; -} - - -int main() -{ - int i, res; - unsigned long ran; - - char raw[100]; - octet RAW = {0, sizeof(raw), raw}; - csprng RNG; // Crypto Strong RNG - - time((time_t *)&ran); - - RAW.len = 100; // fake random seed source - RAW.val[0] = ran; - RAW.val[1] = ran >> 8; - RAW.val[2] = ran >> 16; - RAW.val[3] = ran >> 24; - for (i = 0; i < 100; i++) RAW.val[i] = i; - - CREATE_CSPRNG(&RNG, &RAW); // initialise strong RNG - - printf("\nTesting ECDH protocols for curve Ed25519\n"); - ecdh_Ed25519(&RNG); -#if CHUNK!=16 - printf("\nTesting ECDH protocols for curve NIST256\n"); - ecdh_NIST256(&RNG); - printf("\nTesting ECDH protocols for curve Ed448\n"); - ecdh_Ed448(&RNG); -#endif - printf("\nTesting RSA protocols for 2048-bit RSA\n"); - rsa_2048(&RNG); - - KILL_CSPRNG(&RNG); -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testeddsa b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testeddsa deleted file mode 100644 index 1e577d1106f337c0c217f450b7e234325654f6e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213784 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≫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

EE`l56GPRj4HLaXVy&AM{ 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 -#include -#include -#include -#include "randapi.h" -#include "eddsa_Ed25519.h" -#include "eddsa_Ed448.h" - - -using namespace core; - -// prehash message -static void PH_Ed25519(octet *M,octet *HM) { - hash512 sh512; - HASH512_init(&sh512); - for (int i=0;ilen;i++ ) - HASH512_process(&sh512,M->val[i]); - HASH512_hash(&sh512,HM->val); - HM->len=64; -} - -static void PH_Ed448(octet *M,octet *HM) { - sha3 SHA3; - SHA3_init(&SHA3,SHAKE256); - for (int i=0;ilen;i++) - SHA3_process(&SHA3,M->val[i]); - SHA3_shake(&SHA3,HM->val,64); - HM->len=64; -} - -int eddsa_Ed25519(csprng *RNG) -{ - using namespace Ed25519; - - char d[EGS_Ed25519], q[EFS_Ed25519], m[256], sig[2*EFS_Ed25519], hm[64]; - octet D = {0, sizeof(d), d}; - octet Q = {0, sizeof(q), q}; - octet M = {0, sizeof(m), m}; - octet SIG = {0, sizeof(sig), sig}; - octet HM={0,sizeof(hm),hm}; - bool prehash=false; - bool verify; - -// 32 bytes -// OCT_fromHex(&D,(char *)"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60"); - OCT_fromHex(&D,(char *)"c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7"); -// OCT_fromHex(&D,(char *)"833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42"); - - EDDSA_KEY_PAIR_GENERATE(NULL, &D, &Q); - printf("Secret key= 0x"); - OCT_output(&D); - printf("Public key= 0x"); - OCT_output(&Q); - printf("\n"); - - M.len=2; M.val[0]=0xaf; M.val[1]=0x82; -// M.len=3; M.val[0]=0x61; M.val[1]=0x62; M.val[2]=0x63; - - if (prehash) { - PH_Ed25519(&M,&HM); - EDDSA_SIGNATURE(true,&D, NULL,&HM, &SIG); - } else { - EDDSA_SIGNATURE(false,&D, NULL,&M, &SIG); - } - printf("Signature= 0x"); - OCT_output(&SIG); - - - if (prehash) { - PH_Ed25519(&M,&HM); - verify=EDDSA_VERIFY(true,&Q, NULL ,&HM, &SIG); - } else { - verify=EDDSA_VERIFY(false,&Q, NULL ,&M, &SIG); - } - if (verify) - printf("Signature is verified\n"); - else - printf("Signature is NOT verified\n"); - - return 1; -} - -int eddsa_Ed448(csprng *RNG) -{ - using namespace Ed448; - - char d[EGS_Ed448+1], q[EFS_Ed448 + 1], m[256], sig[2*EFS_Ed448+2], ctx[256], hm[64]; - octet D = {0, sizeof(d), d}; - octet Q = {0, sizeof(q), q}; - octet M = {0, sizeof(m), m}; - octet SIG = {0, sizeof(sig), sig}; - octet CTX = {0, sizeof(ctx), ctx}; - octet HM={0,sizeof(hm),hm}; - bool prehash=false; - bool verify; - -// 57 bytes -// OCT_fromHex(&D,(char *)"6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b"); - OCT_fromHex(&D,(char *)"c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463afbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e"); -// OCT_fromHex(&D,(char *)"833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42ef7822e0d5104127dc05d6dbefde69e3ab2cec7c867c6e2c49"); - - - EDDSA_KEY_PAIR_GENERATE(NULL, &D, &Q); - printf("Secret key= 0x"); - OCT_output(&D); - printf("Public key= 0x"); - OCT_output(&Q); - printf("\n"); - - M.len=1; M.val[0]=0x03; -// M.len=3; M.val[0]=0x61; M.val[1]=0x62; M.val[2]=0x63; - CTX.len=3; CTX.val[0]=0x66; CTX.val[1]=0x6F; CTX.val[2]=0x6f; - - - if (prehash) { - PH_Ed448(&M,&HM); - EDDSA_SIGNATURE(true,&D, NULL,&HM, &SIG); - } else { - EDDSA_SIGNATURE(false,&D, NULL,&M, &SIG); - } - - printf("Signature= 0x"); - OCT_output(&SIG); - - if (prehash) { - PH_Ed448(&M,&HM); - verify=EDDSA_VERIFY(true,&Q, NULL ,&HM, &SIG); - } else { - verify=EDDSA_VERIFY(false,&Q, NULL ,&M, &SIG); - } - if (verify) - printf("Signature is verified\n"); - else - printf("Signature is NOT verified\n"); - - return 1; -} - -int main() -{ - int i, res; - unsigned long ran; - - char raw[100]; - octet RAW = {0, sizeof(raw), raw}; - csprng RNG; // Crypto Strong RNG - - time((time_t *)&ran); - - RAW.len = 100; // fake random seed source - RAW.val[0] = ran; - RAW.val[1] = ran >> 8; - RAW.val[2] = ran >> 16; - RAW.val[3] = ran >> 24; - for (i = 4; i < 100; i++) RAW.val[i] = i; - - CREATE_CSPRNG(&RNG, &RAW); // initialise strong RNG - - printf("\nTesting EDDSA protocols for curve Ed25519\n"); - eddsa_Ed25519(&RNG); - printf("\nTesting EDDSA protocols for curve Ed448\n"); - eddsa_Ed448(&RNG); - - KILL_CSPRNG(&RNG); -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhpke.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhpke.cpp deleted file mode 100644 index e761e3a..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhpke.cpp +++ /dev/null @@ -1,590 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* test driver and function exerciser for HPKE API Functions */ - -#include -#include -#include -#include -#include "hpke_C25519.h" -#include "hpke_NIST521.h" -#include "hpke_NIST256.h" - -using namespace core; - -int hpke_C25519() -{ - using namespace C25519; - - int res=0; - int config_id=0x520; // 01|01|00100000 = 1, 1, 32 - int i,mode; - char info[32]; - - char seede[EGS_C25519]; - char seedr[EGS_C25519]; - char seeds[EGS_C25519]; - octet seedE = {0, sizeof(seede), seede}; - octet seedR = {0, sizeof(seedr), seedr}; - octet seedS = {0, sizeof(seeds), seeds}; - - char skr[EGS_C25519]; - char sks[EGS_C25519]; - char ske[EGS_C25519]; - char psks[32]; - char pskid[32]; - char pkr[EFS_C25519]; - char pks[EFS_C25519]; - char pke[EFS_C25519]; - char z[72]; - char plain[80]; - char cipher[80]; - char aad[32]; - char tag[32]; - char exporter_secret[128]; - - octet INFO = {0, sizeof(info), info}; - octet skR = {0, sizeof(skr), skr}; - octet skS = {0, sizeof(sks), sks}; - octet skE = {0, sizeof(ske), ske}; - octet psk = {0, sizeof(psks), psks}; - octet pskID = {0,sizeof(pskid), pskid}; - octet pkR = {0, sizeof(pkr), pkr}; - octet pkS = {0, sizeof(pks), pks}; - octet pkE = {0, sizeof(pke), pke}; - octet Z = {0, sizeof(z), z}; - octet PLAIN = {0,sizeof(plain),plain}; - octet CIPHER = {0,sizeof(cipher),cipher}; - octet AAD = {0,sizeof(aad),aad}; - octet TAG = {0,sizeof(tag),tag}; - octet EXPORTER_SECRET = {0,sizeof(exporter_secret),exporter_secret}; - - OCT_fromHex(&INFO,(char *)"4f6465206f6e2061204772656369616e2055726e"); - OCT_fromHex(&psk,(char *)"0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82"); - OCT_fromHex(&pskID,(char *)"456e6e796e20447572696e206172616e204d6f726961"); - OCT_fromHex(&PLAIN,(char *)"4265617574792069732074727574682c20747275746820626561757479"); - OCT_fromHex(&AAD,(char *)"436f756e742d30"); - - char key[32]; - char nonce[12]; - octet KEY = {0, sizeof(key), key}; - octet NONCE = {0, sizeof(nonce), nonce}; - -// Mode 0 - - mode=0; - printf("\nMode 0\n"); - - OCT_fromHex(&seedE,(char *)"7268600d403fce431561aef583ee1613527cff655c1343f29812e66706df3234"); - OCT_fromHex(&seedR,(char *)"6db9df30aa07dd42ee5e8181afdb977e538f5e1fec8a06223f33f7013e525037"); - - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - - HPKE_Encap(config_id,&skE,&Z,&pkE,&pkR); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Secret= "); OCT_output(&Z); - - HPKE_Decap(config_id,&skR,&Z,&pkE,&pkR); - printf("Decapsulated Secret= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,NULL,NULL); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 1 - mode=1; - printf("\nMode 1\n"); - OCT_fromHex(&seedE,(char *)"78628c354e46f3e169bd231be7b2ff1c77aa302460a26dbfa15515684c00130b"); - OCT_fromHex(&seedR,(char *)"d4a09d09f575fef425905d2ab396c1449141463f698f8efdb7accfaff8995098"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - - HPKE_Encap(config_id,&skE,&Z,&pkE,&pkR); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_Decap(config_id,&skR,&Z,&pkE,&pkR); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,&psk,&pskID); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 2 - mode=2; - printf("\nMode 2\n"); - OCT_fromHex(&seedE,(char *)"6e6d8f200ea2fb20c30b003a8b4f433d2f4ed4c2658d5bc8ce2fef718059c9f7"); - OCT_fromHex(&seedR,(char *)"f1d4a30a4cef8d6d4e3b016e6fd3799ea057db4f345472ed302a67ce1c20cdec"); - OCT_fromHex(&seedS,(char *)"94b020ce91d73fca4649006c7e7329a67b40c55e9e93cc907d282bbbff386f58"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - DeriveKeyPair(config_id,&skS,&pkS,&seedS); - - - HPKE_AuthEncap(config_id,&skE,&skS,&Z,&pkE,&pkR,&pkS); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_AuthDecap(config_id,&skR,&Z,&pkE,&pkR,&pkS); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,NULL,NULL); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 3 - mode=3; - printf("\nMode 3\n"); - - OCT_fromHex(&seedE,(char *)"4303619085a20ebcf18edd22782952b8a7161e1dbae6e46e143a52a96127cf84"); - OCT_fromHex(&seedR,(char *)"4b16221f3b269a88e207270b5e1de28cb01f847841b344b8314d6a622fe5ee90"); - OCT_fromHex(&seedS,(char *)"62f77dcf5df0dd7eac54eac9f654f426d4161ec850cc65c54f8b65d2e0b4e345"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - DeriveKeyPair(config_id,&skS,&pkS,&seedS); - - HPKE_AuthEncap(config_id,&skE,&skS,&Z,&pkE,&pkR,&pkS); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_AuthDecap(config_id,&skR,&Z,&pkE,&pkR,&pkS); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,&psk,&pskID); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - - return res; -} - -int hpke_NIST521() -{ - using namespace NIST521; - - int res=0; - int config_id=0xB12; // 10|11|00010010 = 2, 3, 18 - int i,mode; - char info[64]; - - char seede[EGS_NIST521]; - char seedr[EGS_NIST521]; - char seeds[EGS_NIST521]; - octet seedE = {0, sizeof(seede), seede}; - octet seedR = {0, sizeof(seedr), seedr}; - octet seedS = {0, sizeof(seeds), seeds}; - - char skr[EGS_NIST521]; - char sks[EGS_NIST521]; - char ske[EGS_NIST521]; - char psks[64]; - char pskid[64]; - char pkr[2*EFS_NIST521+1]; - char pks[2*EFS_NIST521+1]; - char pke[2*EFS_NIST521+1]; - char z[256]; - char plain[80]; - char cipher[80]; - char aad[32]; - char tag[32]; - char exporter_secret[128]; - - octet INFO = {0, sizeof(info), info}; - octet skR = {0, sizeof(skr), skr}; - octet skS = {0, sizeof(sks), sks}; - octet skE = {0, sizeof(ske), ske}; - octet psk = {0, sizeof(psks), psks}; - octet pskID = {0,sizeof(pskid), pskid}; - octet pkR = {0, sizeof(pkr), pkr}; - octet pkS = {0, sizeof(pks), pks}; - octet pkE = {0, sizeof(pke), pke}; - octet Z = {0, sizeof(z), z}; - octet PLAIN = {0,sizeof(plain),plain}; - octet CIPHER = {0,sizeof(cipher),cipher}; - octet AAD = {0,sizeof(aad),aad}; - octet TAG = {0,sizeof(tag),tag}; - octet EXPORTER_SECRET = {0,sizeof(exporter_secret),exporter_secret}; - - OCT_fromHex(&INFO,(char *)"4f6465206f6e2061204772656369616e2055726e"); - OCT_fromHex(&psk,(char *)"0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82"); - OCT_fromHex(&pskID,(char *)"456e6e796e20447572696e206172616e204d6f726961"); - OCT_fromHex(&PLAIN,(char *)"4265617574792069732074727574682c20747275746820626561757479"); - OCT_fromHex(&AAD,(char *)"436f756e742d30"); - - char key[64]; - char nonce[24]; - octet KEY = {0, sizeof(key), key}; - octet NONCE = {0, sizeof(nonce), nonce}; - -// Mode 0 - - mode=0; - printf("\nMode 0\n"); - - OCT_fromHex(&seedE,(char *)"7f06ab8215105fc46aceeb2e3dc5028b44364f960426eb0d8e4026c2f8b5d7e7a986688f1591abf5ab753c357a5d6f0440414b4ed4ede71317772ac98d9239f70904"); - OCT_fromHex(&seedR,(char *)"2ad954bbe39b7122529f7dde780bff626cd97f850d0784a432784e69d86eccaade43b6c10a8ffdb94bf943c6da479db137914ec835a7e715e36e45e29b587bab3bf1"); - - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - - HPKE_Encap(config_id,&skE,&Z,&pkE,&pkR); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_Decap(config_id,&skR,&Z,&pkE,&pkR); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,NULL,NULL); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 1 - mode=1; - printf("\nMode 1\n"); - - OCT_fromHex(&seedE,(char *)"f3ebfa9a69a924e672114fcd9e06fa9559e937f7eccce4181a2b506df53dbe514be12f094bb28e01de19dd345b4f7ede5ad7eaa6b9c3019592ec68eaae9a14732ce0"); - OCT_fromHex(&seedR,(char *)"a2a2458705e278e574f835effecd18232f8a4c459e7550a09d44348ae5d3b1ea9d95c51995e657ad6f7cae659f5e186126a471c017f8f5e41da9eba74d4e0473e179"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - - HPKE_Encap(config_id,&skE,&Z,&pkE,&pkR); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_Decap(config_id,&skR,&Z,&pkE,&pkR); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,&psk,&pskID); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 2 - mode=2; - printf("\nMode 2\n"); - - OCT_fromHex(&seedE,(char *)"fe1c589c2a05893895a537f38c7cb4300b5a7e8fef3d6ccb8f07a498029c61e90262e009dc254c7f6235f9c6b2fd6aeff0a714db131b09258c16e217b7bd2aa619b0"); - OCT_fromHex(&seedR,(char *)"8feea0438481fc0ecd470d6adfcda334a759c6b8650452c5a5dd9b2dd2cc9be33d2bb7ee64605fc07ab4664a58bb9a8de80defe510b6c97d2daf85b92cd4bb0a66bf"); - OCT_fromHex(&seedS,(char *)"2f66a68b85ef04822b054ef521838c00c64f8b6226935593b69e13a1a2461a4f1a74c10c836e87eed150c0db85d4e4f506cbb746149befac6f5c07dc48a615ef92db"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - DeriveKeyPair(config_id,&skS,&pkS,&seedS); - - HPKE_AuthEncap(config_id,&skE,&skS,&Z,&pkE,&pkR,&pkS); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_AuthDecap(config_id,&skR,&Z,&pkE,&pkR,&pkS); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,NULL,NULL); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 3 - mode=3; - printf("\nMode 3\n"); - - OCT_fromHex(&seedE,(char *)"54272797b1fbc128a6967ff1fd606e0c67868f7762ce1421439cbc9e90ce1b28d566e6c2acbce712e48eebf236696eb680849d6873e9959395b2931975d61d38bd6c"); - OCT_fromHex(&seedR,(char *)"3db434a8bc25b27eb0c590dc64997ab1378a99f52b2cb5a5a5b2fa540888f6c0f09794c654f4468524e040e6b4eca2c9dcf229f908b9d318f960cc9e9baa92c5eee6"); - OCT_fromHex(&seedS,(char *)"65d523d9b37e1273eb25ad0527d3a7bd33f67208dd1666d9904c6bc04969ae5831a8b849e7ff642581f2c3e56be84609600d3c6bbdaded3f6989c37d2892b1e978d5"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - DeriveKeyPair(config_id,&skS,&pkS,&seedS); - - HPKE_AuthEncap(config_id,&skE,&skS,&Z,&pkE,&pkR,&pkS); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_AuthDecap(config_id,&skR,&Z,&pkE,&pkR,&pkS); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,&psk,&pskID); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - - return res; -} - -int hpke_NIST256() -{ - using namespace NIST256; - - int res=0; - int config_id=0x510; // 10|11|00010010 = 2, 3, 18 // 01|01|00010000 = 1, 1, 16 - int i,mode; - char info[64]; - - char seede[EGS_NIST256]; - char seedr[EGS_NIST256]; - char seeds[EGS_NIST256]; - octet seedE = {0, sizeof(seede), seede}; - octet seedR = {0, sizeof(seedr), seedr}; - octet seedS = {0, sizeof(seeds), seeds}; - - char skr[EGS_NIST256]; - char sks[EGS_NIST256]; - char ske[EGS_NIST256]; - char psks[64]; - char pskid[64]; - char pkr[2*EFS_NIST256+1]; - char pks[2*EFS_NIST256+1]; - char pke[2*EFS_NIST256+1]; - char z[256]; - char plain[80]; - char cipher[80]; - char aad[32]; - char tag[32]; - char exporter_secret[128]; - - octet INFO = {0, sizeof(info), info}; - octet skR = {0, sizeof(skr), skr}; - octet skS = {0, sizeof(sks), sks}; - octet skE = {0, sizeof(ske), ske}; - octet psk = {0, sizeof(psks), psks}; - octet pskID = {0,sizeof(pskid), pskid}; - octet pkR = {0, sizeof(pkr), pkr}; - octet pkS = {0, sizeof(pks), pks}; - octet pkE = {0, sizeof(pke), pke}; - octet Z = {0, sizeof(z), z}; - octet PLAIN = {0,sizeof(plain),plain}; - octet CIPHER = {0,sizeof(cipher),cipher}; - octet AAD = {0,sizeof(aad),aad}; - octet TAG = {0,sizeof(tag),tag}; - octet EXPORTER_SECRET = {0,sizeof(exporter_secret),exporter_secret}; - - OCT_fromHex(&INFO,(char *)"4f6465206f6e2061204772656369616e2055726e"); - OCT_fromHex(&psk,(char *)"0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82"); - OCT_fromHex(&pskID,(char *)"456e6e796e20447572696e206172616e204d6f726961"); - OCT_fromHex(&PLAIN,(char *)"4265617574792069732074727574682c20747275746820626561757479"); - OCT_fromHex(&AAD,(char *)"436f756e742d30"); - - char key[64]; - char nonce[24]; - octet KEY = {0, sizeof(key), key}; - octet NONCE = {0, sizeof(nonce), nonce}; - -// Mode 0 - - mode=0; - printf("\nMode 0\n"); - - OCT_fromHex(&seedE,(char *)"4270e54ffd08d79d5928020af4686d8f6b7d35dbe470265f1f5aa22816ce860e"); - OCT_fromHex(&seedR,(char *)"668b37171f1072f3cf12ea8a236a45df23fc13b82af3609ad1e354f6ef817550"); - - //printf("seedE= "); OCT_output(&seedE); - - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - - //printf("1. pkE= "); OCT_output(&pkE); - - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - - HPKE_Encap(config_id,&skE,&Z,&pkE,&pkR); - printf("pkE= "); OCT_output(&pkE); - - - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_Decap(config_id,&skR,&Z,&pkE,&pkR); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,NULL,NULL); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 1 - mode=1; - printf("\nMode 1\n"); - - OCT_fromHex(&seedE,(char *)"2afa611d8b1a7b321c761b483b6a053579afa4f767450d3ad0f84a39fda587a6"); - OCT_fromHex(&seedR,(char *)"d42ef874c1913d9568c9405407c805baddaffd0898a00f1e84e154fa787b2429"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - - HPKE_Encap(config_id,&skE,&Z,&pkE,&pkR); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_Decap(config_id,&skR,&Z,&pkE,&pkR); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,&psk,&pskID); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 2 - mode=2; - printf("\nMode 2\n"); - - OCT_fromHex(&seedE,(char *)"798d82a8d9ea19dbc7f2c6dfa54e8a6706f7cdc119db0813dacf8440ab37c857"); - OCT_fromHex(&seedR,(char *)"7bc93bde8890d1fb55220e7f3b0c107ae7e6eda35ca4040bb6651284bf0747ee"); - OCT_fromHex(&seedS,(char *)"874baa0dcf93595a24a45a7f042e0d22d368747daaa7e19f80a802af19204ba8"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - DeriveKeyPair(config_id,&skS,&pkS,&seedS); - - HPKE_AuthEncap(config_id,&skE,&skS,&Z,&pkE,&pkR,&pkS); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_AuthDecap(config_id,&skR,&Z,&pkE,&pkR,&pkS); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,NULL,NULL); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - -// Mode 3 - mode=3; - printf("\nMode 3\n"); - - OCT_fromHex(&seedE,(char *)"3c1fceb477ec954c8d58ef3249e4bb4c38241b5925b95f7486e4d9f1d0d35fbb"); - OCT_fromHex(&seedR,(char *)"abcc2da5b3fa81d8aabd91f7f800a8ccf60ec37b1b585a5d1d1ac77f258b6cca"); - OCT_fromHex(&seedS,(char *)"6262031f040a9db853edd6f91d2272596eabbc78a2ed2bd643f770ecd0f19b82"); - DeriveKeyPair(config_id,&skE,&pkE,&seedE); - DeriveKeyPair(config_id,&skR,&pkR,&seedR); - DeriveKeyPair(config_id,&skS,&pkS,&seedS); - - HPKE_AuthEncap(config_id,&skE,&skS,&Z,&pkE,&pkR,&pkS); - - printf("pkE= "); OCT_output(&pkE); - printf("Encapsulated Z= "); OCT_output(&Z); - - HPKE_AuthDecap(config_id,&skR,&Z,&pkE,&pkR,&pkS); - printf("Decapsulated Z= "); OCT_output(&Z); - - HPKE_KeySchedule(config_id,&KEY,&NONCE,&EXPORTER_SECRET,mode,&Z,&INFO,&psk,&pskID); - - printf("Key= "); OCT_output(&KEY); - printf("Nonce= "); OCT_output(&NONCE); - printf("Exporter Secret= "); OCT_output(&EXPORTER_SECRET); - - AES_GCM_ENCRYPT(&KEY,&NONCE,&AAD,&PLAIN,&CIPHER,&TAG); - - printf("Cipher= "); OCT_output(&CIPHER); - printf("Tag= "); OCT_output(&TAG); - - return res; -} - -int main() -{ - printf("\n%d bit build", CHUNK); - - printf("\nTesting HPKE for curve C25519\n"); - hpke_C25519(); - - printf("\nTesting HPKE for curve NIST521\n"); - hpke_NIST521(); - - printf("\nTesting HPKE for curve NIST256\n"); - hpke_NIST256(); -} - - - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhtp.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhtp.cpp deleted file mode 100644 index 3f21370..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testhtp.cpp +++ /dev/null @@ -1,714 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* test driver and function exerciser for HTP API Functions */ - -#include -#include -#include -#include -#include "core.h" -#include "randapi.h" -#include "ecp_NIST256.h" -#include "ecp_Ed25519.h" -#include "ecp_C25519.h" -#include "ecp_Ed448.h" -#include "ecp_SECP256K1.h" -#include "ecp_BLS12381.h" -#include "ecp2_BLS12381.h" - -using namespace core; - -#define CEIL(a,b) (((a)-1)/(b)+1) - -/* Select curves 1,2,3,7,17,29 */ - -/* https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/ */ - -static void hash_to_field_Ed25519(int hash,int hlen,F25519::FP *u,octet *DST,octet *M, int ctr) -{ - using namespace Ed25519; - using namespace Ed25519_BIG; - using namespace Ed25519_FP; - - int i,j,L,k,m; - BIG q,w,r; - DBIG dx; - char okm[512],fd[256]; - octet OKM = {0,sizeof(okm),okm}; - - BIG_rcopy(q, Modulus); - k=BIG_nbits(q); - BIG_rcopy(r, CURVE_Order); - m=BIG_nbits(r); - L=CEIL(k+CEIL(m,2),8); - - XMD_Expand(hash,hlen,&OKM,L*ctr,DST,M); - for (i=0;i> 8; - RAW.val[2] = ran >> 16; - RAW.val[3] = ran >> 24; - for (i = 4; i < 100; i++) RAW.val[i] = i; - - CREATE_CSPRNG(&RNG, &RAW); // initialise strong RNG - - printf("%d bit build", CHUNK); - - printf("\nTesting HTP for curve Ed25519\n"); - htp_Ed25519((char *)""); - htp_Ed25519((char *)"abc"); - htp_Ed25519((char *)"abcdef0123456789"); - htp_Ed25519((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_Ed25519((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - printf("\nTesting HTP for curve C25519\n"); - htp_C25519((char *)""); - htp_C25519((char *)"abc"); - htp_C25519((char *)"abcdef0123456789"); - htp_C25519((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_C25519((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - - printf("\nTesting HTP for curve NIST256\n"); - htp_NIST256((char *)""); - htp_NIST256((char *)"abc"); - htp_NIST256((char *)"abcdef0123456789"); - htp_NIST256((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_NIST256((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - printf("\nTesting HTP for curve Ed448\n"); - htp_Ed448((char *)""); - htp_Ed448((char *)"abc"); - htp_Ed448((char *)"abcdef0123456789"); - htp_Ed448((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_Ed448((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - printf("\nTesting HTP for curve SECP256K1\n"); - htp_SECP256K1((char *)""); - htp_SECP256K1((char *)"abc"); - htp_SECP256K1((char *)"abcdef0123456789"); - htp_SECP256K1((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_SECP256K1((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - printf("\nTesting HTP for curve BLS12381_G1\n"); - htp_BLS12381((char *)""); - htp_BLS12381((char *)"abc"); - htp_BLS12381((char *)"abcdef0123456789"); - htp_BLS12381((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_BLS12381((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - printf("\nTesting HTP for curve BLS12381_G2\n"); - htp_BLS12381_G2((char *)""); - htp_BLS12381_G2((char *)"abc"); - htp_BLS12381_G2((char *)"abcdef0123456789"); - htp_BLS12381_G2((char *)"q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); - htp_BLS12381_G2((char *)"a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - - - KILL_CSPRNG(&RNG); -} - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testkyber b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testkyber deleted file mode 100644 index 3c75b81280717c4d05f82768491ff0579edeea2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66872 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 -#include -#include "kyber.h" - -using namespace core; - -#define LOOPS 100 - -int main() { - int i,j; - unsigned long ran; - bool result; - char raw[100]; - csprng RNG; - char sk[KYBER_SECRET_CPA_SIZE_768], pk[KYBER_PUBLIC_SIZE_768],ct[KYBER_CIPHERTEXT_SIZE_768],skc[KYBER_SECRET_CCA_SIZE_768],ss[KYBER_SHARED_SECRET_768]; - octet SKC = {0, sizeof(skc), skc}; - octet SK = {0, sizeof(sk), sk}; - octet PK = {0, sizeof(pk), pk}; - octet CT = {0, sizeof(ct), ct}; - octet SS = {0, sizeof(ss), ss}; - - byte tau[32],r64[64],r32[32]; - byte coins[32]; - - time((time_t *)&ran); - - raw[0] = ran; - raw[1] = ran >> 8; - raw[2] = ran >> 16; - raw[3] = ran >> 24; - - for (i = 0; i < 100; i++) raw[i] = i + 1; - RAND_seed(&RNG, 100, raw); - - printf("Testing Kyber Encryption\n"); - - for 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

{W$!4+NFm=oV2r+J^=UH+gsUza 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�xJ$ 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Ƅ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 -#include -#include -#include -#include "mpin_BN254.h" -#include "randapi.h" - -#if CHUNK==32 || CHUNK==64 -#include "mpin_BLS12383.h" -#include "mpin192_BLS24479.h" -#include "mpin256_BLS48556.h" -#endif - -using namespace core; - -int mpin_BN254(csprng *RNG) -{ - - using namespace BN254; - int i, pin, rtn; - char x[PGS_BN254], s[PGS_BN254], y[PGS_BN254], client_id[100], sst[4 * PFS_BN254 + 1], token[2 * PFS_BN254 + 1], sec[2 * PFS_BN254 + 1], u[2 * PFS_BN254 + 1]; - char hcid[2*PFS_BN254+1], hsid[2*PFS_BN254+1], dst[256]; - - octet S = {0, sizeof(s), s}; - octet X = {0, sizeof(x), x}; - octet Y = {0, sizeof(y), y}; - octet CLIENT_ID = {0, sizeof(client_id), client_id}; - octet SST = {0, sizeof(sst), sst}; - octet TOKEN = {0, sizeof(token), token}; - octet SEC = {0, sizeof(sec), sec}; - octet U = {0, sizeof(u), u}; - octet HCID = {0, sizeof(hcid), hcid}; - octet HSID = {0, sizeof(hsid), hsid}; - octet DST = {0, sizeof(dst), dst}; - OCT_jstring(&DST,(char *)"BN254G1_XMD:SHA-256_SVDW_NU_MPIN"); // Domain Separation Tag - - // Trusted Authority (TA) set-up - MPIN_RANDOM_GENERATE(RNG, &S); - printf("Master Secret= "); - OCT_output(&S); - -// Client Identity - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - printf("Client ID Hashed to Curve= "); - OCT_output(&HCID); -// printf("\n"); - -// Client approaches Trusted Authority and is issued secret - - MPIN_GET_CLIENT_SECRET(&S, &HCID, &TOKEN); - printf("Client Secret= "); - OCT_output(&TOKEN); - -// TA sends Client secret to Client - -// Server is issued secret by TA - MPIN_GET_SERVER_SECRET(&S, &SST); -// printf("Server Secret= "); -// OCT_output(&SST); - -// TA sends Server secret to Server - -// Client extracts PIN from secret to create Token - //pin = 1234; - //printf("Client extracts PIN= %d\n", pin); - pin=0; printf("Client chooses PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - MPIN_EXTRACT_PIN(&HCID, pin, &TOKEN); - printf("Client Token= "); - OCT_output(&TOKEN); - - -// Exercise Secret Sharing - char s1[2 * PFS_BN254 + 1],s2[2 * PFS_BN254 + 1],s3[2 * PFS_BN254 + 1],s4[2 * PFS_BN254 + 1],r[128]; - octet S1 = {0, sizeof(s1), s1}; - octet S2 = {0, sizeof(s2), s2}; - octet S3 = {0, sizeof(s3), s3}; - octet S4 = {0, sizeof(s4), s4}; - octet R = {0,sizeof(r),r}; - OCT_rand(&R,RNG,128); - - // create 4 unique shares of TOKEN - share Sh1=getshare(1,3,&S1,&TOKEN,&R); // indicate 3 shares required for recovery - share Sh2=getshare(2,3,&S2,&TOKEN,&R); - share Sh3=getshare(3,3,&S3,&TOKEN,&R); - share Sh4=getshare(4,3,&S4,&TOKEN,&R); - - OCT_clear(&TOKEN); // kill token - - share Shares[3]; - Shares[0]=Sh1; // any 3 shares to recover TOKEN - Shares[1]=Sh2; - Shares[2]=Sh4; - recover(&TOKEN,Shares); // recover token - -// MPin Protocol - -// Client enters ID and PIN - OCT_clear(&CLIENT_ID); - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - pin=0; printf("Client enters PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - -// Client First pass: Inputs H(CLIENT_ID), RNG, pin, and TOKEN. Output x and U = x.H(CLIENT_ID) and re-combined secret SEC - - if (MPIN_CLIENT_1(&HCID, RNG, &X, pin, &TOKEN, &SEC, &U) != 0) - { - printf("Error from Client side - First Pass\n"); - return 1; - } - -// Send CLIENT_ID and U=x.ID to server. Server hashes ID to curve. - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HSID); - -// Server generates Random number Y and sends it to Client - MPIN_RANDOM_GENERATE(RNG, &Y); - -// Client Second Pass: Inputs Client secret SEC, x and y. Sends -(x+y)*SEC to Server - if (MPIN_CLIENT_2(&X, &Y, &SEC) != 0) - { - printf("Error from Client side - Second Pass\n"); - return 1; - } - -// Server Second phase. Inputs H(CLIENT_ID), Y, -(x+y)*SEC, U and Server secret SST. - - rtn = MPIN_SERVER(&HSID, &Y, &SST, &U, &SEC); - if (rtn != 0) - { - printf("Server says - Bad Pin.\n"); - return 1; - } - else - { - printf("Server says - PIN is good! You really are "); - OCT_output_string(&CLIENT_ID); - printf(".\n"); - } - printf("\n"); - - return 0; -} - -#if CHUNK==32 || CHUNK==64 - -int mpin_BLS12383(csprng *RNG) -{ - using namespace BLS12383; - int pin, rtn; - - char x[PGS_BLS12383], s[PGS_BLS12383], y[PGS_BLS12383], client_id[100], sst[4 * PFS_BLS12383 + 1], token[2 * PFS_BLS12383 + 1], sec[2 * PFS_BLS12383 + 1], u[2 * PFS_BLS12383 + 1]; - char hcid[2*PFS_BLS12383+1], hsid[2*PFS_BLS12383+1], dst[256]; - - octet S = {0, sizeof(s), s}; - octet X = {0, sizeof(x), x}; - octet Y = {0, sizeof(y), y}; - octet CLIENT_ID = {0, sizeof(client_id), client_id}; - octet SST = {0, sizeof(sst), sst}; - octet TOKEN = {0, sizeof(token), token}; - octet SEC = {0, sizeof(sec), sec}; - octet U = {0, sizeof(u), u}; - octet HCID = {0, sizeof(hcid), hcid}; - octet HSID = {0, sizeof(hsid), hsid}; - octet DST = {0, sizeof(dst), dst}; - OCT_jstring(&DST,(char *)"BLS12383G1_XMD:SHA-256_SVDW_NU_MPIN"); // Domain Separation Tag - - // Trusted Authority (TA) set-up - MPIN_RANDOM_GENERATE(RNG, &S); - printf("Master Secret= "); - OCT_output(&S); - -// Client Identity - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - printf("Client ID Hashed to Curve= "); - OCT_output(&HCID); -// printf("\n"); - -// Client approaches Trusted Authority and is issued secret - - MPIN_GET_CLIENT_SECRET(&S, &HCID, &TOKEN); - printf("Client Secret= "); - OCT_output(&TOKEN); - -// TA sends Client secret to Client - -// Server is issued secret by TA - MPIN_GET_SERVER_SECRET(&S, &SST); -// printf("Server Secret= "); -// OCT_output(&SST); - -// TA sends Server secret to Server - -// Client extracts PIN from secret to create Token - //pin = 1234; - //printf("Client extracts PIN= %d\n", pin); - pin=0; printf("Client chooses PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - MPIN_EXTRACT_PIN(&HCID, pin, &TOKEN); - printf("Client Token= "); - OCT_output(&TOKEN); - -// MPin Protocol - -// Client enters ID and PIN - OCT_clear(&CLIENT_ID); - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - pin=0; printf("Client enters PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - -// Client First pass: Inputs H(CLIENT_ID), RNG, pin, and TOKEN. Output x and U = x.H(CLIENT_ID) and re-combined secret SEC - - if (MPIN_CLIENT_1(&HCID, RNG, &X, pin, &TOKEN, &SEC, &U) != 0) - { - printf("Error from Client side - First Pass\n"); - return 1; - } - -// Send CLIENT_ID and U=x.ID to server. Server hashes ID to curve. - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HSID); - -// Server generates Random number Y and sends it to Client - MPIN_RANDOM_GENERATE(RNG, &Y); - -// Client Second Pass: Inputs Client secret SEC, x and y. Sends -(x+y)*SEC to Server - if (MPIN_CLIENT_2(&X, &Y, &SEC) != 0) - { - printf("Error from Client side - Second Pass\n"); - return 1; - } - -// Server Second phase. Inputs H(CLIENT_ID), Y, -(x+y)*SEC, U and Server secret SST. - - rtn = MPIN_SERVER(&HSID, &Y, &SST, &U, &SEC); - if (rtn != 0) - { - printf("Server says - Bad Pin.\n"); - return 1; - } - else - { - printf("Server says - PIN is good! You really are "); - OCT_output_string(&CLIENT_ID); - printf(".\n"); - } - printf("\n"); - return 0; -} - -int mpin192_BLS24479(csprng *RNG) -{ - using namespace BLS24479; - int pin, rtn; - char x[PGS_BLS24479], s[PGS_BLS24479], y[PGS_BLS24479], client_id[100], sst[8 * PFS_BLS24479 + 1], token[2 * PFS_BLS24479 + 1], sec[2 * PFS_BLS24479 + 1], u[2 * PFS_BLS24479 + 1]; - char hcid[2*PFS_BLS24479+1], hsid[2*PFS_BLS24479+1], dst[256]; - - octet S = {0, sizeof(s), s}; - octet X = {0, sizeof(x), x}; - octet Y = {0, sizeof(y), y}; - octet CLIENT_ID = {0, sizeof(client_id), client_id}; - octet SST = {0, sizeof(sst), sst}; - octet TOKEN = {0, sizeof(token), token}; - octet SEC = {0, sizeof(sec), sec}; - octet U = {0, sizeof(u), u}; - octet HCID = {0, sizeof(hcid), hcid}; - octet HSID = {0, sizeof(hsid), hsid}; - octet DST = {0, sizeof(dst), dst}; - OCT_jstring(&DST,(char *)"BLS24479G1_XMD:SHA-384_SVDW_NU_MPIN"); // Domain Separation Tag - - - // Trusted Authority (TA) set-up - MPIN_RANDOM_GENERATE(RNG, &S); - printf("Master Secret= "); - OCT_output(&S); - -// Client Identity - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - printf("Client ID Hashed to Curve= "); - OCT_output(&HCID); -// printf("\n"); - -// Client approaches Trusted Authority and is issued secret - - MPIN_GET_CLIENT_SECRET(&S, &HCID, &TOKEN); - printf("Client Secret= "); - OCT_output(&TOKEN); - -// TA sends Client secret to Client - -// Server is issued secret by TA - MPIN_GET_SERVER_SECRET(&S, &SST); -// printf("Server Secret= "); -// OCT_output(&SST); - -// TA sends Server secret to Server - -// Client extracts PIN from secret to create Token - //pin = 1234; - //printf("Client extracts PIN= %d\n", pin); - pin=0; printf("Client chooses PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - MPIN_EXTRACT_PIN(&HCID, pin, &TOKEN); - printf("Client Token= "); - OCT_output(&TOKEN); - -// MPin Protocol - -// Client enters ID and PIN - OCT_clear(&CLIENT_ID); - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - pin=0; printf("Client enters PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - -// Client First pass: Inputs H(CLIENT_ID), RNG, pin, and TOKEN. Output x and U = x.H(CLIENT_ID) and re-combined secret SEC - - if (MPIN_CLIENT_1(&HCID, RNG, &X, pin, &TOKEN, &SEC, &U) != 0) - { - printf("Error from Client side - First Pass\n"); - return 1; - } - -// Send CLIENT_ID and U=x.ID to server. Server hashes ID to curve. - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HSID); - -// Server generates Random number Y and sends it to Client - MPIN_RANDOM_GENERATE(RNG, &Y); - -// Client Second Pass: Inputs Client secret SEC, x and y. Sends -(x+y)*SEC to Server - if (MPIN_CLIENT_2(&X, &Y, &SEC) != 0) - { - printf("Error from Client side - Second Pass\n"); - return 1; - } - -// Server Second phase. Inputs H(CLIENT_ID), Y, -(x+y)*SEC, U and Server secret SST. - - rtn = MPIN_SERVER(&HSID, &Y, &SST, &U, &SEC); - if (rtn != 0) - { - printf("Server says - Bad Pin.\n"); - return 1; - } - else - { - printf("Server says - PIN is good! You really are "); - OCT_output_string(&CLIENT_ID); - printf(".\n"); - } - printf("\n"); - return 0; -} - -int mpin256_BLS48556(csprng *RNG) -{ - using namespace BLS48556; - int pin, rtn; - char x[PGS_BLS48556], s[PGS_BLS48556], y[PGS_BLS48556], client_id[100], sst[16 * PFS_BLS48556 + 1], token[2 * PFS_BLS48556 + 1], sec[2 * PFS_BLS48556 + 1], u[2 * PFS_BLS48556 + 1]; - char hcid[2*PFS_BLS48556+1], hsid[2*PFS_BLS48556+1], dst[256]; - - octet S = {0, sizeof(s), s}; - octet X = {0, sizeof(x), x}; - octet Y = {0, sizeof(y), y}; - octet CLIENT_ID = {0, sizeof(client_id), client_id}; - octet SST = {0, sizeof(sst), sst}; - octet TOKEN = {0, sizeof(token), token}; - octet SEC = {0, sizeof(sec), sec}; - octet U = {0, sizeof(u), u}; - octet HCID = {0, sizeof(hcid), hcid}; - octet HSID = {0, sizeof(hsid), hsid}; - octet DST = {0, sizeof(dst), dst}; - OCT_jstring(&DST,(char *)"BLS48556G1_XMD:SHA-512_SVDW_NU_MPIN"); // Domain Separation Tag - - - // Trusted Authority (TA) set-up - MPIN_RANDOM_GENERATE(RNG, &S); - printf("Master Secret= "); - OCT_output(&S); - -// Client Identity - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - printf("Client ID Hashed to Curve= "); - OCT_output(&HCID); -// printf("\n"); - -// Client approaches Trusted Authority and is issued secret - - MPIN_GET_CLIENT_SECRET(&S, &HCID, &TOKEN); - printf("Client Secret= "); - OCT_output(&TOKEN); - -// TA sends Client secret to Client - -// Server is issued secret by TA - MPIN_GET_SERVER_SECRET(&S, &SST); -// printf("Server Secret= "); -// OCT_output(&SST); - -// TA sends Server secret to Server - -// Client extracts PIN from secret to create Token - //pin = 1234; - //printf("Client extracts PIN= %d\n", pin); - pin=0; printf("Client chooses PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - MPIN_EXTRACT_PIN(&HCID, pin, &TOKEN); - printf("Client Token= "); - OCT_output(&TOKEN); - -// MPin Protocol - -// Client enters ID and PIN - OCT_clear(&CLIENT_ID); - OCT_jstring(&CLIENT_ID, (char *)"testUser@miracl.com"); - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HCID); - pin=0; printf("Client enters PIN= "); - if (scanf("%d", &pin)) {}; // to avoid silly compile error - getchar(); - -// Client First pass: Inputs H(CLIENT_ID), RNG, pin, and TOKEN. Output x and U = x.H(CLIENT_ID) and re-combined secret SEC - - if (MPIN_CLIENT_1(&HCID, RNG, &X, pin, &TOKEN, &SEC, &U) != 0) - { - printf("Error from Client side - First Pass\n"); - return 1; - } - -// Send CLIENT_ID and U=x.ID to server. Server hashes ID to curve. - MPIN_ENCODE_TO_CURVE(&DST,&CLIENT_ID,&HSID); - -// Server generates Random number Y and sends it to Client - MPIN_RANDOM_GENERATE(RNG, &Y); - -// Client Second Pass: Inputs Client secret SEC, x and y. Sends -(x+y)*SEC to Server - if (MPIN_CLIENT_2(&X, &Y, &SEC) != 0) - { - printf("Error from Client side - Second Pass\n"); - return 1; - } - -// Server Second phase. Inputs H(CLIENT_ID), Y, -(x+y)*SEC, U and Server secret SST. - - rtn = MPIN_SERVER(&HSID, &Y, &SST, &U, &SEC); - if (rtn != 0) - { - printf("Server says - Bad Pin.\n"); - return 1; - } - else - { - printf("Server says - PIN is good! You really are "); - OCT_output_string(&CLIENT_ID); - printf(".\n"); - } - printf("\n"); - return 0; -} -#endif - -int main() -{ - int i, res; - unsigned long ran; - - char raw[100]; - octet RAW = {0, sizeof(raw), raw}; - csprng RNG; // Crypto Strong RNG - - time((time_t *)&ran); - - RAW.len = 100; // fake random seed source - RAW.val[0] = ran; - RAW.val[1] = ran >> 8; - RAW.val[2] = ran >> 16; - RAW.val[3] = ran >> 24; - for (i = 0; i < 100; i++) RAW.val[i] = i; - - CREATE_CSPRNG(&RNG, &RAW); // initialise strong RNG - - printf("\nTesting MPIN 2-factor authentication protocol on curve BN254\n"); - mpin_BN254(&RNG); - -#if CHUNK!=16 - printf("\nTesting MPIN 2-factor authentication protocol on curve BLS12383\n"); - mpin_BLS12383(&RNG); - printf("\nTesting MPIN 2-factor authentication protocol on curve BLS24479\n"); - mpin192_BLS24479(&RNG); - printf("\nTesting MPIN 2-factor authentication protocol on curve BLS48556\n"); - mpin256_BLS48556(&RNG); -#endif - - KILL_CSPRNG(&RNG); -} - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testnhs b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testnhs deleted file mode 100644 index 21270d423f31f2f9daf0aed370b6000810b2a107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69040 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 -#include -#include "newhope.h" - -using namespace core; - -int main() -{ - int i, ii, j, err; - unsigned long ran; - char raw[100]; - csprng SRNG, CRNG; - RAND_clean(&SRNG); RAND_clean(&CRNG); - char s[1792], sb[1824], uc[2176], keyA[32], keyB[32]; - - octet S = {0, sizeof(s), s}; - octet SB = {0, sizeof(sb), sb}; - octet UC = {0, sizeof(uc), uc}; - octet KEYA = {0, sizeof(keyA), keyA}; - octet KEYB = {0, sizeof(keyB), keyB}; - - printf("\nTesting New Hope Key Exchange\n"); - -// initialise random number generators - time((time_t *)&ran); - - raw[0] = ran; - raw[1] = ran >> 8; - raw[2] = ran >> 16; - raw[3] = ran >> 24; - - for (i = 4; i < 100; i++) raw[i] = i + 1; - RAND_seed(&SRNG, 100, raw); - for (i = 4; i < 100; i++) raw[i] = i + 2; - RAND_seed(&CRNG, 100, raw); - -// NewHope Simple key exchange - see https://eprint.iacr.org/2016/1157.pdf Protocol 1 - - NHS_SERVER_1(&SRNG, &SB, &S); - NHS_CLIENT(&CRNG, &SB, &UC, &KEYB); - NHS_SERVER_2(&S, &UC, &KEYA); - - printf("Alice key= 0x"); - OCT_output(&KEYA); - printf("Bob's key= 0x"); - OCT_output(&KEYB); - - return 0; -} - - diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testx509.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testx509.cpp deleted file mode 100644 index c6381e3..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/testx509.cpp +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// To run test program -// g++ -O2 testx509.cpp core.a -o testx509 - -#include -#include "core.h" // for octet support only -#include "x509.h" - -// assumes library support for all of these -#include "eddsa_Ed448.h" -#include "eddsa_Ed25519.h" -#include "ecdh_NIST256.h" -#include "ecdh_NIST521.h" -#include "rsa_RSA4096.h" -#include "rsa_RSA2048.h" - -/* This simple driver program is hard-wired to support just one elliptic curve and one - RSA bit length. To change replace the text string NIST256 in the main program to - another curve and 2048 to some other value, where the curve and the RSA bit length - are suppported by the library. Of course a more elaborate program could support - muliple curves simultaneously */ - -#define CHOICE USE_NIST256 - -/* test driver program */ -// Sample Certs. Uncomment one CA cert and one example cert. Note that CORE library must be built to support given curve. -// Sample Certs all created using OpenSSL - see http://blog.didierstevens.com/2008/12/30/howto-make-your-own-cert-with-openssl/ -// Note - SSL currently only supports NIST curves. Howevever version 1.1.0 of OpenSSL now supports C25519 - -#if CHOICE==USE_NIST256 - -// ** CA is RSA 2048-bit based - for use with NIST256 build of library - assumes use of SHA256 in Certs -// RSA 2048 Self-Signed CA cert -char ca_b64[] = "MIIDuzCCAqOgAwIBAgIJAP44jcM1MOROMA0GCSqGSIb3DQEBCwUAMHQxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEfMB0GCSqGSIb3DQEJARYQbXNjb3R0QGluZGlnby5pZTAeFw0xNTExMjYwOTUwMzlaFw0yMDExMjUwOTUwMzlaMHQxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEfMB0GCSqGSIb3DQEJARYQbXNjb3R0QGluZGlnby5pZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUs7/nri9J8zw8rW8JVszXP0ZqeLoQJaq2X28ebm8x5VT3okr9rnBjFjpx0YKQCAFQf8iSOOYuNpDvtZ/YpsjPbk2rg5sLY9G0eUMqrTuZ7moPSxnrXS5evizjD9Z9HqaqeNEYD3sPouPg+lhU1oAUQjUTJVFhEr1x0EnSEYbbrWtY9ZDSuZv+d4NIeqqPOYFd1yZc+LYZyQbAAQqwRLNPZH/rnIykLa6I7w7mGT7H6SBz2O09BtgpTHhalL40ecXa4ZOEze0xwzlc+mEFIrnmdadg3vQrJt42RVbo3LN6RfDIqUZOMOtQW/53pUR1lIpCwVWJTiOpmSEIEqhhjFq0CAwEAAaNQME4wHQYDVR0OBBYEFJrz6LHeT6FcjRahpUC3hAMxKRTCMB8GA1UdIwQYMBaAFJrz6LHeT6FcjRahpUC3hAMxKRTCMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADqkqCYVa3X8XO9Ufu6XIUoZafFPRjSeJXvEIWqlbm7ixJZ2FPOvf2eMc5RCZYigNKhsxru5Ojw0lPcpa8DDmEsdZDf7p0vlmf7T7xH9gtoInh4DzgI8HRHFc8R/z2/jLX7nlLoopKX5yp7F1gRACg0pd4tGpQ6EnBNcYZZghFH9UIRDmx+vDlwDCu8vyRPt35orrEiI4XGq/QkvxxAb5YWxQ4i06064ULfyCI7suu3KoobdM1aAaA8zhpOOBXKbq+Wi9IGFe/wiEMHLmfHdt9CBTjIWb//IHji4RT05kCmTVrx97pb7EHafuL3L10mM5cpTyBWKnb4kMFtx9yw+S2U="; -// an RSA 2048 CA-signed cert -//char cert_b64[]="MIIDcjCCAloCAQEwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UEBhMCSUUxEDAOBgNVBAgMB0lyZWxhbmQxDzANBgNVBAcMBkR1YmxpbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMR8wHQYJKoZIhvcNAQkBFhBtc2NvdHRAaW5kaWdvLmllMB4XDTE1MTEyNjEwMzQzMFoXDTE3MTEyNTEwMzQzMFowgYkxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xETAPBgNVBAoMCENlcnRpVm94MQ0wCwYDVQQLDARMYWJzMQ0wCwYDVQQDDARNSUtFMSYwJAYJKoZIhvcNAQkBFhdtaWtlLnNjb3R0QGNlcnRpdm94LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIoxaQHFQzfyNChrw+3i7FjRFMHZ4zspkjkAcJW21LdBCqrxU+sdjyBoSFlrlafQOHshbrEP93AKX1bfaYbuV4fzq7OlRaLxaK+b+xrOJdewMI2WZ5OwEzj3onZATISogIoB6dTdzJ41NuxuMqQ/DqOnVrRA0SoIespbQhB8FGHBLw0hJATBzUk+bqOIt0HmnMp2EbYgtuG4lYINU/lD3Qt16SunUukWRLtxqJkioie+dkhP2zm+bOlSVmeQb4Wp8AI14OKkTfkdYC8qCxb5eabg90Q33rQUhNwRQHhHwopZwD/BgodasoSrPfwUlj0awh6y87eMGcik5Q/mjkCk5MCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAFrd7R/67ClkbLhpiX++6QTOa47siUAB9v+Qil9hZfhPNeeM589ixYkD4zH5pOK2B0ea+CXEKkanQ6lXx9KV86yS7fq6Yww7wO0diecusHd0+P82i46Tq0nm8nlsnAuhYoFRUGa2m2DkB1HSsB0ts8DjzFLySonFjSSLHDU0ox9/uFbJMzipy3ijAA4XM0N4jRrUfrmxpA7DOOsbEbGkvvB7VK9+s9PHE/4dJTwhSteplUnhxVFkkDo/JwaLx4/IEQRlCF3KEQ5s3AwRHnbrIjOY2yONxHBtJEp7QN5aOHruwvMNRNheCBPiQJyLitUsFGr4voANmobkrFgYtu0tRMQ=="; -// an ECDSA 256 CA-signed cert -char cert_b64[] = "MIICojCCAYoCAQMwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UEBhMCSUUxEDAOBgNVBAgMB0lyZWxhbmQxDzANBgNVBAcMBkR1YmxpbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMR8wHQYJKoZIhvcNAQkBFhBtc2NvdHRAaW5kaWdvLmllMB4XDTE1MTEyNjEzNDcyOVoXDTE3MTEyNTEzNDcyOVowgYQxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xETAPBgNVBAoMCENlcnRpdm94MQ0wCwYDVQQLDARMYWJzMQ8wDQYDVQQDDAZtc2NvdHQxHzAdBgkqhkiG9w0BCQEWEG1zY290dEBpbmRpZ28uaWUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATO2iZiQZsXxzwBKnufKfZcsctNXZ4PmfJm638PmX9DQ3Xdb+nD5VxiOakNcB9xf5im8CriiOF5Z/7yPGyzUMbdMA0GCSqGSIb3DQEBCwUAA4IBAQAK5fMgGCCiPts8hMUZvYDpu8hd7qtPKPBc10QUccHb7PGrhqf/Ex2Gpj1aaURmx7SGZG0HX97LtkdW8KQpEoyaa60r7cjVA589TznxXKSGg5ggVoFJNpuZUm7VcolLjwIgTxtGbPzrvVMiZ4cl4PwFePXVKTl4f8XkOFX5gLmVSuCf729lEBmpx3IzqGmTjmnBixaApUElOKVeL7hiUKP3TqMUxZN+QNJBq4Mh9K9h4Sks2oneLwBwhMqQvpmcOb/7SucJn5N0IgJoGaMbfX0oCJJID1NSbagUSbFD1XciR2Ng9VtvnRP+htmEQ7jtww8phFdrWt5M5zPGOHUppqDx"; - -// ** CA is ECC 256 based - for use with NIST256 build of library -// ECDSA 256 Self-Signed CA cert -//char ca_b64[]="MIIB7TCCAZOgAwIBAgIJANp4nGS/VYj2MAoGCCqGSM49BAMCMFMxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNTExMjYxMzI0MTBaFw0yMDExMjUxMzI0MTBaMFMxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPb6IjYNKyfbEtL1aafzW1jrn6ALn3PnGm7AyX+pcvwG0GKmb3Z/uHzhT4GysNE0/GB1n4Y/mrORQIm2X98rRs6jUDBOMB0GA1UdDgQWBBSfXUNkgJVklIhuXq4DCnVYhsdzwDAfBgNVHSMEGDAWgBSfXUNkgJVklIhuXq4DCnVYhsdzwDAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0gAMEUCIQDrZJ1tshwTl/jabU2i49EOgbWe0ZgE3QZywJclf5IVwwIgVmz79AAf7e098lyrOKYAqbwjHVyMZGfmkNNGIuIhp/Q="; -// an ECDSA 256 CA-signed cert -//char cert_b64[]="MIIBvjCCAWQCAQEwCgYIKoZIzj0EAwIwUzELMAkGA1UEBhMCSUUxEDAOBgNVBAgMB0lyZWxhbmQxDzANBgNVBAcMBkR1YmxpbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE1MTEyNjEzMjc1N1oXDTE3MTEyNTEzMjc1N1owgYIxCzAJBgNVBAYTAklFMRAwDgYDVQQIDAdJcmVsYW5kMQ8wDQYDVQQHDAZEdWJsaW4xETAPBgNVBAoMCENlcnRpdm94MQ0wCwYDVQQLDARMYWJzMQ0wCwYDVQQDDARtaWtlMR8wHQYJKoZIhvcNAQkBFhBtc2NvdHRAaW5kaWdvLmllMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEY42H52TfWMLueKB1o2Sq8uKaKErbHJ2GRAxrnJdNxex0hxZF5FUx7664BbPUolKhpvKTnJxDq5/gMqXzpKgR6DAKBggqhkjOPQQDAgNIADBFAiEA0ew08Xg32g7BwheslVKwXo9XRRx4kygYha1+cn0tvaUCIEKCEwnosZlAckjcZt8aHN5zslE9K9Y7XxTErTstthKc"; -// an RSA 2048 CA-signed cert -//char cert_b64[]="MIICiDCCAi4CAQIwCgYIKoZIzj0EAwIwUzELMAkGA1UEBhMCSUUxEDAOBgNVBAgMB0lyZWxhbmQxDzANBgNVBAcMBkR1YmxpbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE1MTEyNjEzMzcwNVoXDTE3MTEyNTEzMzcwNVowgYExCzAJBgNVBAYTAklFMQ8wDQYDVQQIDAZJZWxhbmQxDzANBgNVBAcMBkR1YmxpbjERMA8GA1UECgwIQ2VydGl2b3gxDTALBgNVBAsMBExhYnMxDTALBgNVBAMMBE1pa2UxHzAdBgkqhkiG9w0BCQEWEG1zY290dEBpbmRpZ28uaWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjPBVwmPg8Gwx0+8xekmomptA0BDwS7NUfBetqDqNMNyji0bSe8LAfpciU7NW/HWfUE1lndCqSDDwnMJmwC5e3GAl/Bus+a+z8ruEhWGbn95xrHXFkOawbRlXuS7UcEQCvPr8KQHhNsg4cyV7Hn527CPUl27n+WN8/pANo01cTN/dQaK87naU0Mid09vktlMKSN0zyJOnc5CsaTLs+vCRKJ9sUL3d4IQIA2y7gvrTe+iY/QI26nqhGpNWYyFkAdy9PdHUEnDI6JsfF7jFh37yG7XEgDDA3asp/oi1T1+ZoASj2boL++opdqCzDndeWwzDWAWuvJ9wULd80ti6x737ZAgMBAAEwCgYIKoZIzj0EAwIDSAAwRQIgCDwgl98+9moBo+etaLt8MvB/z5Ti6i9neRTZkvoFl7YCIQDq//M3OB757fepErRzIQo3aFAFYjOooi6WdSqP3XqGIg=="; - -#endif - -#if CHOICE==USE_ED25519 - -// **CA is EDDSA Ed25519 based. Self-signed cert -char ca_b64[]= "MIIBRTCB+KADAgECAhNBrGyCRdfc0WyPpPd+LB8LEiK4MAUGAytlcDAZMRcwFQYDVQQDDA5NaWtlJ3Mgcm9vdCBDQTAeFw0yMzA1MDExNjAwMDlaFw0yNDA0MzAxNjAwMDlaMBkxFzAVBgNVBAMMDk1pa2UncyByb290IENBMCowBQYDK2VwAyEAh8YXRWdICdF8CcR1P0RCO4xD+s5i8Pzpq8KHid/TQaajUzBRMB0GA1UdDgQWBBQAS56sNYWyao4k6DS/M81i+wqjIzAfBgNVHSMEGDAWgBQAS56sNYWyao4k6DS/M81i+wqjIzAPBgNVHRMBAf8EBTADAQH/MAUGAytlcANBAJWIicxVB6ynhjjkJgNtcL/kmixU7l/V1j/N0AtenDgT+yrMhDW9n9JC+Ze5qpX3Eu3VkdkpN3G9anmBXp3LtAk="; -// EDDSA Ed25519 CA-signed Cert -char cert_b64[]="MIHdMIGQAgEBMAUGAytlcDAZMRcwFQYDVQQDDA5NaWtlJ3Mgcm9vdCBDQTAeFw0yMzA1MDExNjA1NDhaFw0yNDA0MzAxNjA1NDhaMB0xGzAZBgNVBAMMEk1pa2UncyBzZXJ2ZXIgY2VydDAqMAUGAytlcAMhANvhwg8UhnGMGt0bKoGt5IHkvHwyEwWj4GkLQ7XIqJeVMAUGAytlcANBAESWzTJbz/YVwLFrDKVqYxHc86YGjPa8lekAC8UciIKu9d1Xoko3ssfhNiXkYkl3M0yEnIkD2F2DfGKbt8LSmQE="; - -#endif - -#if CHOICE==USE_ED448 - -// **CA is EDDSA Ed448 based. Self-signed cert -char ca_b64[]= "MIIBkjCCARKgAwIBAgIUWnfFe8sR7CGIz3eN1CfyHdTz14kwBQYDK2VxMBkxFzAVBgNVBAMMDk1pa2UncyByb290IENBMB4XDTIzMDUwMTE2NDQxMloXDTI0MDQzMDE2NDQxMlowGTEXMBUGA1UEAwwOTWlrZSdzIHJvb3QgQ0EwQzAFBgMrZXEDOgACd4YB/lGYUck4KxQMJ+lshkHnBuigmwPALPQGARv26SK/EOi0DIMMpyp3oG+pnPpnqbqtDtesCYCjUzBRMB0GA1UdDgQWBBRygDXbx5h57oo1D91LitQV2PE2dzAfBgNVHSMEGDAWgBRygDXbx5h57oo1D91LitQV2PE2dzAPBgNVHRMBAf8EBTADAQH/MAUGAytlcQNzAI17NGvKrGAH5hKLUHC1+Qv5RvT4IKlWg5GnRGTccc5tCrimveoMbu2KTlNXaOHS8y/sZT1qddukAFLzR/1ehZqOnYLM7dwlgYdksAx0olo5+/MYfj3hw5noh1pMObnJREfTPTSg1gqFI+gObB1UoSsBAA=="; -// EDDSA Ed448 CA-signed Cert -char cert_b64[]="MIIBIzCBpAIBATAFBgMrZXEwGTEXMBUGA1UEAwwOTWlrZSdzIHJvb3QgQ0EwHhcNMjMwNTAxMTY0NjQzWhcNMjQwNDMwMTY0NjQzWjAYMRYwFAYDVQQDDA1NaWtlJ3Mgc2VydmVyMEMwBQYDK2VxAzoAgYh3CQP+EgId5/TZjAsuxh7Y9nPYtN5CYeN8vLjPuRqQncja3MyhRJaOrUEKSnBK+zYbkdXMQQwAMAUGAytlcQNzAPcm8DVSRZA1r0QqsSsHv6xBy1ASaoz4RFyelFMUD4f6ERMaxTzs0LKQHtcx5G9vqOxvQyCgkEu2AOcUQLtEXcoOSLH8fy0+5yEbbs6uPA1hi/oGpy580SR/5K5odY35fe1kwhz9YUvT4suTRHocnpcsAA=="; -#endif - -char io[5000]; -octet IO = {0, sizeof(io), io}; - -#define MAXMODBYTES 72 -#define MAXFFLEN 16 - -char sig[MAXMODBYTES * MAXFFLEN]; -octet SIG = {0, sizeof(sig), sig}; - -char r[MAXMODBYTES]; -octet R = {0, sizeof(r), r}; - -char s[MAXMODBYTES]; -octet S = {0, sizeof(s), s}; - -char cakey[MAXMODBYTES * MAXFFLEN]; -octet CAKEY = {0, sizeof(cakey), cakey}; - -char certkey[MAXMODBYTES * MAXFFLEN]; -octet CERTKEY = {0, sizeof(certkey), certkey}; - -char h[5000]; -octet H = {0, sizeof(h), h}; - -char hh[5000]; -octet HH = {0, sizeof(hh), hh}; - -char hp[RFS_RSA2048]; -octet HP = {0, sizeof(hp), hp}; - - -void print_out(char *des, octet *c, int index, int len) -{ - int i; - printf("%s [", des); - for (i = 0; i < len; i++) - printf("%c", c->val[index + i]); - printf("]\n"); -} - -void print_date(char *des, octet *c, int index) -{ - int i = index; - printf("%s [", des); - if (i == 0) printf("]\n"); - else printf("20%c%c-%c%c-%c%c %c%c:%c%c:%c%c]\n", c->val[i], c->val[i + 1], c->val[i + 2], c->val[i + 3], c->val[i + 4], c->val[i + 5], c->val[i + 6], c->val[i + 7], c->val[i + 8], c->val[i + 9], c->val[i + 10], c->val[i + 11]); -} - -int main() -{ - int res, len, sha; - int c, ic; - RSA2048::rsa_public_key PK; - pktype st, ca, pt; - - printf("First check signature on self-signed cert and extract CA public key\n"); - OCT_frombase64(&IO, ca_b64); - printf("CA Self-Signed Cert= \n"); - OCT_output(&IO); - printf("\n"); - - st = X509_extract_cert_sig(&IO, &SIG); // returns signature type - - if (st.type == 0) - { - printf("Unable to extract cert signature\n"); - return 0; - } - - if (st.type == X509_ECC) - { - OCT_chop(&SIG, &S, SIG.len / 2); - OCT_copy(&R, &SIG); - printf("ECDSA SIG= \n"); - OCT_output(&R); - OCT_output(&S); - printf("\n"); - } - - if (st.type == X509_ECD) - { - printf("EDDSA SIG= \n"); - OCT_output(&SIG); - printf("\n"); - } - - if (st.type == X509_RSA) - { - printf("RSA SIG= \n"); - OCT_output(&SIG); - printf("\n"); - } - - if (st.hash == X509_H256) printf("Hashed with SHA256\n"); - if (st.hash == X509_H384) printf("Hashed with SHA384\n"); - if (st.hash == X509_H512) printf("Hashed with SHA512\n"); - -// Extract Cert from signed Cert - - c = X509_extract_cert(&IO, &H); - - printf("\nCert= \n"); - OCT_output(&H); - printf("\n"); - -// show some details - printf("Issuer Details\n"); - ic = X509_find_issuer(&H,&len); - c = X509_find_entity_property(&H, &X509_ON, ic, &len); - print_out((char *)"owner=", &H, c, len); - c = X509_find_entity_property(&H, &X509_CN, ic, &len); - print_out((char *)"country=", &H, c, len); - c = X509_find_entity_property(&H, &X509_EN, ic, &len); - print_out((char *)"email=", &H, c, len); - c = X509_find_entity_property(&H, &X509_MN, ic, &len); - print_out((char *)"Common Name=", &H, c, len); - printf("\n"); - - ca = X509_extract_public_key(&H, &CAKEY); - - if (ca.type == 0) - { - printf("Not supported by library\n"); - return 0; - } - //if (ca.type != st.type) - if (!X509_self_signed(&H)) - { - printf("Not self-signed\n"); - } - - if (ca.type == X509_ECD) - { - printf("EXTRACTED EDDSA PUBLIC KEY= \n"); - OCT_output(&CAKEY); - } - if (ca.type == X509_ECC) - { - printf("EXTRACTED ECDSA PUBLIC KEY= \n"); - OCT_output(&CAKEY); - } - if (ca.type == X509_RSA) - { - printf("EXTRACTED RSA PUBLIC KEY= \n"); - OCT_output(&CAKEY); - } - printf("\n"); - -// Cert is self-signed - so check signature - - printf("Checking Self-Signed Signature\n"); - if (ca.type == X509_ECC) - { - if (ca.curve != CHOICE) - { - printf("Curve is not supported\n"); - return 0; - } - res = NIST256::ECP_PUBLIC_KEY_VALIDATE(&CAKEY); - if (res != 0) - { - printf("ECP Public Key is invalid!\n"); - return 0; - } - else printf("ECP Public Key is Valid\n"); - - sha = 0; - - if (st.hash == X509_H256) sha = SHA256; - if (st.hash == X509_H384) sha = SHA384; - if (st.hash == X509_H512) sha = SHA512; - if (sha == 0) - { - printf("Hash Function not supported\n"); - return 0; - } - - if (NIST256::ECP_VP_DSA(sha, &CAKEY, &H, &R, &S) != 0) - { - printf("***ECDSA Verification Failed\n"); - return 0; - } - else - printf("ECDSA Signature/Verification succeeded \n"); - } - - if (ca.type == X509_ECD) - { - if (ca.curve != CHOICE) - { - printf("Curve is not supported %d\n",ca.curve); - return 0; - } - if (ca.curve == USE_ED25519) - { - if (!Ed25519::EDDSA_VERIFY(false,&CAKEY,NULL,&H,&SIG)) - { - printf("***EDDSA Verification Failed\n"); - return 0; - } - else - printf("EDDSA Signature/Verification succeeded \n"); - } - if (ca.curve == USE_ED448) - { - if (!Ed448::EDDSA_VERIFY(false,&CAKEY,NULL,&H,&SIG)) - { - printf("***EDDSA Verification Failed %d\n",SIG.len); - return 0; - } - else - printf("EDDSA Signature/Verification succeeded \n"); - } - } - if (ca.type == X509_RSA) - { - if (ca.curve != 2048) - { - printf("RSA bit size is not supported\n"); - return 0; - } - PK.e = 65537; // assuming this! - RSA2048::RSA_fromOctet(PK.n, &CAKEY); - - sha = 0; - - if (st.hash == X509_H256) sha = SHA256; - if (st.hash == X509_H384) sha = SHA384; - if (st.hash == X509_H512) sha = SHA512; - if (sha == 0) - { - printf("Hash Function not supported\n"); - return 0; - } - core::PKCS15(sha, &H, &HP); - - RSA2048::RSA_ENCRYPT(&PK, &SIG, &HH); - - if (OCT_comp(&HP, &HH)) - printf("RSA Signature/Verification succeeded \n"); - else - { - printf("***RSA Verification Failed\n"); - return 0; - } - } - - printf("\nNext check CA signature on cert, and extract public key\n"); - - OCT_frombase64(&IO, cert_b64); - printf("Example Cert= \n"); - OCT_output(&IO); - printf("\n"); - - st = X509_extract_cert_sig(&IO, &SIG); - - if (st.type == 0) - { - printf("Unable to check cert signature\n"); - return 0; - } - - if (st.type == X509_ECC) - { - OCT_chop(&SIG, &S, SIG.len / 2); - OCT_copy(&R, &SIG); - printf("SIG= \n"); - OCT_output(&R); - - OCT_output(&S); - - printf("\n"); - } - - if (st.type == X509_ECD) - { - printf("SIG= \n"); - OCT_output(&SIG); - printf("\n"); - } - - if (st.type == X509_RSA) - { - printf("SIG= \n"); - OCT_output(&SIG); - printf("\n"); - } - - c = X509_extract_cert(&IO, &H); - - printf("Cert= \n"); - OCT_output(&H); - printf("\n"); - - printf("Subject Details\n"); - ic = X509_find_subject(&H,&len); - c = X509_find_entity_property(&H, &X509_ON, ic, &len); - print_out((char *)"owner=", &H, c, len); - c = X509_find_entity_property(&H, &X509_CN, ic, &len); - print_out((char *)"country=", &H, c, len); - c = X509_find_entity_property(&H, &X509_EN, ic, &len); - print_out((char *)"email=", &H, c, len); - c = X509_find_entity_property(&H, &X509_MN, ic, &len); - print_out((char *)"Common Name=", &H, c, len); - printf("\n"); - - ic = X509_find_validity(&H); - c = X509_find_start_date(&H, ic); - print_date((char *)"start date= ", &H, c); - c = X509_find_expiry_date(&H, ic); - print_date((char *)"expiry date=", &H, c); - printf("\n"); - - pt = X509_extract_public_key(&H, &CERTKEY); - - if (pt.type == 0) - { - printf("Not supported by library\n"); - return 0; - } - - if (pt.type == X509_ECC) - { - printf("EXTRACTED ECDSA PUBLIC KEY= \n"); - OCT_output(&CERTKEY); - } - if (pt.type == X509_ECD) - { - printf("EXTRACTED EDDSA PUBLIC KEY= \n"); - OCT_output(&CERTKEY); - } - if (pt.type == X509_RSA) - { - printf("EXTRACTED RSA PUBLIC KEY= \n"); - OCT_output(&CERTKEY); - } - - printf("\n"); - - /* Check CA signature */ - - if (ca.type == X509_ECC) - { - printf("Checking CA's ECDSA Signature on Cert\n"); - res = NIST256::ECP_PUBLIC_KEY_VALIDATE(&CAKEY); - if (res != 0) - printf("ECP Public Key is invalid!\n"); - else printf("ECP Public Key is Valid\n"); - - sha = 0; - - if (st.hash == X509_H256) sha = SHA256; - if (st.hash == X509_H384) sha = SHA384; - if (st.hash == X509_H512) sha = SHA512; - if (sha == 0) - { - printf("Hash Function not supported\n"); - return 0; - } - - if (NIST256::ECP_VP_DSA(sha, &CAKEY, &H, &R, &S) != 0) - printf("***ECDSA Verification Failed\n"); - else - printf("ECDSA Signature/Verification succeeded \n"); - } - - if (ca.type == X509_ECD) - { - printf("Checking CA's EDDSA Signature on Cert\n"); - if (ca.curve == USE_ED25519) - { - if (!Ed25519::EDDSA_VERIFY(false,&CAKEY,NULL,&H,&SIG)) - { - printf("***EDDSA Verification Failed\n"); - return 0; - } - else - printf("EDDSA Signature/Verification succeeded \n"); - } - if (ca.curve == USE_ED448) - { - if (!Ed448::EDDSA_VERIFY(false,&CAKEY,NULL,&H,&SIG)) - { - printf("***EDDSA Verification Failed\n"); - return 0; - } - else - printf("EDDSA Signature/Verification succeeded \n"); - } - } - - if (ca.type == X509_RSA) - { - printf("Checking CA's RSA Signature on Cert\n"); - PK.e = 65537; // assuming this! - RSA2048::RSA_fromOctet(PK.n, &CAKEY); - - sha = 0; - - if (st.hash == X509_H256) sha = SHA256; - if (st.hash == X509_H384) sha = SHA384; - if (st.hash == X509_H512) sha = SHA512; - if (sha == 0) - { - printf("Hash Function not supported\n"); - return 0; - } - core::PKCS15(sha, &H, &HP); - - RSA_ENCRYPT(&PK, &SIG, &HH); - - if (OCT_comp(&HP, &HH)) - printf("RSA Signature/Verification succeeded \n"); - else - printf("***RSA Verification Failed\n"); - - } - - return 0; -} diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/x509.cpp b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/x509.cpp deleted file mode 100644 index ea0d07f..0000000 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/x509.cpp +++ /dev/null @@ -1,1170 +0,0 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* CORE X.509 Functions */ - -#include -#include "core.h" // for octet support only -#include "x509.h" - -// Some ASN.1 tags - -#define ANY 0x00 -#define SEQ 0x30 -#define OID 0x06 -#define INT 0x02 -#define NUL 0x05 -#define ZER 0x00 -#define UTF 0x0C -#define UTC 0x17 -#define GTM 0x18 -#define LOG 0x01 -#define BIT 0x03 -#define OCT 0x04 -#define STR 0x13 -#define SET 0x31 -#define IA5 0x16 -#define EXT 0xA3 -#define DNS 0x82 - -// Define some OIDs - -// Elliptic Curve with SHA256 -static unsigned char eccsha256[8] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02}; -static octet ECCSHA256 = {8, sizeof(eccsha256), (char *)eccsha256}; - -// Elliptic Curve with SHA384 -static unsigned char eccsha384[8] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03}; -static octet ECCSHA384 = {8, sizeof(eccsha384), (char *)eccsha384}; - -// Elliptic Curve with SHA512 -static unsigned char eccsha512[8] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x04}; -static octet ECCSHA512 = {8, sizeof(eccsha512), (char *)eccsha512}; - -// EC Public Key - Elliptic curve public key cryptography -static unsigned char ecpk[7] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01}; -static octet ECPK = {7, sizeof(ecpk), (char *)ecpk}; - -// ED25519 Public Key - Elliptic curve EdDSA (Ed25519) Signature -static unsigned char edpk25519[3] = {0x2B, 0x65, 0x70}; -static octet EDPK25519 = {3, sizeof(edpk25519),(char *)edpk25519}; - -// ED448 Public Key - Elliptic curve EdDSA (Ed448) Signature -static unsigned char edpk448[3] = {0x2B, 0x65, 0x71}; -static octet EDPK448 = {3, sizeof(edpk448),(char *)edpk448}; - -// C25519 curve -static unsigned char prime25519[9] = {0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01}; /*****/ -static octet PRIME25519 = {9, sizeof(prime25519), (char *)prime25519}; - -// NIST256 curve - (NIST) P-256 -static unsigned char prime256v1[8] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07}; -static octet PRIME256V1 = {8, sizeof(prime256v1), (char *)prime256v1}; - -// NIST384 curve -static unsigned char secp384r1[5] = {0x2B, 0x81, 0x04, 0x00, 0x22}; -static octet SECP384R1 = {5, sizeof(secp384r1), (char *)secp384r1}; - -// NIST521 curve -static unsigned char secp521r1[5] = {0x2B, 0x81, 0x04, 0x00, 0x23}; -static octet SECP521R1 = {5, sizeof(secp521r1), (char *)secp521r1}; - -// RSA Public Key - RSAES-PKCS1-v1_5 -static unsigned char rsapk[9] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01}; -static octet RSAPK = {9, sizeof(rsapk), (char *)rsapk}; - -// RSA with SHA256 -static unsigned char rsasha256[9] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b}; -static octet RSASHA256 = {9, sizeof(rsasha256), (char *)rsasha256}; - -// RSA with SHA384 -static unsigned char rsasha384[9] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c}; -static octet RSASHA384 = {9, sizeof(rsasha384), (char *)rsasha384}; - -// RSA with SHA512 -static unsigned char rsasha512[9] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0d}; -static octet RSASHA512 = {9, sizeof(rsasha512), (char *)rsasha512}; - -// DILITHIUM3 -static unsigned char dilithium3[11] = {0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0B, 0x07, 0x06, 0x05}; -static octet DILITHIUM3 = {11, sizeof(dilithium3), (char *)dilithium3}; - - -// Cert details -// countryName -static unsigned char cn[3] = {0x55, 0x04, 0x06}; -octet X509_CN = {3, sizeof(cn), (char *)cn}; - -// stateName -static char sn[3]= {0x55,0x04,0x08}; -octet X509_SN= {3,sizeof(sn),sn}; - -// localName -static char ln[3]= {0x55,0x04,0x07}; -octet X509_LN= {3,sizeof(ln),ln}; - -// orgName -static unsigned char on[3] = {0x55, 0x04, 0x0A}; -octet X509_ON = {3, sizeof(on), (char *)on}; - -// unitName -static char un[3]= {0x55,0x04,0x0B}; -octet X509_UN= {3,sizeof(un),un}; - -// myName -static char mn[3]= {0x55,0x04,0x03}; -octet X509_MN= {3,sizeof(mn),mn}; - -// emailName -static unsigned char en[9] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01}; -octet X509_EN = {9, sizeof(en), (char *)en}; - -// Extensions -// Alt Name -static char an[3]={0x55,0x1D,0x11}; -octet X509_AN = {3, sizeof(an),an}; - -// Key Usage -static char ku[3]={0x55,0x1d,0x0f}; -octet X509_KU = {3,sizeof(ku),ku}; - -// Basic Constraints -static char bc[3]={0x55,0x1d,0x13}; -octet X509_BC = {3,sizeof(bc),bc}; - -/* Check expected TAG and return ASN.1 field length. If tag=0 skip check. */ -static int getalen(int tag, char *b, int j) -{ - int len; - - if (tag != 0 && (unsigned char)b[j] != tag) return -1; // not a valid tag - j++; - - if ((unsigned char)b[j] == 0x81) - { - j++; - len = (unsigned char)b[j]; - } - else if ((unsigned char)b[j] == 0x82) - { - j++; - len = 256 * b[j++]; - len += (unsigned char)b[j]; - } - else - { - len = (unsigned char)b[j]; - if (len > 127) return -1; - } - return len; -} - -/* jump over length field */ -static int skip(int len) -{ - if (len < 128) return 2; - if (len < 256) return 3; - return 4; -} - -/* round length up to nearest 8-byte length */ -static int bround(int len) -{ - if (len % 8 == 0) return len; - return len + (8 - len % 8); - -} - -// Input private key in PKCS#8 format -// e.g. openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -// e.g. openssl req -x509 -nodes -days 3650 -newkey ec:<(openssl ecparam -name prime256v1) -keyout key.pem -out ecdsacert.pem -// extract private key from uncompressed key.pem into octet -// For RSA octet = p|q|dp|dq|c where pk->len is multiple of 5 -// For ECC octet = k -pktype X509_extract_private_key(octet *c,octet *pk) -{ - int i, j, k, fin, len, rlen, flen, tlen, sj, ex; - char soid[12]; - octet SOID = {0, sizeof(soid), soid}; - pktype ret; - - ret.type = 0; - ret.hash = 0; - j=0; - - len = getalen(SEQ, c->val, j); // Check for expected SEQ clause, and get length - if (len < 0) return ret; // if not a SEQ clause, there is a problem, exit - j += skip(len); // skip over length to clause contents. Add len to skip clause - - if (len + j != c->len) return ret; - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over serial number clause (if there is one) - - len = getalen(SEQ, c->val, j); - if (len < 0) return ret; - j += skip(len); - -// extract OID - len = getalen(OID, c->val, j); - if (len < 0) return ret; - j += skip(len); - - fin = j + len; - if (len>SOID.max) return ret; - SOID.len = len; - for (i = 0; j < fin; j++) - SOID.val[i++] = c->val[j]; - j=fin; - - if (OCT_comp(&EDPK25519, &SOID)) - { // Its an Ed25519 key - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - rlen=32; - if (rlen>pk->max) return ret; - pk->len=rlen; - for (i=0;ival[i]=0; - for (i=rlen-len;ival[i]=c->val[j++]; - ret.type = X509_ECD; - ret.curve = USE_ED25519; - } - if (OCT_comp(&EDPK448, &SOID)) - { // Its an Ed448 key - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - rlen=57; - if (rlen>pk->max) return ret; - pk->len=rlen; - for (i=0;ival[i]=0; - for (i=rlen-len;ival[i]=c->val[j++]; - ret.type = X509_ECD; - ret.curve = USE_ED448; - } - if (OCT_comp(&DILITHIUM3, &SOID)) - { // Its a DILITHIUM3 key - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - tlen=len; - if (tlen>pk->max) - tlen=pk->max; - for (i=0;ival[i]=c->val[j++]; - pk->len=tlen; - ret.type=X509_PQ; - ret.curve=8*tlen; - } - if (OCT_comp(&ECPK, &SOID)) - { // Its an ECC key - len = getalen(OID, c->val, j); - if (len < 0) return ret; - j += skip(len); - - fin = j + len; - if (len>SOID.max) return ret; - SOID.len = len; - for (i = 0; j < fin; j++) - SOID.val[i++] = c->val[j]; - j=fin; - - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - - len = getalen(SEQ, c->val, j); - if (len < 0) return ret; - j += skip(len); - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over version - - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - - ret.type = X509_ECC; - if (OCT_comp(&PRIME256V1, &SOID)) { - ret.curve = USE_NIST256; - rlen=32; - } - if (OCT_comp(&SECP384R1, &SOID)) { - ret.curve = USE_NIST384; - rlen=48; - } - if (OCT_comp(&SECP521R1, &SOID)) { - rlen=66; - ret.curve = USE_NIST521; - } - if (rlen>pk->max) - { - ret.curve=0; - return ret; - } - pk->len=rlen; - for (i=0;ival[i]=0; - for (i=rlen-len;ival[i]=c->val[j++]; - - } - if (OCT_comp(&RSAPK, &SOID)) - { // Its an RSA key - len = getalen(NUL, c->val, j); - if (len<0) return ret; - j += skip(len); - - len = getalen(OCT, c->val, j); - if (len < 0) return ret; - j += skip(len); - - len = getalen(SEQ, c->val, j); - if (len < 0) return ret; - j += skip(len); - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over version - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over n - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over e - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over d - - - len = getalen(INT, c->val, j); - if (len < 0) return ret; - j += skip(len); // get p - - if (c->val[j] == 0) - { // skip leading zero - j++; - len--; - } - rlen=bround(len); - - if (5*rlen>pk->max) - return ret; - - for (i=0;ival[i]=0; - - for (i=rlen-len;ival[i]=c->val[j++]; - - flen=rlen; // should be same length for all - for (k=1;k<5;k++) - { - len = getalen(INT,c->val,j); - if (len<0) return ret; - j += skip(len); // get q,dp,dq,c - if (c->val[j] == 0) - { // skip leading zero - j++; - len--; - } - rlen=bround(len); - if (rlen!=flen) return ret; - for (i=0;ival[i]=0; - for (i=rlen-len;ival[k*flen+i]=c->val[j++]; - } - pk->len=5*flen; - ret.type = X509_RSA; - ret.curve = 16 * flen; - } - return ret; -} - -// Input signed cert as octet, and extract signature -// Return 0 for failure, ECC for Elliptic Curve signature, RSA for RSA signature -// Note that signature type is not provided here - its the type of the public key that -// is used to verify it that matters, and which determines for example the curve to be used! - -pktype X509_extract_cert_sig(octet *sc, octet *sig) -{ - int i, j, k, fin, len, rlen, sj, ex; - char soid[12]; - octet SOID = {0, sizeof(soid), soid}; - pktype ret; - - ret.type = 0; - ret.hash = 0; - - j = 0; - - len = getalen(SEQ, sc->val, j); // Check for expected SEQ clause, and get length - if (len < 0) return ret; // if not a SEQ clause, there is a problem, exit - j += skip(len); // skip over length to clause contents. Add len to skip clause - - if (len + j != sc->len) return ret; - - len = getalen(SEQ, sc->val, j); - if (len < 0) return ret; - j += skip(len) + len; // jump over cert to signature OID - - len = getalen(SEQ, sc->val, j); - if (len < 0) return ret; - j += skip(len); - - sj = j + len; // Needed to jump over signature OID - -// dive in to extract OID - len = getalen(OID, sc->val, j); - if (len < 0) return ret; - j += skip(len); - - fin = j + len; - if (len>SOID.max) return ret; - SOID.len = len; - for (i = 0; j < fin; j++) - SOID.val[i++] = sc->val[j]; - - // check OID here.. - if (OCT_comp(&EDPK25519, &SOID)) - { - ret.type = X509_ECD; - ret.hash = X509_H512; - } - if (OCT_comp(&EDPK448, &SOID)) - { - ret.type = X509_ECD; - ret.hash = X509_SHAKE256; - } - if (OCT_comp(&ECCSHA256, &SOID)) - { - ret.type = X509_ECC; - ret.hash = X509_H256; - } - if (OCT_comp(&ECCSHA384, &SOID)) - { - ret.type = X509_ECC; - ret.hash = X509_H384; - } - if (OCT_comp(&ECCSHA512, &SOID)) - { - ret.type = X509_ECC; - ret.hash = X509_H512; - } - if (OCT_comp(&RSASHA256, &SOID)) - { - ret.type = X509_RSA; - ret.hash = X509_H256; - } - if (OCT_comp(&RSASHA384, &SOID)) - { - ret.type = X509_RSA; - ret.hash = X509_H384; - } - if (OCT_comp(&RSASHA512, &SOID)) - { - ret.type = X509_RSA; - ret.hash = X509_H512; - } - if (OCT_comp(&DILITHIUM3, &SOID)) - { - ret.type = X509_PQ; - ret.hash = 0; // hash type is implicit - } - if (ret.type == 0) return ret; // unsupported type - - j = sj; // jump out to signature - - len = getalen(BIT, sc->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); - j++; - len--; // skip bit shift (hopefully 0!) - - if (ret.type==X509_ECD) - { - if (len>sig->max) - { - ret.type=0; - return ret; - } - sig->len = len; - i = 0; - fin = j + len; - for (; j < fin; j++) - sig->val[i++] = sc->val[j]; - - if (ret.hash == X509_H512) ret.curve = USE_ED25519; - if (ret.hash == X509_SHAKE256) ret.curve = USE_ED448; - } - if (ret.type == X509_ECC) - { - // signature in the form (r,s) - len = getalen(SEQ, sc->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); - - // pick up r part of signature - len = getalen(INT, sc->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); - - if (sc->val[j] == 0) - { - // skip leading zero - j++; - len--; - } - rlen = bround(len); - - ex = rlen - len; - - if (2*rlen>sig->max) - { - ret.type=0; - return ret; - } - sig->len = 2 * rlen; - - i = 0; - for (k = 0; k < ex; k++) - sig->val[i++] = 0; - - fin = j + len; - for (; j < fin; j++) - sig->val[i++] = sc->val[j]; - - // pick up s part of signature - len = getalen(INT, sc->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); - - if (sc->val[j] == 0) - { - // skip leading zeros - j++; - len--; - } - rlen = bround(len); - ex = rlen - len; - for (k = 0; k < ex; k++) - sig->val[i++] = 0; - - fin = j + len; - for (; j < fin; j++) - sig->val[i++] = sc->val[j]; - - if (ret.hash == X509_H256) ret.curve = USE_NIST256; - if (ret.hash == X509_H384) ret.curve = USE_NIST384; - if (ret.hash == X509_H512) ret.curve = USE_NIST521; - } - if (ret.type == X509_RSA) - { - rlen = bround(len); - ex = rlen - len; - - if (rlen>sig->max) - { - ret.type=0; - return ret; - } - sig->len = rlen; - i = 0; - for (k = 0; k < ex; k++) - sig->val[i++] = 0; - - fin = j + len; - for (; j < fin; j++) - sig->val[i++] = sc->val[j]; - - ret.curve = 8*rlen; - } - if (ret.type == X509_PQ) - { - if (len>sig->max) - { - ret.type=0; - return ret; - } - sig->len = len; - fin = j + len; - for (i=0; j < fin; j++) - sig->val[i++] = sc->val[j]; - ret.curve = 8*len; - } - return ret; -} - -// Extract certificate from signed cert -int X509_extract_cert(octet *sc, octet *cert) -{ - int i, j, fin, len, k; - - j = 0; - len = getalen(SEQ, sc->val, j); - - if (len < 0) return 0; - j += skip(len); - - k = j; - - len = getalen(SEQ, sc->val, j); - if (len < 0) return 0; - j += skip(len); - - fin = j + len; - if (fin-k>cert->max) return 0; - - cert->len = fin - k; - - for (i = k; i < fin; i++) cert->val[i - k] = sc->val[i]; - - return 1; -} - -// find index to start of ASN.1 raw public key, and return its length -int X509_find_public_key(octet *c,int *ptr) -{ - int i, j, k, fin, len, sj; - - j = 0; - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len); - - if (len + j != c->len) return 0; - - len = getalen(ANY, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; //jump over version clause - - len = getalen(INT, c->val, j); - - if (len > 0) j += skip(len) + len; // jump over serial number clause (if there is one) - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; // jump over signature algorithm - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; // skip issuer - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; // skip validity - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; // skip subject - - k=j; - len = getalen(SEQ, c->val, j); // look ahead to determine length - if (len < 0) return 0; - j += skip(len); // - - fin=j+len; - *ptr=k; - return fin-k; -} - -// get Public Key details from ASN.1 description -pktype X509_get_public_key(octet *c,octet *key) -{ - int i, j, fin, len, sj, ptr; - char koid[12]; /*****/ - octet KOID = {0, sizeof(koid), koid}; - pktype ret; - - ret.type = ret.hash = 0; - ret.curve = -1; - - j=0; - - len = getalen(SEQ, c->val, j); - if (len < 0) return ret; - j += skip(len); // - - len = getalen(SEQ, c->val, j); - if (len < 0) return ret; - j += skip(len); - -// ** Maybe dive in and check Public Key OIDs here? -// ecpublicKey & prime256v1, secp384r1 or secp521r1 for ECC -// rsapublicKey for RSA - - sj = j + len; - - len = getalen(OID, c->val, j); - if (len < 0) return ret; - j += skip(len); - - fin = j + len; - if (len>KOID.max) return ret; - KOID.len = len; - for (i = 0; j < fin; j++) - KOID.val[i++] = c->val[j]; - - ret.type = 0; - if (OCT_comp(&ECPK, &KOID)) ret.type = X509_ECC; - if (OCT_comp(&EDPK25519, &KOID)) {ret.type = X509_ECD; ret.curve=USE_ED25519;} - if (OCT_comp(&EDPK448, &KOID)) {ret.type = X509_ECD; ret.curve=USE_ED448;} - if (OCT_comp(&RSAPK, &KOID)) ret.type = X509_RSA; - if (OCT_comp(&DILITHIUM3, &KOID)) ret.type = X509_PQ; - - if (ret.type == 0) return ret; - - if (ret.type == X509_ECC) - { - // which elliptic curve? - len = getalen(OID, c->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); - - fin = j + len; - if (len>KOID.max) - { - ret.type=0; - return ret; - } - KOID.len = len; - for (i = 0; j < fin; j++) - KOID.val[i++] = c->val[j]; - - if (OCT_comp(&PRIME25519, &KOID)) ret.curve = USE_ED25519; /*****/ - if (OCT_comp(&PRIME256V1, &KOID)) ret.curve = USE_NIST256; - if (OCT_comp(&SECP384R1, &KOID)) ret.curve = USE_NIST384; - if (OCT_comp(&SECP521R1, &KOID)) ret.curve = USE_NIST521; - } - - j = sj; // skip to actual Public Key - - len = getalen(BIT, c->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); // - j++; - len--; // skip bit shift (hopefully 0!) - -// extract key - if (ret.type == X509_ECC || ret.type == X509_ECD || ret.type == X509_PQ) - { - if (len>key->max) - { - ret.type=0; - return ret; - } - key->len = len; - fin = j + len; - for (i = 0; j < fin; j++) - key->val[i++] = c->val[j]; - } - if (ret.type == X509_PQ) - ret.curve=8*len; - if (ret.type == X509_RSA) - { - // Key is (modulus,exponent) - assume exponent is 65537 - len = getalen(SEQ, c->val, j); - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); // - - len = getalen(INT, c->val, j); // get modulus - if (len < 0) - { - ret.type = 0; - return ret; - } - j += skip(len); // - if (c->val[j] == 0) - { - j++; - len--; // remove leading zero - } - if (len>key->max) - { - ret.type=0; - return ret; - } - key->len = len; - fin = j + len; - for (i = 0; j < fin; j++) - key->val[i++] = c->val[j]; - - ret.curve = 8 * len; - } - return ret; -} - -// Extract Public Key from inside Certificate -pktype X509_extract_public_key(octet *c, octet *key) -{ - int ptr=0; - int pklen=X509_find_public_key(c,&ptr); - octet CC={pklen,pklen,&c->val[ptr]}; - return X509_get_public_key(&CC,key); -} - -// Find pointer to main sections of cert, before extracting individual field -// Find index to issuer in cert, and its length -// This is the certificate DER encoded distinguished issuer name -int X509_find_issuer(octet *c,int *flen) -{ - int j, len; - *flen=0; - j = 0; - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len); - - if (len + j != c->len) return 0; - - len = getalen(ANY, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; //jump over version clause - - len = getalen(INT, c->val, j); - - if (len > 0) j += skip(len) + len; // jump over serial number clause (if there is one) - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; // jump over signature algorithm - - len=getalen(SEQ,c->val,j); - *flen=len+skip(len); // length of issuer - - return j; -} - -// Find index to validity period -int X509_find_validity(octet *c) -{ - int j, len; - j = X509_find_issuer(c,&len); - j+=len; // skip issuer - - //len = getalen(SEQ, c->val, j); - //if (len < 0) return 0; - //j += skip(len) + len; // skip issuer - - return j; -} - -// Find index to subject in cert, and its length -// This is the certificate DER encoded distinguished subject name -int X509_find_subject(octet *c,int *flen) -{ - int j, len; - *flen=0; - j = X509_find_validity(c); - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len) + len; // skip validity - - len=getalen(SEQ,c->val,j); - *flen=len+skip(len); - - return j; -} - -int X509_self_signed(octet *c) -{ - int i,m,slen,ilen; - int ksub=X509_find_subject(c,&slen); - int kiss=X509_find_issuer(c,&ilen); - - if (slen!=ilen) return 0; - - //int sublen=getalen(SEQ,c->val,ksub); - //int isslen=getalen(SEQ,c->val,kiss); - //if (isslen!=sublen) return 0; - //ksub+=skip(sublen); - //kiss+=skip(isslen); - for (i=m=0;ival[i+ksub] - c->val[i+kiss]; - if (m!=0) return 0; - return 1; -} - -// NOTE: When extracting cert information, we actually return just an index to the data inside the cert, and maybe its length -// So no memory is assigned to store cert info. It is the callers responsibility to allocate such memory if required, and copy -// cert information into it. - -// Find entity property indicated by SOID, given start of issuer or subject field. Return index in cert, flen=length of field - -int X509_find_entity_property(octet *c, octet *SOID, int start, int *flen) -{ - int i, j, k, fin, len, tlen; - char foid[50]; /*****/ - octet FOID = {0, sizeof(foid), foid}; - - j = start; - - tlen = getalen(SEQ, c->val, j); - if (tlen < 0) return 0; - j += skip(tlen); - - for (k = j; j < k + tlen;) - { - // search for Owner OID - len = getalen(SET, c->val, j); - if (len < 0) return 0; - j += skip(len); - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len); - len = getalen(OID, c->val, j); - if (len < 0) return 0; - j += skip(len); - fin = j + len; // extract OID - if (len>FOID.max) return 0; - FOID.len = len; - for (i = 0; j < fin; j++) - FOID.val[i++] = c->val[j]; - len = getalen(ANY, c->val, j); // get text, could be any type - if (len < 0) return 0; - - j += skip(len); - if (OCT_comp(&FOID, SOID)) - { - // if its the right one return - *flen = len; - return j; - } - j += len; // skip over it - } - *flen = 0; /*****/ - return 0; -} - -// Find start date of certificate validity period -int X509_find_start_date(octet *c, int start) -{ - int j, len; - j = start; - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len); - - len = getalen(UTC, c->val, j); - if (len < 0) - { // could be generalised time - len = getalen(GTM, c->val, j); - if (len<0) return 0; - j += skip(len); - j += 2; // skip century - } - else j += skip(len); - return j; -} - -// Find expiry date of certificate validity period -int X509_find_expiry_date(octet *c, int start) -{ - int j, len; - j = start; - - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len); - - len = getalen(UTC, c->val, j); - if (len < 0) - { - len = getalen(GTM,c->val,j); - if (len<0) return 0; - } - j += skip(len) + len; - - len = getalen(UTC, c->val, j); - if (len < 0) - { - len = getalen(GTM, c->val,j); - if (len<0) return 0; - j+=skip(len); - j+=2; // skip century - } - else j += skip(len); - - return j; -} - -int X509_find_extensions(octet *c) -{ - int j, len; - j=X509_find_subject(c,&len); - j+=len; // skip subject - - //len = getalen(SEQ, c->val, j); - //if (len<0) return 0; - //j += skip(len)+len; // skip subject - - len = getalen(SEQ, c->val, j); - if (len<0) return 0; - j += skip(len)+len; // skip public key - - if (j>=c->len) return 0; - return j; -} - -int X509_find_extension(octet *c, octet *SOID, int start, int *flen) -{ - int i, j, k, fin, len, tlen, nj; - char foid[50]; /*****/ - octet FOID = {0, sizeof(foid), foid}; - - j = start; - - tlen = getalen(EXT, c->val, j); - if (tlen < 0) return 0; - j += skip(tlen); - - tlen = getalen(SEQ, c->val, j); - if (tlen < 0) return 0; - j += skip(tlen); - - for (k = j; j < k + tlen;) - { - // search for Owner OID - len = getalen(SEQ, c->val, j); - if (len < 0) return 0; - j += skip(len); nj=j+len; - len = getalen(OID, c->val, j); - if (len < 0) return 0; - j += skip(len); - fin = j + len; // extract OID - if (len>FOID.max) return 0; - FOID.len = len; - for (i = 0; j < fin; j++) - FOID.val[i++] = c->val[j]; - if (OCT_comp(&FOID, SOID)) - { - // if its the right one return - *flen = nj-j; - return j; - } - j = nj; // skip over this extension - } - *flen = 0; /*****/ - return 0; -} - -// return 1 if name found, else 0, where name is URL -// input cert, and pointer to SAN extension -// Takes wild-card into consideration -int X509_find_alt_name(octet *c,int start,char *name) -{ - int i,j,len,k,m,tlen,cmp,tag; - - if (start==0) return 0; - j=start; - tlen = getalen(OCT, c->val, j); - if (tlen < 0) return 0; - j += skip(tlen); - - tlen = getalen(SEQ, c->val, j); - if (tlen < 0) return 0; - j += skip(tlen); - - for (k=j;jval[j]; tag&=0xff; - len = getalen(ANY, c->val, j); - if (len < 0) return 0; - j += skip(len); // ?? If its not dns, skip over it j+=len - if (tag!=DNS) - { // only interested in URLs - j+=len; - continue; - } - cmp=1; m=0; - if (c->val[j]=='*') - { // wildcard - j++; len--; // skip over * - while (name[m]!='.' && name[m]!=0) // advance to first . - m++; - } - for (i=0;ival[j++]!=name[m++]) // mismatch - cmp=0; - } - if (name[m]!=0) cmp=0; // name should have ended - if (cmp) return 1; - } - return 0; -} - -

Z!IA!Yq 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 z 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%0Auq#b#=*0ZoF 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

rR|HQDus7Fg;clPxxMtEDb6S)HM!mU_3z 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%0A?YltdC=w2ra}_-Z#J&1^M?3a1efv1-4@7;3 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 =s>l2h3^O%L-< zMBUf7o^7kzJoECxQ&YBR1+2MO+Ivqct?ceiUUx8a;vHhmO>m!GTif2ppgp-f`C~fU zP+q1w@!zHQFxBBt*T1@c0;YQ7_@A!-TlLkwg1V(}MXgtR7S!gjx^4QkaS^Yt{NJkj zA>{MP$N%$FV15A(YlLJYVEOi`hM$7saX@~GWaybBd=L^p1(%Ek-ZU8|Ll}41bn~(nS}^%3BuNT>3NlLgDaa_{r;woXehLYQdmf}a z>O)JN3d=kX6qxW+P+?kWlAnSsP4ZJnU^+jABtgMXK|y7H3ak)?=}Y{IC=-}CsOYDl zltTC^Y~dmhS&*$nX7E!8YsgCEW(Gd0MfV&vo+WA6INZ!qZ`*6rR#t0u9hFD+F17so zYot77eL3c@#;Yh`*}(p#5G-a_sLnchn7ymNO|oX#4b^-5tUpd`G@UbSuYSXhvv{Df zL8HZw*x523DW;mXzSGJCGk)r!WibbC@-@8@zt_SYbuoMM~l;Tu|lmjt>#7j`%M`;3u9;KKZJ5o`c)#VD7QYKu9Y(cw+i8aGl zmTL-U?#rJ1?As0=SfybxwpXu8(Eo|sjSgMTf#Ro}>$_}QgS|t33{-r=38dYKuFFPj z9}4u_&q%4{%>l#I)sC&r?F-H?S=Xj~V;j)rtBX?G>-e~DV;WrQ31S|u`|y6KFXYfz zcRTP1>}{U1@I%R0V7hXKQrmWan=dy9Xs-m9V{4s0zf1szq=5ETEEZ@#n47-SG7P-l zJ5}lX8M``J-MksZ1+12918k#WK-*T=V{%{cK>UwS?ybLf2QTX_GbOH8@kpKn6(ul) zNv`H`CjCm}|2=0?S0dAMCb1Hkku$sbIm7?yI1@`zEEXc#vrCqccu4mdXtw6R=T!H*=eB+IF&}ZuSGPngHj1w`a7Eivf{yr|**q(;Sq2$!z-3dlu-OJ?7i@vGc$lPoJ1qV~>Dm z=k(uhtuq$1yW6t^O*R=c?-Jm&P+ta$ol2WJejWkzf(9PcEISX5Jeo3pUs!$Mtx`Kc zCQNgHw2rC-Cb>V)nbapA)s?&hB)b0`numbA`y8rYGx7HvQ8}2+Uf6&2a*P5uB9KaqWCUYHNk#=qL@0$15g8x$U zb@cE3){J-9TH1#sC3HCe+Ff63+L@IJIxX_`OL1KS_K3VU8`H8Bk;z!T@Eo{X7c!ixOF+nwz4qoJZ?c&_#F?fHa?oegy*ED?Rn6?GJmy3g3)pmmLpxnKK z#&AH^O0@#^l-}TM#ipCx-Mzs`qxYr5a|n6}(taH`rLhZ`w08Qm#usy6AGNjpI30KlIwhe^^bZW=oj_4k7D`NuuDv}y3z)9G(r*4Dd*FYv@0{9ROMsd_ zN6%?`1sI;xxL*CXU%}I%s*4k!y#$?}q?!r$$g(3vTQTjWYWEF?I(iHZ)|nq`=w0R$$C)0Q7AsWBCwykc-Bdp za&bsK)NW~${n7k4la8;NyC#s|{_+;}FYYYO^8Ml8-nXBiHoMn%)IiGHOG*8Kqu0>u zhMjeqcpket<7-ErHSfr-_PKfNuwAyVPBls3)c1d^{%-M7b@v7BgM@1is*bw5u~;-~ zA84?#)wd029;<~M?3AF)rK{}J_%&ALFH<=+kNeS{b&BEFxjz^dM%eg4FqTI_(B2OM z*!+ad5{QT?$YzL~rXYy>3n&QM`@sa(9V-|#k~0wUmBzUvund= z)w&%5f=1R7cTc$k!d6^7)#A<_u)fm`S7j%-Tl;OhxV(oTdA7CMQ|ZrW%)mKdr%y=s|#qb#-)$hmcAgtNkLkqfRF&cW0J8=POqlw*+^XP zI9b~!3P3%nDuGF^=5Z&z=e4D@5mn(|rWt;rR0d-&6zL9sBKRYafiNbfAQNFMkAf_R zF+kx(WQb8culW!WQDp8ygz&t6f-!o%+0VlV`W)!y`0aX1(-hcKmO`aZ1sLN`8LUX4 zvLp(F%1}89mB(=omErgaq$CRG{4Md%I#F2^x*iz34>f{CZ_aF;FgCgzsIDs%2~NfX zk=u@w56+GNm)q^mdaCOSp1HW;9cI5%Z!;}!me!%b~h>Z200F=u5;AafPfk5=bSy0LBga~A@?%+f_*pFk$fGB zCACQF)uokSD-Z++wtPJ{7Ib)~$cl=&2xPh+R4S?vnB=ND3Ngw3$D&x{|JztJfJOzy z$ti%5MFZ$rR0dO7Gyo?#;>}mtDQHi9zUM0QLI?!7AHs@p<#4j6F`k1qbWo)aL-K*0!z{?En6B@IG)k(AORP__rSh3p;ZfWf@0ugO4HrW!3s^C(rK%Y$8X_SPdbVI< z5%Q9F175xGq61^V%C4<{l-O)%U3g=g*7S-kh)b#_N3m->`0zd&mPY#$8`ND z|JMl^i!$k$q)Vhd#Pj{fqFD3%+gOxQ7lq`+po^judKQ(zR2G$~igLOrDu|Xvah((Y zpfk?7I4;kkvJ;S4)P`<7ffcmdX)Ssyw08>%gkSXEI45@UhlE9x&*}VR&WDyJq~POE zPmbn2jADOaH9nGV7sX}&I9g;no2$WU=|5;yJ4e;C0;d`4;u84#;!UsiiH%}^8TV{> z3)3`SfX;&YsY%z>KO9jt+QQao`3uqtp#7q2R|#; z*KF$6WqNz#!`gKxHM8q>|D*cLD`u7_uFX~3zi`8;h`$n9(t@AX!;kWXuHr&#^KW#rpW#yNglk7@d?e;ghSV3APL7WlS zc?sm#j+n}+d7}XRoY=3A0>SWxpw`7aO9SCi9tA;uU4cvoh7o}Lx?&1~{JPXRF{Dcu zP-Ku_mzWb%s!PLHM;Uc#lt!;hqZFD^fDDsH0ZBRZx-?2s90d?cr%RJ?$|yiS0cjMl zqn#bIt=Xf%Q*3MW>ab7@e7qP#im|m_@SJ2$e8uHU&yHrXFR}gm?iQu7^pYMHXQuUM z&D^N(d1bODclXEB2hL@`*1ET{JJ|JRkmlRsf(}D(tY)9}b&yPEFr6S^$JT`jb7D2y zKKyjkmUUCL@r*kDEoM8b+rH|vXI!m18cn^v-QoJ=gW+DjLkzvLIk(RydbjVG%m({6 zc1*wQ#Oh*|=fG4p!u$JKs@OZ$(eBXv0xx{e5Y_f4b1$!a+nZg!7jC0+&{LyBzn_i* zwCs$ZbIl!GtHzOE`^!|$?v z34<{a1(^zC!4zZ_jEN~oCX7+P8+!&K$rPCh&Q2v|-fRY<_uh)BRsBBdiUp*8I{B&-?M8d#XyODEL` zHtGRybzRtsf74g21@J*qWFz`-%a)^ujug;p-Gylx8H=9UfyGbl(EkAY^At#8QXFL& zcy(>Ztjp&>PoZcE$2A0aJu5of;_O3Ed-IbQR_~3#B8wjAr9?12Y|1;=T9x2YeEZM* z@~a@>#tGLSsTV<=4+n2FJ;n#8uV0h6XHQk}y!ufKO+)-m!HI0A0fwPN!8NXLGv9_c z!0zK;8sDGc0zRMI{uZ5g&E6&xI`4l0)=zc+>YN|~7iK>Y?c0A2^w^X%f9dj$p#I2! zYe;S;yjZghxnSmJy}R9qn1Kzsk|Qt#g764PKqx1Cb#Yza!Z46pPjHyE(HxkJ8uwf; ztOTfgj~w0L+fv|GKcy8aZ_~)eg7Ua>@F@E3?3-?xU{dIflw`f`V9Vunohj#T01M3l zr;uESCw7aO&Iiv7P<4=8bn4Y3@zalh)Kvqu%nX`>jvCV}E7BZ+X6lDFXFG?1kr^{X zk=*DOfkUpg*b5#_xKnug$WbtOd18Ju<3ZrXs~hY0<{kjueYlg5T>Ed8mC)??>54QY zOBdd7>CmcUmYrQ2^=LTH^KCeby{Z!f;_{~qg-yr+}*eaZ()N_;3eD=Bt zwNHZ!i@hB4JD&wVvKL&i*9ZlBZ+tYbaGVYbUlpELR+|IYYn3gz+yx}n_nnpEz8BQ} zk*21rT@K1N_YXV1sU;YH*TG#`{=~Xp4f;)g5Bl6Ox!CqzIatHy@#kDj00Wc#wq@V{ z2Bw7{My>hdbI)Wt8!plXnt-E9tmLO8qz&Vs2 zcaq2HwG47mU9j%}Dx9JVNz0JP;|c&_@DO zIncKCwDTV|WJeB(-v*6BXg_G0(I`D5136b2LvpEo)8`hC09(|>^yHK|ApNpW(}6LV8iKoW&u$iWt%H%%4SV&E*}$i@>dB@<9|6uN$rZ_19C12rMk%;Vd%1^GZVq@5zhrBjPxHXa z52@;5m%4*>eLbuOtX~V(eSc-5EI$)F%jaQ|`|~VLeezMg{>FFF@tJ*PHd_N}qY_+e z1`!eb5r`9vi7CkcVn+_hF$#QX2|=noMn*7>M2I3gB9y|52#{k$5`=RhxiG@kvZk8_ zwt@Z~S{AevN?)WTY^{IezC`Y)Bev%@nhh-Hd~P?`mj||~tkiCh^BinE87o*BY6>3C zJ*w0{j*a~Av8zV7zOxOOd1m&&2;&W4KGX!{f=Dh-i6VA+5-I{44)$>z_6zw@ud7O6 zl4D{w`7)X0{yYn!n&2FR)#`6#L42rD#)6j8MkP4U3nC);BalcK6H}0xFqTI_Ho_P( zE{I&{Jwoc+F*hNCG*3e29Ylz?V{~8|tybzA(7Cf~kIt^0>E=;|=0vgrO_CF-bV-+j z(Iz=Xkv_?(6dENb$k8cH5>Bh+B>ZGjdWG-JSffv$$^!0LM@w&NGQTF&wR7?rdlQ5o zE9-Fi%??nj)0RUS!xn(s`XwLvY+LYQ*xo^QM+|zqdM~TJZt4<~4?mQj9~Or6i|T}*<^S{iM_Adt;WypUwft}OOBK1N1Z!Pf z16HPADq7j*FtZ5$2rbYB#>5n)FO20;kl`>!=$Er#grq5w4&e@#R;bMsm`Z};6onBH zCaAzb5?IPGIE_$5N&G?kMxF)3DrkEPT$>~KLlg2xEp%g?&QIom;qeLolHi-jOcuhx`^u<>w-9zJ@E zWJW@Ycw0n8hmIg2mfoISNl{ym=+Lpl#*Xd`%!D?Uup7$)ZhP4>y=`kLl)A!*zFh=w z!e6(l2|hek?b}J{AtD9Tw|8W~0zet-Rz;;}*{9kZ`hH{lTi*leCT#RN^d^gqaf3;pHHSgC-(h`L53@ffJNq!3r+4d zVRzZ!dtkkx5nD9LVWXzqF4mqW$0!})K#)=V+p#>>AkTtty*<-8gFTbBcAwA@EG_Cd z_0#*09L`N0L#;LfuswQV>8hhUKxuoAICTCWmF4ii53C9_OJ2!hF971$+bW+~j~5M@ z7kzjc`{KB*k2@#Vc&Z`Lb&g^E^E~wo3g^F`J9|2!?%|VJVEQoly&6m&&WVC3Kgv4%1YmDm6hz* zP6Ks@>X@>QCH?58f3Y^Z`}ojX+q%23-@ZB-PuG51tC_#%an}KI^ULmLOX-m^?o!-2 z#tr5Y!5_h0ySY97Hp8-LOQ>g`(DEF&L`%FS1C8qyv_rM5BM zaWRs0CpdnY?;#ZzyEftYhL({1^R3wwau_T-uIuMNS-p$&)7oquaJ^Z&=L*q!*dv8yGG zl8MurB^|q3DzGa;sO)M<$F7zN>}pBJu9h;zRaOlOyV}uxDFK1>^9EK5EAllVE&Oe| zYXKY$tE#)^(CDsDd)F!IyW$8t(5C-@*SoIpzvm1e`hIhN^;P{It@mHQkC*#W-(=IL zWBh#wj80oPJ?1U{UN~cN)9o7F0%}Vh>(jjwj(h62*BWH?=1XM5>HOo1uB}`fq_25u zr|!rutt8C0s=eSDp!_&v*!L__)D0)6JHsF6|!PN;9g7w#m&) zX(PIC=kw-M^TWkCnHd@1b&f>3`}9zuy-U=gN6Z{2J5Tx5C%Mj(dt(6rs`@%FiqQww0(LzL#XptCIjYVP# zYBCa|sx-EKDwkEUh4oENMm76p&GJ5;@aexX-!2ayBeS=0H z^*YNx-(Sz~qg&Cc+qKv1GbVT5o!7Bp)m?tGS6{!rTE2e1etz&-87Xe1<5cLtPk(V} zXOFc{dAw&k$9EB_u)ZGZ)ZwUipw1PS>n{(_;_}lrZ-0H}$tBgeRkwH(Dzmva)K%)B zRlN?T)7KoSJ5mQ6U$sSTP$P}6{k(YEy;4-acV0B>*)}16M3>AqIZaOLJeh0F)2biN znfblKuv8+XJuNI}Ad!t3XPtbMEU4734?{7C!%a8xTZ{(2n z{OSE11Cs~#)V$o`>^Oru8~BHvKlV<){g$`X@xi>-uq4>LaBbx_*uJp6(DGpsi1AyR z!F>GY!oK(tOW>T>7@X-I7z|z}5r7Zo7x{2XpqA7<|^q0t2ERF5KXk z1rASGug+LFOlTbaExTK4AlP0Ot(p7P5G1+T4t(;eD|r5uH*<4Q2e5x|{HG;1BS7vH zJ@p zowY%u$qu)oD^kI@v*#&(cKHi1t;6j$_^2!Rde^*d;gd?>oU$)Buu(KvU@@QjNMHfx zgov6Ot}6gTtVd7uiai95J{#Z8Q9K+Jt)6k{#QC4szx5w3zvhijg>n`!c1M40bV9a4 zF#J(Rr#uRRYy$z*LkJmU8xX5IVFaMjNlcO11d##?f@}j3tUFQ8S%@UdkOCNE@`PJh zS=rh%_-Z6+mc9YqWxi_(B0qv*Vr1Vqju0almQij5!^Fr&1tumpf?;Ch5ln(mMliIE znk-0t<96mu-<+^goOx^mM}WU>1cP_5$|IQEvx`Qs^ZhR$vtBt>GL9V2J4JtP(+%x&8uq--wyTDOjTdfvb0m2mJ6uJ-%+T~YU5p0cexe-ZJWRT zeEYevTnhj&*>OB)g-?pAeX+)-Hm`fIqbG$Y_FeFvRcomKr~2IKS_dqSxr|a$|Grj9 zf`ja_+IPI4nsjays*|Dap4VX7Le1HI^-r_dleH!n2~Q}?-)3j$tM&8MCF@#LkSVlQcmw*%ox22oiv}am7QbTMI+f~s`GX^(fwf;75k*bFo7{Up* z+0cZ`8QxNu^?dgp_Nb(m<(Kmo0Z#f^QR=G)oUiN~!~Jfmu{}#p9tOr`tbhl_6)%G} zu$sS|p-I;@+>^xji}sCWxif0^hYFe;hC z`M}UV-!J#k`py}^cKT7+_P*ax;2yJ#-?$(dTrBZgZ*0S1n`v~})XbzQyY2qfsoxtuAH_E7A zc{zt4LVthxf4KabH-eSQo;~uz{_7)HFf4{Tg5^;VdK+YfY~+E$f7}MKva_cBcr-SG z!8ExM3?hmn7!sq7U>HIk!B9qp5e$h@M=&I&FkT@s>aYe8$_QppH-n5m<3u}$QA0*B zp9trmtCo9t9cLdj>ho+HFqn32yjq%*efp-*jW8O0Z*Itc)I{~jh1>BP?+(;5xET@K zMbC*na{Je<9s1{UFFd=JWw2(kW^wSm(e0DHbX;8CM%#v_u(&%~%qzQH$qqdK8eVwcNz3F^0P}2KK)fyrz2uSNJiuEUTFnFC!&r=*-BE zIyVoOKR+7YQ7vrC&i6A1sk3_;_J82#wO{QdEiVCJ*}LKTE<+M|ytW6*)86dUiRp3M zFlPRF_3RGkKQ%hRR%zokp;TY!2!>mp&TXZ3M(6F~v#%Pznyh*6`{Z5ijXku^#=o4t zdP))ZSxVhwbf&23(y*|eb?$2)o4Ij1zY*tHKNg(unwz&fY5}Nw|8(TR05h=rHD~OM zD@{N|@f)Rcxv!#3qw`)&1&{N`J9@;A0qV0H6Wr3gz?!c67EWo`6x1JQEAi7mw_bkB zYk-SFC3q4<3@%9Puih1@iy|;^Pgez5I>3I~fXWr7W}w5n6|F-HLxI~!&CD+?SApgi z?(TirbOvZQNsmrBloh2XJxaxvor0zzXnmv@cvu~(Qu|4>fnUvE^Efn3W?{%~0zCLN z4i&+i=tppAGd!kIkU3wYjNPi+bSr#*9L}kWla_SDcquFfh+8q2;MT;C8k{&zuW)fX{u9ZelYKT>g@Ry>_mU69YDBpZ2p< zy94?){W|(x%h6!)ki>ea+vbA>k9UT$98!RpS|3T1&ssO(TR%Zhg;F%c$@RE!=fzF_ z=Dy7wS_2TClv!t%KJa=pGrHZyL_Cl`x!3Z!+uQn2h&G0LFYcK;}LfMxr|$lMx;c5R?bC zMq4_q5q)Qrmhmiw(&Zo|%M>b9f1PFe4;YW`?VM(yX`ZHtts)`AuNCZfyt3|-W^Hi1bEUJ^9ko-M!qH9r^LV}U)WxZJLfnlVrJd|K9z91;JV zyGx}3d=8&yH5|F_Vm(ZGgmL+>GSFyw-DL$p=s%}qWauN1E7EsNle`P$E-y+Ox2u)E z=xV*CYAfcBXnvzdKI>ZTAIm>QMys#-WL4%c`KV6L9$%e`b9K2--qqe`nPA79PABE6ji3RSx99F zCP3qm0R9LB*{Q)4WF(9w%aFP7h+hBlcIw*G%hR(54L{gBn^mpW`3Z@_-FqSMs#=s-m{_Y|a+R}QMBnjkxZY@D%y%~#A zJVp`$O5e7md!N<@4&-!WIh-t%uAL|Br6l-#V(yN=$3uj4Ger*({Y+jDx&DPbM2OqT z;XBrss9&9RBujuexnd}ZWk1PZ^ZMElO8elEU+-(^38eNla|(j`nwJbw(${QktZBwo z*p*;{Twj9-xvwDs((sC9q4YJ{FFK$ONY~fwEpgv1(bv$dIl9un>Fvn^SR2K@M(>TK zn>E)(m!mAy!sl$12{EU^-QZB5_T8VxiOyY8&HOd5Z`043H<#WbWqPxjREFru&JYp6 zAAulmXD|f`gRx{8f<7fjKaRqexrDYfo!iDml0xp?I7I5tQb^Y0rE#KzL(ABn*87Mi zVQO*@$L5dVZBZIF1Nl)`sW>SyGg-Tval>M8e8Mxc?c936#Vqw!S;tiXc(mp}I_e3; z&1b+#66Ww0>*2C5QDISv=8RlBjG^ZBaC*!5f8N90EUc}CbnmFzU@4RyE``WF9D|4+ zj>V}x+@5ZJ!3w^TMBl?}hVLtvv2TzQ=79y|=s!4i{&^3rR92izHS_=1!?D(FA#G&D z)Et&%QwD`*M|w93#E9(*V*(1&8^(euNCb=}%aCdCh;|HzJ<`U@gYHvBw$dbWAD3aI zPL5-;UXBAqH#f5|r(54@i#DzPub0DHqcr^2%iBr2K)djWVPVp?s(}17SmGj}zT5FP z?mhpP^zr~2RbARy1891A0NMD)<>Y&L0Hv2(;@&Le)WY{kwqjVtUQ_Jxj*_R8xr^sx zpRiH>r5OB+HPXM-XC9UvHy213fHI$mA>~*#&tLP#@;_^jd&Bz_41dIUk2o(`hA`UW zZkBddUUXl@vcXcweOwC3x-%|98rY=}(ZMy~IBreX!x2b3j-wY?B;nufar;RJhj$Kb zai}zKl%--F^w+;}CAGg980P2S$olg=ocK(N+h6ewsRG*DfwQhEOl8v66~7^cTqOed zBl>d(7z?H#-C!(Ph6KVRlD1AdL|=?TEky3h7(nW{5iR`wPA1BG?J5>NRg9*BQ|amAxDWZviEoL|dx<)XS~hD^4kpKEmRA(kE0G zJ@tp{|K~XZwE*4&vDWzC>iTr=tP=~}m2rfb^kx!_;0zG~{1FJ!0>l&~48{s%2(uPo zEwo_J0wgJ9>acN>Kr*h7#>tAm6e0)&X#uo8JM{TqS_ZMix0ogvBSt@%7(< zMx8T9njP5(L^rOD?sfJ7FuQ*3Y-u^>{f4)XF=$nGs@!e52MqWS(EnrlN8oVnQiq7z zSHO&O^%JMhv<7SEt;=W33=_D*qN!w-b*4_da)`Zoo6)ysh=h{;goafJNReP=&rclm;_3h1V zp1uWzzD4VcE91e$pc8}gj@Aa>jab{-nQZ{3Yy2cj;NFddEV1d<66u?#r@VxN;nmA@oF`d$St zfxkh9OOPp5hLIF99Fy@Z4p3NCNb4iDW0(mMS}W>haO>K??oEqis8>~0FPkD~1tGoc z$skt)I~60=j$KJpJVx1a&b#!Qex-ODd&s#N;Gl^P&odWz={^YLuQ@%|rgt|!yX)S? zQ;NP(^)UE=Fox-SKer926*+#~f#$s;v}Zrt@|o+Z!SR2t_L#A7n6TSn|HoZ*SEv}iH5Gi;ufuyh zeRl3Oaj;IG>~r3Q>GO47CC=bJdB0F|=T^vyo}NnAKB|G|%ja!~S8yV|(o6hyG3q<3=l!wezM^#;Q-uEOJ#=e~Xgs&D2fas7!V{ z`SE$+7Vgr=(MDSzhH1JlUhwMN>vx)Ny*ig<>K^4B=1(!tTG&{Ff07kLSAV8+SpMPi zYu>0am)27H^-&`j-a3NY(WsF}LBe57AY*$N0cg}fZvYax(5OL-2uKEv8U+*?G-`-o z-LYIsMh&PFGmRROB)L&Tf{{lJ9FUC~7(f~|uwqCrk-z}~!>FSMmJxq*1Q()?8nixl zOQ?v`>EboT=Poyppa+5`{A|TJO%^G1;98$g#_nRi&B@ox7WgdJ+}!_QT6y|g)@P@M z6Ce3>=I^#E*PY;9!s2u)Uq-cAu>vq-oH|M|c^ByN*F4s_OnWn$OHpOIYE`W5UtR;} z-qo$EKi%}X4VFSy4RMIn$EA==F_gxsJ)GX>Uc+bAkTVYY#c7`k1g2*Ti$qrKL1vK3 zw6Iq5K!f2^J_Uxh1)qxayc$Km26}5JBR4E#Ff?1r_gXRmG+bV=XT*C?z&@ULbI6s` zAnJxr^iZdMVBIY}+Hnvs5DqHgNd9{!iEf$Qey4F9JwB5kk~N)MMpudBy{scXXXYg6S1a3=q|_1xMHI!fG?D4@p&^uulNRh@cn*kpL6D%nThS+w)fxftD|A|S$plZ*WP>WwbxpE?=y2f zkjZ#j<3M;u&J`zeC9$h^3g(`BCiB^uvy$nW(|pcM;IE7do|Xf-dMG{gqsPt_f0FC+heCqQ5{Q1ka*t0|0 z^)ESpk5{Z|pEQ5-$BRo*GBbZa^%>SFu^BTF>CLl5pK4{fXSM@#O=uhD%y=8%ndKqt zg^02nZm-gOsbYRl``>4lfAUOc?#G;EA}7wA=Ja(SeN%AIh%2*I=Dm0J+OydC7Q*t6 zOmX}1Q}&T;_UvwT$0p0}Ll&MfcaT`a*0 z`=zRxz3u-OPsj8(A{f20;^ zgp_5h2i|wt?Lhjx??QuM%&2@n6D&(UvU0QtVcA*)Fs~K?z@tTYwZ-|^T4YQgT4bCP z!_R1u{}Flf=5`Vw zCs@!=ve5ItVW}7;Gjr@hJkgTRK=_8GY6sGal*_Hogdb)^CRPW>R!q+~??O(dd*)@J z&OFP2+|w}w^~^s8&zz4v|M*j-`D}HZakWBfnfW&ohN^m#!oSX2SU45_*0U6U=CpBr zc$Q-Nz9)zM`h=u*-4m~sJbU=%+VIUIzkS=!JGI(VkNeA;1IB2-`0`2k^#n}|jyZnE zF$2fBO1qOk)K(v={b&F{Syi}^@}^JzP{r&qXZgvR_v$%sK@0emzq9>Mz6Yk!1Gx!LDF<=~QhjO&`0(fSsUalOz4I;;UqM|P=`N^i&CWo* z+C++H^oC1eRgH2*;>YxH2J7D?693odIb}lj+{Imo>QqlGD1~#56(J+@v8;PdEQ36H zL5OD1b5cs3Kz}gjQjkf5kVm@T%?^i~R8khI&YkfrGgL!^ODgH0G?w4W?{jKZ%hgp-A>pthlZT1gt96jm* zZPf=D}LSkJg;F_QO}T)H|Om?W3rG+2kkCzUHkrUb5(fA8I$}9{;KQr1Jm# z`On(_l_L3tSyG~UhpRh3pX4W;qEK9On{TZs#b0K&C-5}a16hHmH6F-nJneQMzd$Ol zT`+TYBodBC!jXJuY=RY;Y`62^fxCV+$qjc@h#TnEGj4cB#o+eKDHZvA`>}oO1N=Mb zm>1?(VjS~-Y8OBMhieYewQnyz{{7Lr|5Lm1u!oxUFFvhZKBDWX{wLk4oqgRKhvzS; zppTx~dT;Q~=d~G6eP_?xZ}(`E4$eO5mV5SSZB zhuZgk_F>6_*XL`OpKpj@_BQn&oD++ zj2;Is#My-ySJ6lO5I<7n`aMWxYae=urm00c;ITD1LKOp`ts&51>i{f&H?LHyo_q5A zd3E#D5cc^m?1|LLmn{FpvuiBeNW2wZg1j>}y3k9yQmd#uxz>v}6DVtdH@-;WQZW$k zE2F(-8F_jqhhBB1ajr4Tm^o|qxig|GU+YFgqvm7glW}uHmHBA2Wvkx&OBi|aMlUOl$YwG$+k+=s9NYMusXVOBPH&_ugd&%w~@!yCc1 z=E{H3?#3!)WmyS1zW6uKI!eyl_9&YO|_1JjGQ*(7%zYUCsF{u@f6nH+x~z)z1^oC36@8cGx+!WX;AYCw+ytEvSS z#X3_927u!pz1uigF%xS-+SMc>2S&WjM6aL~Z*HKrpxU4E6%Eje zCKOf-nA^X$Uv(hm?*>jkzt(S*uL4~Q{C?UX--%j5g@3NE7SDR2ru&v_-V*Q)!3RJ5 zPUCMV(tGj!E3{<<(rfWO7)~e;=ojPr^Y{xRU5f8(@E1k85#Ptdj$th6AML+0e#KwO z3TRXD?~#(a2>+7LfW|j3DA>(N9VM_k@h{J)2DJaezx=`0fYynBhe>J={#EoCp;Tpy z&|!*RIZ_IC8d8ehRHPKWOOR6ZmLa9+twM@F${Nt_aq##i@M8t`FjB)MwHv8YN%bK0 z1xbB`)E6anCINruJ5s9G)+2Si z@b{RL+U=y?bW&$Q#>xcme5Af4sjne*f~0=uUe>j zj+E++I8t<61KPz%@m)aytsbf4BxNGSxLrWI1F0`cY8_Il9ovvn^*-;w-a<;1J&2Sl zQH*(_cz(s{zX9M>@p2?ms+AzG(FraM|z$9>H;@{k0&6mgsJ`g+LFe;e)30gSl z0Zk<@&Vj7Rf!v-0*^mQyAqVnd4rCa+K|Xfv<8vVA=0KL^KyJ%{{5A*jXb$9mav;aB z%RT&z%Yj^&18L2H{2~YPXbz+|2QrX@>C|41Csza(S0YZeLJ+}GNX$7Wa{ioZBQ`x! zJ!N!a>9U%!iRHD+mRuTHR6S+JoZuKvtJ-CYuAEm_Gv~6JtAPdRXo1#WvUpL#23E`& zvoujxQx};rZjR=vWYjoTQawF(t}!zrl}(yHwQA1P>d2HCGvaoocG*#LX4wDduiis? zjGO;C9=hOOTJtv(&f6|eZ57!KIVTop1M>BfyC4pfp$8UVr*NutP_+@7v%<@s2R%si z$drlG&##`@S9g2bHrmtSK`9@OxXR}l#B2ijB_uRy(wt@UmdsyzdBn}NBO-3T#{zfJ zl7vEBw8)(m3?gswyybP5EUH^>A-MC$AsaGwdCgz15THz+a$x7*9F3MMd`>=3gf3@S)tg&Y1#bk^b54o(oD z_;p2Rohs}=U4~yff~lg(Dq!$Q(OFd?qq8YAs0X##0d6}wON>lUpoi?}EHk8l-D~J2 z6`f^{4OFaoqqA!u2Ub)jyOx~jtg9BgZ7MqJWFU6e2y4rZ&N^@gK`3!{5X6ekGG8^p zX3-m+b@D$cI$MegRm&WaxVwxZY>S3;4CA;XfawIl6x52&I*fu3m)KZ1Dmv@nxDf0? z|68K7EbofW?#81;XC1oeJPy1>XWc*!kwjlzmJE2JvmOSm=xnCSOmvn^ zs;X80B-<2+h|YS@TiHS-5Uw0gbk@P|J3330sOdy!$#o{$W_6hd;7GL19lJ`2cy@HQ z5X7>hvwJxN?&vI$>^P%0I?J3)bXMVcqO+uxH#)llMn9voQdw4XR_Gu)Ta3azsDU%Y ziO%lEvn%xIiq1M+>50w~is-DPP(0CDE0Y~275z~)!L9Ek&g%wvqO)pj7$TMODmqJG zp6INDt0K0H&aRdD_>6n>Zd2+*MQ2$=2)m-Q4orGQMQ2?w?0c!`ESn-_G2x|M@?hLc zIC|68H&jd<3|ld6$OLCstLW@`|DfpXnOV`^Iae@ApSQ~vLd&XSfVI-B7-Cpt@9M!ZyX7KoYXtYQgyuIMZg+=A$i&i<8J zT+vxzx&wAL4=OsF%Y!#Mo0Ff3&MLb3NUP{9i@LdYMQ3xUW<_W7llDYsfs#$!iq2-& zOO91^Hb2>%=q%8@n*uq_u%ffsHMyg+sxD7-R)(0}+gEfpn;v`2iq0x>*`4i<&N>*` zNHSs)owaz%?l&tsnak zc&ds2;OOjJCv;_<`ODPuDWkJsId6295@!cN{*lqy-JolYe)6|UB<_~u)V64-APu66 zJtFfsJL`mVaQe=P#|oPBlzVp8DWu8^!ru{{C8s&jSq^+obe2Pu8=VC^iV?=kK23C% z41B8SESYroVX{qe*jIGc;Z%C~?~KlpYj-$L&T4xAWX1z%1Ooz)ZpuVsRj4lWtj^BL zfzE$Wbe6R8MrZfoBn_jp>h!4h?5xBO5uL3@OI44#qO)xNr-;rv3MF53mK`P){jW!7 zF)%zki!UpZn!JsJWuKjO;Q!p{EC<6@Ou5n7+J8`Vc1l)s_Aj4BXEE%bMQ1;Y&VF`w zwm{DM{tKL)72oQ!=c z=qxbZ0Xv(AJZEQx2XAziEO>a3SYID!XKm8CXJ?t?iq7Ux&5F({mb1C`L}!6wM;UG6 zdCtz-9QAc}mial+S&;4{I&0UI=j<%A+|gOp1W$BUD*L49EXsKL+7+Eu4p>^X39&B)s1+aQGRBztaDOHyiK<(=GJLU7vh!HsCF(`+;|d#UJm= z2;MU98xTqn6L=zr-rW3eK%hzJ`bZRaw&#>>7qZQ6^VYJV=o_43iPe*z=|fvkU|gtiMBPDjgtz~@wUpswqk(-NG{@Ss$|%_ETFHuMPOzDi&QYzJf|?8 z&?2TUf+M8u%W+peZiabPSsh4gjhCGj1qI^j!z)phQK+xGw(Kn9K|oNvu53gUyfHtT zJVwLU1btmeMGSZoT1zSn^W(62u*!Ta-2n6jt0T?t)h&(a>o)7_Qt`HU*@&uwsUR5W zKZ*Y!{4gmw3{-bk>G%9O*3o-H1b4bSUM!51KN~LZj@}NW0;9qgO{li9jNwbg%@puA z#yWa{-(hsT0Q`<{c~|uIu)c1zuW5_V2z^vH(muA2h29^_ z&FXj?8`g%NsKVuEs{>+9n|-m+X1(P-+|B3x_hOVvpM?kK4Hbr09_0N1Z4(N^Z9`*b zSKHZvnE7syG(vs5>T9 zShwe1aC;CELUJAniL~s}+y8{fO!Df3vBZY3c~RNO1^UwCH6TVYjzjS(gyi9DTpVr0 zr=ureURzey^xu1<9lHyW9PuCp>g;66xL_)3K4osh`8mj4B)F?(hu$6r=_cUo`i*mt zj3?)_Lq3R`FIjH{c-z3QbQSa8g4oIptSH*FL7v-6!80>1?B>7Unu|w$^QKll{IWtG z9%sOg&@QP5g>coJyaTG6cT1^T>>1^S}xNOzIWWvlVD4bVH zrp{?xpzqpfleuiIzFE-_tdx}8t8ac>D!FjCzWF)S@HlID1{6SV(X&XSmPL=_`5^_{ z_3#4y(hj|R;@)`Z8NH)j&{5hFxo~AuWVgBy23~<_l4fl+pj`* z7;TG(7e^EC*%|)OQ+o2NRz|5SqkttMRz`&@Bft#mT9T@CW%Ogl=d6rsS4Mwk9KdL^ z#9UX#0A{>kWz@Pd3YkIuW3=5ZugY-c4P@TkR^DoSyYdDxk1&>7Y4l4k)p3c}Mv+6oQHh92QMh`=X&I>&}Xr-JuP2dr_Ohj<>1qf(E{*Y(T8-yuxtn zumWf`l!ac>TfU2*AmRiX88L?jQ|V*z2&E$$CVdy)KdcVs`aU;E`<(A6t*Bz~+(ESi zs|!>8y92xZdlh_g4jeDcUSd0d!DMB`s?(Q|NZK(dPY87e@*WZgWo;> zp*d^6|BGpBt}l9T>5&^_ukD;T{G^{;`Sm|M{HHT7_+ajDZajVZ4;TOEtnwe+_Fp%x zp11zbAKw2Tk3DkgSr=}f5o#W9{OIz@B`4l-@wsn3{>$)?Z$5Ke>B;8ruD$n5SAFND zpI&(6fremwM$#4U}f_iG3E3i|0oPMLM^=#!Uy`-l5JH)hTY_xB%k z>=zgO=PRQxdim7zd%yIx_0QC<{^hH|8Se&)O2&sDp1OVEy^k;XuSeofT>6XMr&m3F z$2zu!1}e{n_i-oeM5u;@=u&HM4kM}7Ia zo4)z0*S>Paw|<>2oxA3PBTk#Lo-ecZ`k=oGW#csJ)je&vBYf+z1yV7Vte?$Vk% z8Mw$IxfO0-st(S9UrEnVuuff8lURBsFNxwxw1px`RWu*rV8wJ}N_b9Uam~CXQp}Ey zI7CB&u)L-QmqkI=&RN;E>cA;p4R*b0#xm;5FH-E+j@lL&bCx%AhJ$%6| zpY-g6rp=N*%JoT0XDgrdch+D`1YSO$v=qKq{5(yYK353In_%F}ed@REy#_LiFI2Sb zfAjgI45WT$$rPdeu;lTy`FhG1=a6v0I#jpO}(z2$Bu(S|{!H^rj20N+Bdo%HVIEQaf7_`1+lCca*_-hV zud#K8!th5EU9_gE& z$WMbR9!k}}M8l~Pj%*_uhBGJ<0pO)jh90C~ViQ^!&|6l~TZ}jop*K&q8adZ$Keh~D0$xNpQ@e8XvzK7MC6X9$iNOvUT{lHg;60OlJX1GM_r$A>f{x`m5?(wI* zAHbjHd!%h@Ak?K#>1x^9P##Zg52oUYM|!1A7*mE~Amg*)Gz2Ue@2-Ez_ee6pB~df= zEd^|gIk8ZU?i$c^nzO_+x|pK;i6>8UPO$iDv-!FP7@}9;n}qdSF2kcQO|2D97Wu-V zt=E-D%xxSk_+wkaAG)3VVGi01vi~T7FGkER^{Tjf{LU(7VC%6U#>Tf_f!fZXfu#Qc z$~gs%Yxp|uqg{eBJ(Dc-H}EXz0)@)c!2FuG>JdrJ|Gy3|o z{a6(WWF=bhtaQrTXocNIaJ&Hnu^oR~@z((_co&lJ@B7D^I{U?%Is(w21?YYV@1=M~gQ!DqgLcRTLMKfU2JPpsQxiG~N9n>VE zvMxu7^mM7M5v63|LO;eJ`3R`44-6uvYFY;i+%%pAzJLPBh`RwD0&)2NFAG6v_>&Pk z!=j|OzWWh6i7dZ{gyOiNGZ}H1y#fT32&PX(v;bUNi>?$xfrD!K`4x(Lm!AT){G@+s zvw&9kJ9>t5#Wr8ZqImFi#aX3(=ccAj1**o=vugBhvML;n z606xOx6`g-n;F7Zww2x*AYp2T4-oGVk$^ZU&5*v8ta@Acdw|qZ@(}RVQli$8dlh&A#F9cVpzz=c0{avnOnRCAcG8zPGn1+BOwy%@8cToxV`_^?ME98xRSz zvnsKrcUZh_N+IBr8J&s)5mUeyX)PHTZR&t7+;i<;!l529@eF;+W^+^6_mP_Ksmy%W zn@4~}S-Q-g`=F1to(1nJb*Ljl8a)LX+^Y`5TunrIQp1h03OtXomIBo|1>E|xzlDB} zjXowXx~)H-e&^spvxC~O!7gw>^wG-wmWoElL4^_@)sUf|I7QB}i&UVFV5;vTS2#t6 z+C|>}E47^I6nO=sCJle0uOgF@C4~{QyJrx}7^*dE?LsSA$h{tf5#p1TTB{#`ku;jp zzOdQVw0nTwTmoFA)e+q981L^3o2l|{D12YXdK`cO; zQNGa#b%;cT_4sbX_ptPO#N6EzeA^zSofLk~m9Jw&yj?yi87NgoJX*$j(K4%H=K~&`^vk09azitmRmq8xTE)wc-y6HOo`K&cmmellUVmhRwZ`FeR~XZQ|~cx#EGM9 zHd=!@G5Slfrj5RE>*!)m9wYR~wa+8yInvx#-WlqWM(9(!!@fr*CClJd_4@SY7cei_ z1?l6l3VgDvd21h9Nfo#i(o9uDS*+B5V5u5dk=?*>Pkm7}ocTLZqEAipUD9RmeFF*a zq)Uh1LqWqId|l}#pefzvPtRtKC==)`DZUdB@w`r_owRBqs5y30VVb$1q*e)k(y+9h zvkI2jT0M6t@0=oopq*6V#{d)I56ye^LAk8fECyR=k_Q9vV z6aaKaMQD4&1Z%Hl2==ebn)dk`g5hMf?NWF8dkY!Y;5rxcb#S|49QRm;z?O&3qB9CR zK90BOqo2j0mJRp=V#`7$;Fi=8(Kaq>n!z{R!l*@K5bS{Me8B5!3Zm$^^~BFYM7-89 zkV&yvD54cW#JtZ?+zps*NfU9XAhOad#8ehysURvIJrvjA$xU&DAgZeQuhW>uEJT|3 z#(Gt?2XSr&QE&bQvcTs!Agey9L@sDrRq8EkfnawY$#5(tBxfEEXR?#>Q=qr}2=L?t zw+MU>5Q@NW@hu{7Jrd#MbbkbR$tVooj|%kW?EoSL#ajk8k@D-!Y4m<*YCylGikZnk zp{X08)O9E0Pyr%al#O7jH{b}w>_RAdIDQPUm=a)!g?7~Mw!Kf=V~Kh^7RSFZ^!3yH zoP7l_$bH=_c97ThHcWF%^LARE%MPrTo%*_M%5m9|aa>XX*jfcmodxMDP>Q6K!-9h1 zu;doB{1pW8;H)%t`qSf3(DGL}bB6@Cl8Zax82ZyQB@Z)tebEqR9wi=@-uflmOX2T_ z!gdg!fkg_^Uyvfr7%BH`9qBWBIEmXQBO8+#K7yLW>9H<+ED6lxTwY(|Qz#>S=o_=g z_oUvs7T$vp`8g6RKT?j$dr*%k6mST>0)W*XBZ)~*Iib1`IS`NKUBL)*eC_=8MLwz# zsT#P_Ocqcc%SI^xJs`7|5^9NO{o#?8*Y)Nj>DDBm;O%&o3OYa;7!Pntr6(g#9pp*( zazTJ3RwZ^wcSnL8bqrVMq~y%Q{OJp<{BUvtIti?UHP|fD1m)kZBV+BOfCtYrVs=XJ zhxMsD(#HY@;l1|OjNqQsr{JRYB40*s%a(5YsMzQ&^* zUXJrGK>_ikmHRY^9pXW7HjHEuT+a@xPsBp+@fq)>P~UdWIx}V5SBONsZB8M2WIqh{ zNb+o7d3Ow*zB%wYs6=$bk1Y(ulnuz^#La=h$Utv!uZcx@pdfj6fmNcQuAV@J9k8$i zb#pVA{VdFWb?0O-`&*d(>&9j<2UwT`>b{V{EVM8O))q=3-zG!Vy527IB8>qer@ zVY4%q*v42cg1v2%3ZW2-!0co!&nYg*k=CNZC>G_HAjxP-yJ+~2u|_OG%8ERt7s5S} zvs;F_wQVWH=mqrLiRfO4k#rn8%_!fF6J`UAP_MqqfR5t0hRxw3Mf=fxRa~biRw70F zQQ7GZgi^F0QpDd8P&kyL{g9#~9SEgpKcuLi1ECaQpP>0|^nXT*_Jg+<90;XoKct9f z>WE|fi37d4vQWe6k%F*!VPX1a_$-*2N{d33*{=PSXasry1-0}7Hx5pgBqs!{i7X3| z-Z~W;PsHzZl*)1gP68;D)>nNQI9MHVa0SaG7D+w10y7@^24aQ~5SGiP9)GlaJA(3l zgy1I?BGLs93S7s1DTWGKXZmoS27{G8OSDO#u(u;w4TUYIUxq+2LKWQE$wi7PJDfbv zkDyB|@i^ixTp`pk8gh&{)(_~;(jnRj)Zh-=(?;on^dA691_p{kV6fF35J?6GM?xF) zc0Rm(WNaP!nU^}n(4hrOBgf#D*XTvwe*8fP(n=#?(-Jt#)xANjBN&$0{|e}XPiKSv{MQX_-n zt002Kpya5=1JK1h9@==|2EF-CB$^ID7jH%aO~qj+bB9sh89sel;QHg?#)r)z@wRDV z038)+9Tdh6M>w=iUnM8d{)9r%L_2BtU@Nd0PvqOScR)>#q+ZObr7bEgt4K8b3hcTGrP1 z0T>v|RMQ9GU>Z^)xjfCMougfjH*)GlPKPmlC!uY1V5=i*PVM?opa z{g6QvpTnF;&}@jUFtZUzIr|~Mmy&7=KWm@myU2ndVE+Sg`r8?)MqLBxN~Q^HHlbc{Z@U&ehpgd2-aw%}QE^A1LpOmSOre zEIb+gCw%MzAAN0D><2x{R{Kwo0LyB}!eX}|eXCSgiD}VCd&Ve!{%SqnuIzubD( z0?If`pY;s>8|x{z>-l!xdTzAp;XHtO0!b@k!>kdSlniVB^q&PstyggO;gD7qV612z zz!e*W04hph2MwogeOvX`KL8!&8-^vT1FHAniFKw~zhw%*_CVx4-3&-pyv}p}g$G~Y zfsU3~-P3a7C5rn1ar`oyiq$oatJq=`VmchuTXths>+7n0vSObLk3v@LR{(9^p|^J8 z+jxLxfN{V4tCY5i<4I6df>9C<6(_54d@&SY8;W6qz?N&=2L=3dkVOiba}!dSyL(~L zKnXKANK3A;5iU;)FPJ9Jr8@^uvGDVh%@6lg#DWMCX$rb>{Gc#y5{zs*fFK-y`UMB4 zD~-@&di!DEGoILr-TWe~cJZ>&;bhE5Z>@bHq#RC%lQRZ6etK=~Q?hc#BBy}fTl?s& zoKuk#pcmJEbXLwdB|v4&T4$C`pk3Wx{|{KkhlfK4uEQp6<>9U2vWW{;$9abc zamh7Ua>K_$(e%-)VjdU)OcG&&f@r@rnnUG@@FEg@xp_& z?fzmkeHf_k-|=Drj!xu1>(Gcs;k-lCkLfSx9k#7_O3b~%&@al|!%B_SdK0Gdi}+&% zke1{&ecf9sg7`Xsv8GMf0NXeKOEFAo9)sxU*R;7GVuE5yr}sc>;SPkpzS^&^ul2{w zCk^wR80>%Z?O4Z0XT?n1UD$4Pd%-hUR& z=-B()XU>X8%t#RSLD&M8`h16 zbN-ensP_4QQ`n2c=JV;<3aOdhCik|ACx9&WLN`-`o1KR5QN8sWAg9XS#MH`1_JYr?>nOauiL> zEE@^Q#AUYadP_I>OHTJFQl5bl*{nxGYWyXTU}}VB^6b$acnBv;1}P;9$BU9{v48^h zG#lWVfTdYEpkbBKvT}GxM^W3InTU0yCI>d*#;5Oq%yHe8cHNKi)EenlK-IWdAx}mQ zWt=!5n-O}j`wP>910BRE3e}}JXp@W=`qPaeF{coA{52@X65G{EHy?{=avB2-q@os4v{Cw+zwXFI zl-J8t1k#72T-zGQ7lO){S@3M@2xp1FR_{gUVqa<`Eb!AQ7ON=2SV}1slnx3o=-~iuYcWoxiK}Te?eWvq!?_)cDi1+*>aDc(h3eOVs)iG81k@ITIg45RY`^k8m5p7v za(^R*Pp{gYz5&_cZ=|=M*4dYB!e5JTKZ0ia@gE1M`=X9`6jZa*D7eY!CHeQ2aTz>j0Lh| ztX&Nu6*=QXWE)oO{PJ8H(`_18c$k<7%y9Ao|HNd`QE{`o95+OlY>i^K zsT3ENY1@xjpx1WnUZ6h}E-USM1!q^(YF~kHnd`hf1XwNf5Cd^Iwyjtv^WtGhuv+XP zwH=6LBT#}{?KuiRxFEd(Af^9NqypQCkaFcAf7POg z>8qU5BG2>`mkLt2Y9nSB>kV#AZ@`=bF|~fHa+Gb#>RmE>w?gjNAYs^$3Lq(pJ`mA! z6iikBrCIf7=eK6%uP?FqgLD)XvhhK6Xp)P$&~4XI1a&CaPpTF3QZV$JX zMZfh`&yK&fo_B$$>N!78J!jkXaO&WiE`7eC@V!|A9k*dp@}i^ta^=(7XH8y%#pwd* z_s8`0qYGn+hh&_BTRUDwgy&7YmHs{pHyn!%4r`3yp6^W0XNF92vFi-;gY-0j&YiIZ zssNUmH!4~VpdA(Ea?fbuQTS$%W>pa~Jx653trpshil!J9eGxRFzST7o#??t-j!l8m z?nFfqp2Id5aQ)-`^%LY&3>pYlD6QY_KD$rYt z0P~!-zXbrYuo2%vV=@vB3+|gP{LN_us9Y!YYpt?-?Xt%K1+gs?yHBYLznT?KOi4`3 ziYGpaS>uW)ItQwuudt5}n}LMkkrjlVldOU3k0_&0T(9<|OoHP>iYaE| zn&iV1PX$X1r}{b(IuxrL8Uoy{JV0{bu|SU_+MIq7>O~Asq@Q9MBBP~eA>}&GhJK$B z$ICzrm`-}jND3Yz6LOHO&XT!dw#*%hToukzr$gyZSyl{2Ik@9=xLB_M#1j_9+=}>- zMS<46Ncwuq{^z5@(=|YExEY3+#EO6x#cu|~5uof5s zP_sy^g>}G}{j5qWkl&%^T~;A6FW^Zia{+#{ns+=eG!%RUhRXEUThFJtKnbM426tHJ zg=BB`S}CN~cMjK3IS*rP`_7R}&E6DdJfND6gA5jFZ^L-3dH`b?+#zomQ2k)zV?;S# zGVfew$P}AT2d}8uz1e()lW(1GDMFlGtO(3IA9~!Gcd}WHUU%_TBwi^_&oeqa50qF? zW*#@C)wGg^50+XQ!8`qchKsYTs9#`q;Cv0;7w%qQs}CmzXohgUb=aYL-2amaC;ktZ zD=_qU3JmtxGY;uLBdylDtQog@24B*nmOMz*6!|)MrooOMq!j zd*y4XIe#I*S$s2$BYdxt;vF*g`IBIn`-X{kNXg_^^T&1<)D|&}PMIQl>r&fV4@2hc zAR*NNdiojsA^w8@cVW@ZD1wfFPlmHOh%ydAr&%rBX-AL2(1!2soj)UxCHlznH((Y+ zdt~b3V$Z#MZrtE*^V%B z&J68HParR=r8iLtD#V(vT$mm)g4KAs>}`>Cu74hfrU2|PUV1jxe+VvbBNaln9b(6+ z{5<27oH@jwu9R%pDSfp=l-NOFal*7e2G-amUQgyhVYm@uN;+W`Z$Vs~VOCo3g%Cna zFgBq5cOWGO`Ssa8MhH}}|BBo<|umt;$L=z(fA>B z3HQa2f-d?xvJszzHu)w~a^ZDi^4jAy-rX%!KUk5@@1y~CsFgT)ZaoKph>kJD;s7G&MJ;?}88TK^oJ5;~%G@wR# z_US3Z#MPYbIQbMyY%)61ftc?tdDs}keT4=38@up?uh;SSGHg}fTadfA^`!wnUy@bg z$7`@Y!r!|%rc%5>pZ^yA_Tjl}L0DhfiGSv9UZ5|0YJooYF??@XVCeh17U=syap@EI zdvk$agBZy?6ysaE2&=(6ym}u+dM{vr&jW5Ri1ead?=yJeS^Y|6ZUEc(dTD{ad?)VR zya4207(>f34#;zy@|f4 zO1xf`cscGv(KmL*eW19sH}30sdxG8&D1~o^_BNFG(7ql;fBv)h27_}q;qMXr;Zz>HR+Q`o&0f4#jI8%= zM6WdyUG-P*pU>DzE*Yv_ZtRRNm&KinV;RR7g;x6(axG1s}xSns!TVHf2S{oji z!l`21MC#F#ucN(@WYIV{dq4xSAW<>)#|^efdACBwb{3FRK%SH=8t_+;3k3OFe;aZD z$k%=CZ=l+bh=zrT?W#W64ehz^Xy4N`C=Nn_V37!%iH0A6O`h^?1H0jX-I~JrvGg~= zpB+D_=7B;-+Z@3;dMKhih~Dew`@mCEtLNo65M#&GZ%Nh95*^Z8t>Ph*<-TS~|KwzK zgacc5IL9xR?s3%BuZyM2TT;ozBXH>hYGZ%Tw?Pf_&+G_cX2N5KI>MU{Mo`s^5LGh* zss`7bS9mTB$oYtB==s;Baa1Ny9MJTeaNW$G-V9Z?I!S)eh@$>RauICu{nuaLh8j_? zXoj9)sM)O(u<#l<$=TeC!f77fw9m~`CAD7;D5^77eyH|Sq^5%OMF3lP)CE`&f+<+v z++eX9`1}9Cf^luxc%Rv!w|oI)<&KJa4Vs{f4%w0Zx)dRMc<)2c^(bZaNed6k;b8r$ z>12$ax>~ngZ_sRdtybN38iiqEM75NsClGUg3fsLBVWn*wGartdkEl%_F*~z%e;gKQ!Nf- z5f`&t#{+;FhrI|KWh^Qd({zNQ?%C*Lh)~$z>lC>8#QXHt=9qFz5k%s3e^{s(eFefw z&}^4$LOC%?w*iSh0j3Lg3Cr|bc+n7hL8aKP*4uXhuPV_^y8~~v!(xR!Aw+k=p|0zK zI3*q~hk~fIZ$G8{F>DIiFA_P7J47R#gNUj67h@n$h$Y*@5|2DfQz}puL~#$U)m(r5 z*humUT#$Lo{z)WEM!C8*F*$RL7J61sa)&|asjar4-puojxIhs$_hKs4W~Rah_6vpw z)0W4YaNL`_9m5cvWwhg=6%WbTs9~U|4n{Q$05W!%w)q}Up9-21&z3RaK_0&O&g6kB z3=?)2Wth@41ug6u0*s1T54eOs)b3-t#>QihOJTK(+1?-oje^W5jKVD7D5RO?*dy$f zs>FM+l15hWvIx2g6MFOHWL?moenhA@V)&F@g%jP<;t~WpPq{G%V{_VgP_o#gf zQMbWXc6PrFC z&v-w;G#G$}vrTLDiM4luT?0@M;5R;a4}*OR^f;~_09B;0Oz=3JxpIFjL|U{u@Gq(1x2GohEfp36A%C00n9BC z_OF)yCel2mwGnwZ8<4KXbJ)CGOJ9qGGhPf&Vg4aNQw&Yht+$*GX;+)}5|I#x_fF8m z45*vViOlmxI2aA-koPGn@q9Qsu<2)A;F@5!8Z+Jv)eg8jo|_@E?9^; z@LtSz1aC?ZyWp!Mu@f2bJ-ebC_RRGS+YHsW4ecm^(O0$i;%%pl6Df|iGn`P&39tat zNy0W>dX}sOQoXun2kmGs2M`Pu2t$qF4h976^=T+4_mp5s;(J{{u?-yJiFS1W#d>7ZQMV!{v8;o)(t*{yXp?d+o#H#Q!Ac>JK(oF0sO=;uDtl7X;-J| zDfGT1uO zBgah~P%3g*wB1}Bu+jxYfpo37NX)VqPz|ol*>~n(7^OB){?4=}q%%Z3X~`jKxfp~w z56KuhA=@$4O&)Rp$F6pe;Om|-t1AJmx)YkWu6R;-#6?F`jAT5~fm0$7=UzC@y|3Ey zb2C@kPh2|A*;t9P5pIVAV1nHVXjyLlUXjvG$D=155hpBqhGVHgnc z1m7uwhTtGQPRG`tAi+Dnfk~u%Cd5>v{98zbli@;00c`OizgR>K0MZIk`yZJ6D_9-v z7VPneRdW$Aq(UEFHGxV)1^N_Rw%u59A*3Dhhh?L$R|%MFh0Y-KUGF!zyyV+w8I2L7 z9sw6L=w16P2(tCw?C1wMu0$~(BvQylovneqNo&$4dFfy?1{B3JDBMC3>q(|MRZa<)41re(!uDyf3kp388 znU@#@%z#;#0kqWNC#Whg6;O?A$5MAnee;k|+d}QNs_KAKwb})eb!IvYAh{PU1Vxg; zGYASbP9LGhL9`X4oX5WaIXKTM9ti9^`*>#aAE6~h_AP$-UM&$$+WS0T0eMB|3MhRJ zRVu^~5h4z3Ih$`$Vq;(oc=&0R3M zt#M9VF<^(_wS-j5naxhjM@+sLU^4keU|P`({R)wIOp_*L32q!*r3&`&%< z4w14ai+nO4X<1@I)^`Fqns}X$+xb9M3?n-c-P7JAtxf%2TE`_ z+kb`{aIHyI}|=3)jtn7 zIx^I)H(vxvN|ubk-E-#XEi_{y=&0t&NGRH2Y|8N3<7(+Qn%N~oC{HPjl;~;Im1(}u zK;#aj?K1Mr^DlVmon_2|qfKlr>w}r2iz;8qrv-X_F5>CQ{jW z@MOFN1!!cnnOaer-aEvOhYS1#lw*U7aSWL+Dq^wvSJKm1Ad8eOL!p>I*4w`upwe8*QMhmhFKlyzmPooCX-hqOB6PCQd?%{{6k z)8CakG`Pv|GSExW#AbRv)Fi@{n6s>a`^uo-aGFi}LJkv8mXg&L&N%ZqC1QHZckqbf z<8Zv}WhC+S9KOuA#OqUUlUM&D?!z~)XvOSQd}bZv*j5U`2Z{O|SVvs(Gs`NbAQ+82VgHoArCwd&;k_&bN#ixYMpLZHG`RnJ``c3y$`10Yncx8hZ z@E?3Q3ctlvXGf;+ecR_XZ5YyP@V)OCO&g80b}aCYgYHF=-{+i!^$h81d>5ahX>*b0 z_YGq;Z86fT@%;|ozFUX1cABOgdX}bLOB{UvCv2Z)q}Ss6gqWt?g>(hJk2wdwU4?Wh zzF(;VFG%mjw_dGj8<8%?_x2f@#(QeJ@m+%Vp6^DQ!x^x?DdX%1iU7Zv$8Y8nX8#e+ zG~tscPCTu2MAf1tlV_had+g}a730Rv89Vx<`oyxjlWLbPU$o++g$l;I z%nDY9$`z~}DFu7mf$ei(VW=U6Hx(&`x6pxI?!X{67GBbUt$>PDWv@d@m7M~$tzhRP zrC^sLHAy&abaGpq+|^F*FPz+8JGu8cxjUTPr=8pvo!k$cTqxw>r7scXG$#rzuozrz55MVCa`@*l|cH*dzybjssif zz^-y&cQ~*gJFwq7u#^Kkx7@DdLZnn3&p5E>9oX9rY@Y)=_sa7X-my_ypQaw(J*C8!>PAcl87CNa`Cv}&T z>T*&&PO1=d#-it>qE2d|lWKKRcR8spC)MMm3ay!k3h+T}3OWH(%Ssg@H9=rpg;j2` zlPYm?hdQufPO8+&EpuQaoYY7smuf*#9_^&YIl0VHxs^^T?BqrrSlmfL4O%=?22|Pe zoYX~5?py~p-$^ZWau++WS|?TK{cgryOaBU2e!sZ z{lv+=%YohPq}DpQzjI*sI;s1e+>`^`=%l)w+}z)Qk>BOW{s|b(wt0P8DSoL1#q)fI z1IAt>4g?J!EK^z|l6>OYg5Rsd-&_ymQa~y}QQ`2HV`6Au!t(f zhyTFeZifybKgM6m1NjvpXiA2|okRp{89J{5u-ilV9hUMyXnw8nP%g$(qX$BtY_10~ z5>K=qGPUzoD37`%0UWS| z!WaNTE~`gf9>}~UXsHKM14yk0aycNYJ&<}p)_NdI0qOQY76Y=^16d9TM=`@s0+0#^ z0%UDDT2bwRGyziUfqVmy)gA~Bk*@VX_|nvF59AMk?Dar40a6TR6hEw;2N^0n5Wab? z+5>qTkXjGqARwz92o(eexyCm)ii=oKLsp{^I*qMjobw>y!KIO_i?PO!8E; zlplIs1$lnG={)>$(VPjYt?UiICXjPxX{GYyK#VC`r56&JqRsU}s-|d-UdXH|+8Qrp z>J%;Ig~X?bjqj>`#uQF286AtCiBq&v2ZG|-1gl*d`1ETDJb8XiDt;<{NNV2VnkD%8 zCjO}LsL|4_niX}+<|XRp)Gk|e<-EF@IhWO3?ftD~^(#~HP$XP^&ZseCf+0@kQ~5M{ z^f;!272#MsHZvNVRdtGbuAUyNii{dF_S_(!Lo=Z9PZ>9Qdgf`&sGxe{5206|1FTU& z4>yULWp#6wFS@i3RwhoI5j9YOkdMd{DsVlG367E{kauCKCmT~eDa_!hIo0Q@dQ^p= zEm*W<{+!zSOBOFm1@R+Fg9M@rSVyk_wN4$hLA`CcRt8Z{)CI{}T8rV#suV3)B>cJiba~x8j5~g`xyDOaD%-JB)!F3;w$n!kyLxiEjx;ze}}7u8=bb0M^B z`8@mrn=Ov&$reEMWQp+@Jk?%C8lmOT;FuxH)O_I+N~ot`1?K7HH7IkXHxHwTyHYe(doOo1*`f0gwQzy=xqkfV+^V@P1z(M~9@nT90 literal 0 HcmV?d00001 diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/arch.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/arch.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/arch.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/arch.h index b37fea3..db16940 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/arch.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/arch.h @@ -1,106 +1,106 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Architecture definition header file */ - -/** - * @file arch.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Architecture Header File - * - * Specify Processor Architecture - * - */ - -/* NOTE: There is only one user configurable section in this header - see below */ - -#ifndef ARCH_H -#define ARCH_H -#include - -#define WOULD_USE_VLAS /* Would like to use variable length arrays? */ - -#ifdef WOULD_USE_VLAS -#if __cplusplus >= 201402L -#define USE_VLAS -#endif -#endif - -namespace core { - -/*** START OF USER CONFIGURABLE SECTION - set architecture ***/ - -#define CHUNK 64 /**< size of chunk in bits = wordlength of computer = 16, 32 or 64. Note not all curve options are supported on 16-bit processors */ - -/*** END OF USER CONFIGURABLE SECTION ***/ - -/* Create Integer types */ - -//#define byte uint8_t /**< 8-bit unsigned integer */ -//#define sign8 int8_t /**< 8-bit signed integer */ -//#define sign16 int16_t /**< 16-bit signed integer */ -//#define sign32 int32_t /**< 32-bit signed integer */ -//#define sign64 int64_t /**< 64-bit signed integer */ -//#define unsign32 uint32_t /**< 32-bit unsigned integer */ -//#define unsign64 uint64_t /**< 64-bit unsigned integer */ - -using byte = uint8_t; /**< 8-bit unsigned integer */ -using sign8 = int8_t; /**< 8-bit signed integer */ -using sign16 = int16_t; /**< 16-bit signed integer */ -using sign32 = int32_t; /**< 32-bit signed integer */ -using sign64 = int64_t; /**< 64-bit signed integer */ -using unsign32 = uint32_t; /**< 32-bit unsigned integer */ -using unsign64 = uint64_t; /**< 64-bit unsigned integer */ - -//#define uchar unsigned char /**< Unsigned char */ -using uchar = unsigned char; - -/* Don't mess with anything below this line unless you know what you are doing */ - -#if CHUNK==16 - -#define chunk int16_t /**< C type corresponding to word length */ -#define dchunk int32_t /**< Always define double length chunk type if available */ - -#endif - -#if CHUNK == 32 - -#define chunk int32_t /**< C type corresponding to word length */ -#define dchunk int64_t /**< Always define double length chunk type if available */ - -#endif - -#if CHUNK == 64 - -#define chunk int64_t /**< C type corresponding to word length */ -#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 -#define dchunk __int128 -#endif - -#endif - -#ifdef dchunk -#define COMBA /**< Use COMBA method for faster muls, sqrs and reductions */ -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Architecture definition header file */ + +/** + * @file arch.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Architecture Header File + * + * Specify Processor Architecture + * + */ + +/* NOTE: There is only one user configurable section in this header - see below */ + +#ifndef ARCH_H +#define ARCH_H +#include + +#define WOULD_USE_VLAS /* Would like to use variable length arrays? */ + +#ifdef WOULD_USE_VLAS +#if __cplusplus >= 201402L +#define USE_VLAS +#endif +#endif + +namespace core { + +/*** START OF USER CONFIGURABLE SECTION - set architecture ***/ + +#define CHUNK 64 /**< size of chunk in bits = wordlength of computer = 16, 32 or 64. Note not all curve options are supported on 16-bit processors */ + +/*** END OF USER CONFIGURABLE SECTION ***/ + +/* Create Integer types */ + +//#define byte uint8_t /**< 8-bit unsigned integer */ +//#define sign8 int8_t /**< 8-bit signed integer */ +//#define sign16 int16_t /**< 16-bit signed integer */ +//#define sign32 int32_t /**< 32-bit signed integer */ +//#define sign64 int64_t /**< 64-bit signed integer */ +//#define unsign32 uint32_t /**< 32-bit unsigned integer */ +//#define unsign64 uint64_t /**< 64-bit unsigned integer */ + +using byte = uint8_t; /**< 8-bit unsigned integer */ +using sign8 = int8_t; /**< 8-bit signed integer */ +using sign16 = int16_t; /**< 16-bit signed integer */ +using sign32 = int32_t; /**< 32-bit signed integer */ +using sign64 = int64_t; /**< 64-bit signed integer */ +using unsign32 = uint32_t; /**< 32-bit unsigned integer */ +using unsign64 = uint64_t; /**< 64-bit unsigned integer */ + +//#define uchar unsigned char /**< Unsigned char */ +using uchar = unsigned char; + +/* Don't mess with anything below this line unless you know what you are doing */ + +#if CHUNK==16 + +#define chunk int16_t /**< C type corresponding to word length */ +#define dchunk int32_t /**< Always define double length chunk type if available */ + +#endif + +#if CHUNK == 32 + +#define chunk int32_t /**< C type corresponding to word length */ +#define dchunk int64_t /**< Always define double length chunk type if available */ + +#endif + +#if CHUNK == 64 + +#define chunk int64_t /**< C type corresponding to word length */ +#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 +#define dchunk __int128 +#endif + +#endif + +#ifdef dchunk +#define COMBA /**< Use COMBA method for faster muls, sqrs and reductions */ +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/big.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/big.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B160_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B160_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B160_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B160_56.h index 85ef05b..369c4c1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B160_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B160_56.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B160_56_H -#define BIG_B160_56_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B160_56.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B160_56 (8*MODBYTES_B160_56) -#define NLEN_B160_56 (1+((8*MODBYTES_B160_56-1)/BASEBITS_B160_56)) -#define DNLEN_B160_56 2*NLEN_B160_56 -#define BMASK_B160_56 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B160_56; - return (chunk)(prod >> BASEBITS_B160_56); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B160_56; - x1 = (x >> HBITS_B160_56); - y0 = y & HMASK_B160_56; - y1 = (y >> HBITS_B160_56); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B160_56; - x1 = (mid >> HBITS_B160_56); - bot += x0 << HBITS_B160_56; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B160_56; - bot &= BMASK_B160_56; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B160_56_H +#define BIG_B160_56_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B160_56.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B160_56 (8*MODBYTES_B160_56) +#define NLEN_B160_56 (1+((8*MODBYTES_B160_56-1)/BASEBITS_B160_56)) +#define DNLEN_B160_56 2*NLEN_B160_56 +#define BMASK_B160_56 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B160_56; + return (chunk)(prod >> BASEBITS_B160_56); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B160_56; + x1 = (x >> HBITS_B160_56); + y0 = y & HMASK_B160_56; + y1 = (y >> HBITS_B160_56); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B160_56; + x1 = (mid >> HBITS_B160_56); + bot += x0 << HBITS_B160_56; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B160_56; + bot &= BMASK_B160_56; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B168_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B168_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B168_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B168_60.h index cf431a0..0a57612 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B168_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B168_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B168_60_H -#define BIG_B168_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B168_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B168_60 (8*MODBYTES_B168_60) -#define NLEN_B168_60 (1+((8*MODBYTES_B168_60-1)/BASEBITS_B168_60)) -#define DNLEN_B168_60 2*NLEN_B168_60 -#define BMASK_B168_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B168_60; - return (chunk)(prod >> BASEBITS_B168_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B168_60; - x1 = (x >> HBITS_B168_60); - y0 = y & HMASK_B168_60; - y1 = (y >> HBITS_B168_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B168_60; - x1 = (mid >> HBITS_B168_60); - bot += x0 << HBITS_B168_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B168_60; - bot &= BMASK_B168_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B168_60_H +#define BIG_B168_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B168_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B168_60 (8*MODBYTES_B168_60) +#define NLEN_B168_60 (1+((8*MODBYTES_B168_60-1)/BASEBITS_B168_60)) +#define DNLEN_B168_60 2*NLEN_B168_60 +#define BMASK_B168_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B168_60; + return (chunk)(prod >> BASEBITS_B168_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B168_60; + x1 = (x >> HBITS_B168_60); + y0 = y & HMASK_B168_60; + y1 = (y >> HBITS_B168_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B168_60; + x1 = (mid >> HBITS_B168_60); + bot += x0 << HBITS_B168_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B168_60; + bot &= BMASK_B168_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B256_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B256_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B256_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B256_56.h index 63e0e1d..c16e9a1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B256_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B256_56.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B256_56_H -#define BIG_B256_56_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B256_56.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B256_56 (8*MODBYTES_B256_56) -#define NLEN_B256_56 (1+((8*MODBYTES_B256_56-1)/BASEBITS_B256_56)) -#define DNLEN_B256_56 2*NLEN_B256_56 -#define BMASK_B256_56 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B256_56; - return (chunk)(prod >> BASEBITS_B256_56); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B256_56; - x1 = (x >> HBITS_B256_56); - y0 = y & HMASK_B256_56; - y1 = (y >> HBITS_B256_56); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B256_56; - x1 = (mid >> HBITS_B256_56); - bot += x0 << HBITS_B256_56; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B256_56; - bot &= BMASK_B256_56; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B256_56_H +#define BIG_B256_56_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B256_56.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B256_56 (8*MODBYTES_B256_56) +#define NLEN_B256_56 (1+((8*MODBYTES_B256_56-1)/BASEBITS_B256_56)) +#define DNLEN_B256_56 2*NLEN_B256_56 +#define BMASK_B256_56 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B256_56; + return (chunk)(prod >> BASEBITS_B256_56); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B256_56; + x1 = (x >> HBITS_B256_56); + y0 = y & HMASK_B256_56; + y1 = (y >> HBITS_B256_56); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B256_56; + x1 = (mid >> HBITS_B256_56); + bot += x0 << HBITS_B256_56; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B256_56; + bot &= BMASK_B256_56; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B288_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B288_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B288_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B288_60.h index 991383b..2034bee 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B288_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B288_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B288_60_H -#define BIG_B288_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B288_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B288_60 (8*MODBYTES_B288_60) -#define NLEN_B288_60 (1+((8*MODBYTES_B288_60-1)/BASEBITS_B288_60)) -#define DNLEN_B288_60 2*NLEN_B288_60 -#define BMASK_B288_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B288_60; - return (chunk)(prod >> BASEBITS_B288_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B288_60; - x1 = (x >> HBITS_B288_60); - y0 = y & HMASK_B288_60; - y1 = (y >> HBITS_B288_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B288_60; - x1 = (mid >> HBITS_B288_60); - bot += x0 << HBITS_B288_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B288_60; - bot &= BMASK_B288_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B288_60_H +#define BIG_B288_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B288_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B288_60 (8*MODBYTES_B288_60) +#define NLEN_B288_60 (1+((8*MODBYTES_B288_60-1)/BASEBITS_B288_60)) +#define DNLEN_B288_60 2*NLEN_B288_60 +#define BMASK_B288_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B288_60; + return (chunk)(prod >> BASEBITS_B288_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B288_60; + x1 = (x >> HBITS_B288_60); + y0 = y & HMASK_B288_60; + y1 = (y >> HBITS_B288_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B288_60; + x1 = (mid >> HBITS_B288_60); + bot += x0 << HBITS_B288_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B288_60; + bot &= BMASK_B288_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B336_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B336_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B336_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B336_60.h index 1072096..d4fa6c9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B336_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B336_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B336_60_H -#define BIG_B336_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B336_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B336_60 (8*MODBYTES_B336_60) -#define NLEN_B336_60 (1+((8*MODBYTES_B336_60-1)/BASEBITS_B336_60)) -#define DNLEN_B336_60 2*NLEN_B336_60 -#define BMASK_B336_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B336_60; - return (chunk)(prod >> BASEBITS_B336_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B336_60; - x1 = (x >> HBITS_B336_60); - y0 = y & HMASK_B336_60; - y1 = (y >> HBITS_B336_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B336_60; - x1 = (mid >> HBITS_B336_60); - bot += x0 << HBITS_B336_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B336_60; - bot &= BMASK_B336_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B336_60_H +#define BIG_B336_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B336_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B336_60 (8*MODBYTES_B336_60) +#define NLEN_B336_60 (1+((8*MODBYTES_B336_60-1)/BASEBITS_B336_60)) +#define DNLEN_B336_60 2*NLEN_B336_60 +#define BMASK_B336_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B336_60; + return (chunk)(prod >> BASEBITS_B336_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B336_60; + x1 = (x >> HBITS_B336_60); + y0 = y & HMASK_B336_60; + y1 = (y >> HBITS_B336_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B336_60; + x1 = (mid >> HBITS_B336_60); + bot += x0 << HBITS_B336_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B336_60; + bot &= BMASK_B336_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B384_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B384_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B384_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B384_56.h index c160c76..a5724a1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B384_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B384_56.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B384_56_H -#define BIG_B384_56_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B384_56.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B384_56 (8*MODBYTES_B384_56) -#define NLEN_B384_56 (1+((8*MODBYTES_B384_56-1)/BASEBITS_B384_56)) -#define DNLEN_B384_56 2*NLEN_B384_56 -#define BMASK_B384_56 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B384_56; - return (chunk)(prod >> BASEBITS_B384_56); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B384_56; - x1 = (x >> HBITS_B384_56); - y0 = y & HMASK_B384_56; - y1 = (y >> HBITS_B384_56); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B384_56; - x1 = (mid >> HBITS_B384_56); - bot += x0 << HBITS_B384_56; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B384_56; - bot &= BMASK_B384_56; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B384_56_H +#define BIG_B384_56_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B384_56.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B384_56 (8*MODBYTES_B384_56) +#define NLEN_B384_56 (1+((8*MODBYTES_B384_56-1)/BASEBITS_B384_56)) +#define DNLEN_B384_56 2*NLEN_B384_56 +#define BMASK_B384_56 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B384_56; + return (chunk)(prod >> BASEBITS_B384_56); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B384_56; + x1 = (x >> HBITS_B384_56); + y0 = y & HMASK_B384_56; + y1 = (y >> HBITS_B384_56); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B384_56; + x1 = (mid >> HBITS_B384_56); + bot += x0 << HBITS_B384_56; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B384_56; + bot &= BMASK_B384_56; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B384_58.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B384_58.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B384_58.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B384_58.h index 4eda3e5..3f0c9ce 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B384_58.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B384_58.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B384_58_H -#define BIG_B384_58_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B384_58.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B384_58 (8*MODBYTES_B384_58) -#define NLEN_B384_58 (1+((8*MODBYTES_B384_58-1)/BASEBITS_B384_58)) -#define DNLEN_B384_58 2*NLEN_B384_58 -#define BMASK_B384_58 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B384_58; - return (chunk)(prod >> BASEBITS_B384_58); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B384_58; - x1 = (x >> HBITS_B384_58); - y0 = y & HMASK_B384_58; - y1 = (y >> HBITS_B384_58); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B384_58; - x1 = (mid >> HBITS_B384_58); - bot += x0 << HBITS_B384_58; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B384_58; - bot &= BMASK_B384_58; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B384_58_H +#define BIG_B384_58_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B384_58.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B384_58 (8*MODBYTES_B384_58) +#define NLEN_B384_58 (1+((8*MODBYTES_B384_58-1)/BASEBITS_B384_58)) +#define DNLEN_B384_58 2*NLEN_B384_58 +#define BMASK_B384_58 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B384_58; + return (chunk)(prod >> BASEBITS_B384_58); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B384_58; + x1 = (x >> HBITS_B384_58); + y0 = y & HMASK_B384_58; + y1 = (y >> HBITS_B384_58); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B384_58; + x1 = (mid >> HBITS_B384_58); + bot += x0 << HBITS_B384_58; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B384_58; + bot &= BMASK_B384_58; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B416_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B416_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B416_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B416_60.h index 978bc98..ce05134 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B416_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B416_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B416_60_H -#define BIG_B416_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B416_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B416_60 (8*MODBYTES_B416_60) -#define NLEN_B416_60 (1+((8*MODBYTES_B416_60-1)/BASEBITS_B416_60)) -#define DNLEN_B416_60 2*NLEN_B416_60 -#define BMASK_B416_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B416_60; - return (chunk)(prod >> BASEBITS_B416_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B416_60; - x1 = (x >> HBITS_B416_60); - y0 = y & HMASK_B416_60; - y1 = (y >> HBITS_B416_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B416_60; - x1 = (mid >> HBITS_B416_60); - bot += x0 << HBITS_B416_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B416_60; - bot &= BMASK_B416_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B416_60_H +#define BIG_B416_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B416_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B416_60 (8*MODBYTES_B416_60) +#define NLEN_B416_60 (1+((8*MODBYTES_B416_60-1)/BASEBITS_B416_60)) +#define DNLEN_B416_60 2*NLEN_B416_60 +#define BMASK_B416_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B416_60; + return (chunk)(prod >> BASEBITS_B416_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B416_60; + x1 = (x >> HBITS_B416_60); + y0 = y & HMASK_B416_60; + y1 = (y >> HBITS_B416_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B416_60; + x1 = (mid >> HBITS_B416_60); + bot += x0 << HBITS_B416_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B416_60; + bot &= BMASK_B416_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B448_58.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B448_58.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B448_58.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B448_58.h index 8aa26f1..1ad28ee 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B448_58.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B448_58.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B448_58_H -#define BIG_B448_58_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B448_58.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B448_58 (8*MODBYTES_B448_58) -#define NLEN_B448_58 (1+((8*MODBYTES_B448_58-1)/BASEBITS_B448_58)) -#define DNLEN_B448_58 2*NLEN_B448_58 -#define BMASK_B448_58 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B448_58; - return (chunk)(prod >> BASEBITS_B448_58); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B448_58; - x1 = (x >> HBITS_B448_58); - y0 = y & HMASK_B448_58; - y1 = (y >> HBITS_B448_58); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B448_58; - x1 = (mid >> HBITS_B448_58); - bot += x0 << HBITS_B448_58; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B448_58; - bot &= BMASK_B448_58; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B448_58_H +#define BIG_B448_58_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B448_58.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B448_58 (8*MODBYTES_B448_58) +#define NLEN_B448_58 (1+((8*MODBYTES_B448_58-1)/BASEBITS_B448_58)) +#define DNLEN_B448_58 2*NLEN_B448_58 +#define BMASK_B448_58 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B448_58; + return (chunk)(prod >> BASEBITS_B448_58); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B448_58; + x1 = (x >> HBITS_B448_58); + y0 = y & HMASK_B448_58; + y1 = (y >> HBITS_B448_58); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B448_58; + x1 = (mid >> HBITS_B448_58); + bot += x0 << HBITS_B448_58; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B448_58; + bot &= BMASK_B448_58; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B448_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B448_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B448_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B448_60.h index ce14891..426c032 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B448_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B448_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B448_60_H -#define BIG_B448_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B448_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B448_60 (8*MODBYTES_B448_60) -#define NLEN_B448_60 (1+((8*MODBYTES_B448_60-1)/BASEBITS_B448_60)) -#define DNLEN_B448_60 2*NLEN_B448_60 -#define BMASK_B448_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B448_60; - return (chunk)(prod >> BASEBITS_B448_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B448_60; - x1 = (x >> HBITS_B448_60); - y0 = y & HMASK_B448_60; - y1 = (y >> HBITS_B448_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B448_60; - x1 = (mid >> HBITS_B448_60); - bot += x0 << HBITS_B448_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B448_60; - bot &= BMASK_B448_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B448_60_H +#define BIG_B448_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B448_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B448_60 (8*MODBYTES_B448_60) +#define NLEN_B448_60 (1+((8*MODBYTES_B448_60-1)/BASEBITS_B448_60)) +#define DNLEN_B448_60 2*NLEN_B448_60 +#define BMASK_B448_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B448_60; + return (chunk)(prod >> BASEBITS_B448_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B448_60; + x1 = (x >> HBITS_B448_60); + y0 = y & HMASK_B448_60; + y1 = (y >> HBITS_B448_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B448_60; + x1 = (mid >> HBITS_B448_60); + bot += x0 << HBITS_B448_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B448_60; + bot &= BMASK_B448_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B464_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B464_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B464_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B464_60.h index 0af3c14..cca82be 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B464_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B464_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B464_60_H -#define BIG_B464_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B464_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B464_60 (8*MODBYTES_B464_60) -#define NLEN_B464_60 (1+((8*MODBYTES_B464_60-1)/BASEBITS_B464_60)) -#define DNLEN_B464_60 2*NLEN_B464_60 -#define BMASK_B464_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B464_60; - return (chunk)(prod >> BASEBITS_B464_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B464_60; - x1 = (x >> HBITS_B464_60); - y0 = y & HMASK_B464_60; - y1 = (y >> HBITS_B464_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B464_60; - x1 = (mid >> HBITS_B464_60); - bot += x0 << HBITS_B464_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B464_60; - bot &= BMASK_B464_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B464_60_H +#define BIG_B464_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B464_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B464_60 (8*MODBYTES_B464_60) +#define NLEN_B464_60 (1+((8*MODBYTES_B464_60-1)/BASEBITS_B464_60)) +#define DNLEN_B464_60 2*NLEN_B464_60 +#define BMASK_B464_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B464_60; + return (chunk)(prod >> BASEBITS_B464_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B464_60; + x1 = (x >> HBITS_B464_60); + y0 = y & HMASK_B464_60; + y1 = (y >> HBITS_B464_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B464_60; + x1 = (mid >> HBITS_B464_60); + bot += x0 << HBITS_B464_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B464_60; + bot &= BMASK_B464_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B480_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B480_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B480_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B480_56.h index 7c76010..10bb1b3 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B480_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B480_56.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B480_56_H -#define BIG_B480_56_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B480_56.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B480_56 (8*MODBYTES_B480_56) -#define NLEN_B480_56 (1+((8*MODBYTES_B480_56-1)/BASEBITS_B480_56)) -#define DNLEN_B480_56 2*NLEN_B480_56 -#define BMASK_B480_56 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B480_56; - return (chunk)(prod >> BASEBITS_B480_56); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B480_56; - x1 = (x >> HBITS_B480_56); - y0 = y & HMASK_B480_56; - y1 = (y >> HBITS_B480_56); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B480_56; - x1 = (mid >> HBITS_B480_56); - bot += x0 << HBITS_B480_56; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B480_56; - bot &= BMASK_B480_56; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B480_56_H +#define BIG_B480_56_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B480_56.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B480_56 (8*MODBYTES_B480_56) +#define NLEN_B480_56 (1+((8*MODBYTES_B480_56-1)/BASEBITS_B480_56)) +#define DNLEN_B480_56 2*NLEN_B480_56 +#define BMASK_B480_56 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B480_56; + return (chunk)(prod >> BASEBITS_B480_56); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B480_56; + x1 = (x >> HBITS_B480_56); + y0 = y & HMASK_B480_56; + y1 = (y >> HBITS_B480_56); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B480_56; + x1 = (mid >> HBITS_B480_56); + bot += x0 << HBITS_B480_56; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B480_56; + bot &= BMASK_B480_56; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B512_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B512_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B512_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B512_60.h index fa72a4a..8cbbac2 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B512_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B512_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B512_60_H -#define BIG_B512_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B512_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B512_60 (8*MODBYTES_B512_60) -#define NLEN_B512_60 (1+((8*MODBYTES_B512_60-1)/BASEBITS_B512_60)) -#define DNLEN_B512_60 2*NLEN_B512_60 -#define BMASK_B512_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B512_60; - return (chunk)(prod >> BASEBITS_B512_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B512_60; - x1 = (x >> HBITS_B512_60); - y0 = y & HMASK_B512_60; - y1 = (y >> HBITS_B512_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B512_60; - x1 = (mid >> HBITS_B512_60); - bot += x0 << HBITS_B512_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B512_60; - bot &= BMASK_B512_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B512_60_H +#define BIG_B512_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B512_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B512_60 (8*MODBYTES_B512_60) +#define NLEN_B512_60 (1+((8*MODBYTES_B512_60-1)/BASEBITS_B512_60)) +#define DNLEN_B512_60 2*NLEN_B512_60 +#define BMASK_B512_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B512_60; + return (chunk)(prod >> BASEBITS_B512_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B512_60; + x1 = (x >> HBITS_B512_60); + y0 = y & HMASK_B512_60; + y1 = (y >> HBITS_B512_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B512_60; + x1 = (mid >> HBITS_B512_60); + bot += x0 << HBITS_B512_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B512_60; + bot &= BMASK_B512_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B528_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B528_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B528_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B528_60.h index 971a677..b8f357a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B528_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B528_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B528_60_H -#define BIG_B528_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B528_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B528_60 (8*MODBYTES_B528_60) -#define NLEN_B528_60 (1+((8*MODBYTES_B528_60-1)/BASEBITS_B528_60)) -#define DNLEN_B528_60 2*NLEN_B528_60 -#define BMASK_B528_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B528_60; - return (chunk)(prod >> BASEBITS_B528_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B528_60; - x1 = (x >> HBITS_B528_60); - y0 = y & HMASK_B528_60; - y1 = (y >> HBITS_B528_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B528_60; - x1 = (mid >> HBITS_B528_60); - bot += x0 << HBITS_B528_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B528_60; - bot &= BMASK_B528_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B528_60_H +#define BIG_B528_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B528_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B528_60 (8*MODBYTES_B528_60) +#define NLEN_B528_60 (1+((8*MODBYTES_B528_60-1)/BASEBITS_B528_60)) +#define DNLEN_B528_60 2*NLEN_B528_60 +#define BMASK_B528_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B528_60; + return (chunk)(prod >> BASEBITS_B528_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B528_60; + x1 = (x >> HBITS_B528_60); + y0 = y & HMASK_B528_60; + y1 = (y >> HBITS_B528_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B528_60; + x1 = (mid >> HBITS_B528_60); + bot += x0 << HBITS_B528_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B528_60; + bot &= BMASK_B528_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B560_58.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B560_58.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B560_58.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B560_58.h index c9341c4..eef9fc8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B560_58.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B560_58.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B560_58_H -#define BIG_B560_58_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B560_58.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B560_58 (8*MODBYTES_B560_58) -#define NLEN_B560_58 (1+((8*MODBYTES_B560_58-1)/BASEBITS_B560_58)) -#define DNLEN_B560_58 2*NLEN_B560_58 -#define BMASK_B560_58 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B560_58; - return (chunk)(prod >> BASEBITS_B560_58); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B560_58; - x1 = (x >> HBITS_B560_58); - y0 = y & HMASK_B560_58; - y1 = (y >> HBITS_B560_58); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B560_58; - x1 = (mid >> HBITS_B560_58); - bot += x0 << HBITS_B560_58; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B560_58; - bot &= BMASK_B560_58; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B560_58_H +#define BIG_B560_58_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B560_58.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B560_58 (8*MODBYTES_B560_58) +#define NLEN_B560_58 (1+((8*MODBYTES_B560_58-1)/BASEBITS_B560_58)) +#define DNLEN_B560_58 2*NLEN_B560_58 +#define BMASK_B560_58 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B560_58; + return (chunk)(prod >> BASEBITS_B560_58); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B560_58; + x1 = (x >> HBITS_B560_58); + y0 = y & HMASK_B560_58; + y1 = (y >> HBITS_B560_58); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B560_58; + x1 = (mid >> HBITS_B560_58); + bot += x0 << HBITS_B560_58; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B560_58; + bot &= BMASK_B560_58; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B584_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B584_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B584_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B584_60.h index 6024967..3c84b90 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/big_B584_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/big_B584_60.h @@ -1,697 +1,697 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file big.h - * @author Mike Scott - * @date 23rd February 2016 - * @brief Big number Header File - * - * - */ - -#ifndef BIG_B584_60_H -#define BIG_B584_60_H - -#include -#include -#include -#include "arch.h" -#include "core.h" -#include "config_big_B584_60.h" - -using namespace core; - -/* could comment this out if code size is a major issue */ -#define UNWOUND -/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ -#define USE_KARATSUBA - -#define BIGBITS_B584_60 (8*MODBYTES_B584_60) -#define NLEN_B584_60 (1+((8*MODBYTES_B584_60-1)/BASEBITS_B584_60)) -#define DNLEN_B584_60 2*NLEN_B584_60 -#define BMASK_B584_60 (((chunk)1<y - */ -extern int BIG_comp(BIG x, BIG y); -/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) - * - @param x first DBIG number to be compared - @param y second DBIG number to be compared - @return -1 is xy - */ -extern int BIG_dcomp(DBIG x, DBIG y); -/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) - * - @param x BIG number - @return Number of bits in x - */ -extern int BIG_nbits(BIG x); -/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) - * - @param x DBIG number - @return Number of bits in x - */ -extern int BIG_dnbits(DBIG x); - -/** @brief Reduce x mod n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctmod(BIG x, BIG n, int bd); - -/** @brief x=y mod n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); - -/** @brief Divide x by n - constant time for fixed bd - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - @param bd non-negative bit difference between maximum x and n - */ -extern void BIG_ctsdiv(BIG x,BIG n,int bd); - -/** @brief x=y/n - constant time for fixed bd - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - @param bd non-negative bit difference between maximum y and n - */ -extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); - - -/** @brief Reduce x mod n - input and output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be reduced mod n - @param n The modulus - */ -extern void BIG_mod(BIG x, BIG n); -/** @brief Divide x by n - output normalised (Variable Time) - * - Slow but rarely used - @param x BIG number to be divided by n - @param n The Divisor - */ -extern void BIG_sdiv(BIG x, BIG n); -/** @brief x=y mod n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y mod n - @param y DBIG number - @param n Modulus - */ -extern void BIG_dmod(BIG x, DBIG y, BIG n); -/** @brief x=y/n - output normalised (Variable Time) - * - Slow but rarely used. y is destroyed. - @param x BIG number, on exit = y/n - @param y DBIG number - @param n Modulus - */ -extern void BIG_ddiv(BIG x, DBIG y, BIG n); -/** @brief return parity of BIG, that is the least significant bit (Constant Time) - * - @param x BIG number - @return 0 or 1 - */ -extern int BIG_parity(BIG x); -/** @brief return i-th of BIG (Constant Time) - * - @param x BIG number - @param i the bit of x to be returned - @return 0 or 1 - */ -extern int BIG_bit(BIG x, int i); -/** @brief return least significant bits of a BIG (Constant Time) - * - @param x BIG number - @param n number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int BIG_lastbits(BIG x, int n); -/** @brief Create a random BIG from a random number generator (Constant Time) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_random(BIG x, csprng *r); -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randomnum(BIG x, BIG n, csprng *r); - -/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) - * - Assumes that the random number generator has been suitably initialised - @param x BIG number, on exit a random number - @param n The modulus - @param t Maximum bit length - @param r A pointer to a Cryptographically Secure Random Number Generator - */ -extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); - -/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised - * - Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any - param x BIG number - param x3 BIG number, three times x - param i bit position - param nbs pointer to integer returning number of bits processed - param nzs pointer to integer returning number of trailing 0s - return + or - 1, 3 or 5 -*/ - -/** @brief Calculate x=y*z mod n (Variable Time) - * - Slow method for modular multiplication - @param x BIG number, on exit = y*z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y/z mod n (Variable Time) - * - Slow method for modular division - @param x BIG number, on exit = y/z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); -/** @brief Calculate x=y^2 mod n (Variable Time) - * - Slow method for modular squaring - @param x BIG number, on exit = y^2 mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modsqr(BIG x, BIG y, BIG n); -/** @brief Calculate x=-y mod n (Variable Time) - * - Modular negation - @param x BIG number, on exit = -y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_modneg(BIG x, BIG y, BIG n); - -/** @brief Calculate x=y+z mod n (Variable Time) - * - Slow method for modular addition - @param x BIG number, on exit = y+z mod n - @param y BIG number - @param z BIG number - @param n The BIG Modulus - */ -extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); - -/** @brief Calculate jacobi Symbol (x/y) (Variable Time) - * - @param x BIG number - @param y BIG number - @return Jacobi symbol, -1,0 or 1 - */ -extern int BIG_jacobi(BIG x, BIG y); -/** @brief Calculate x=1/y mod n (Variable Time) - * - Modular Inversion - This is slow. Uses binary method. - @param x BIG number, on exit = 1/y mod n - @param y BIG number - @param n The BIG Modulus - */ -extern void BIG_invmodp(BIG x, BIG y, BIG n); -/** @brief Calculate x=x mod 2^m (Variable Time) - * - Truncation - @param x BIG number, on reduced mod 2^m - @param m new truncated size -*/ -extern void BIG_mod2m(BIG x, int m); - -/** @brief Calculates a*b+c+*d - * - Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) - @param a multiplier - @param b multiplicand - @param c carry - @param d pointer to accumulated bottom half of result - @return top half of result - */ - - -extern int step1(BIG,BIG,BIG); -extern void step2(BIG,BIG,BIG); - -#ifdef dchunk - -/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - dchunk prod = (dchunk)x * y + c + *r; - *r = (chunk)prod & BMASK_B584_60; - return (chunk)(prod >> BASEBITS_B584_60); -} - -#else - -/* No integer type available that can store double the wordlength */ -/* accumulate partial products */ - -inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) -{ - chunk x0, x1, y0, y1; - chunk bot, top, mid, carry; - x0 = x & HMASK_B584_60; - x1 = (x >> HBITS_B584_60); - y0 = y & HMASK_B584_60; - y1 = (y >> HBITS_B584_60); - bot = x0 * y0; - top = x1 * y1; - mid = x0 * y1 + x1 * y0; - x0 = mid & HMASK_B584_60; - x1 = (mid >> HBITS_B584_60); - bot += x0 << HBITS_B584_60; - bot += *r; - bot += c; - - top += x1; - carry = bot >> BASEBITS_B584_60; - bot &= BMASK_B584_60; - top += carry; - - *r = bot; - return top; -} - -#endif - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file big.h + * @author Mike Scott + * @date 23rd February 2016 + * @brief Big number Header File + * + * + */ + +#ifndef BIG_B584_60_H +#define BIG_B584_60_H + +#include +#include +#include +#include "arch.h" +#include "core.h" +#include "config_big_B584_60.h" + +using namespace core; + +/* could comment this out if code size is a major issue */ +#define UNWOUND +/* Normally recommended, but may not be optimal for some architectures, for example 32-bit ARM M4 */ +#define USE_KARATSUBA + +#define BIGBITS_B584_60 (8*MODBYTES_B584_60) +#define NLEN_B584_60 (1+((8*MODBYTES_B584_60-1)/BASEBITS_B584_60)) +#define DNLEN_B584_60 2*NLEN_B584_60 +#define BMASK_B584_60 (((chunk)1<y + */ +extern int BIG_comp(BIG x, BIG y); +/** @brief Compares two DBIG numbers. Inputs must be normalised externally (Constant Time) + * + @param x first DBIG number to be compared + @param y second DBIG number to be compared + @return -1 is xy + */ +extern int BIG_dcomp(DBIG x, DBIG y); +/** @brief Calculate number of bits in a BIG - output normalised (Variable Time) + * + @param x BIG number + @return Number of bits in x + */ +extern int BIG_nbits(BIG x); +/** @brief Calculate number of bits in a DBIG - output normalised (Variable Time) + * + @param x DBIG number + @return Number of bits in x + */ +extern int BIG_dnbits(DBIG x); + +/** @brief Reduce x mod n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctmod(BIG x, BIG n, int bd); + +/** @brief x=y mod n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctdmod(BIG x, DBIG y, BIG n, int bd); + +/** @brief Divide x by n - constant time for fixed bd + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + @param bd non-negative bit difference between maximum x and n + */ +extern void BIG_ctsdiv(BIG x,BIG n,int bd); + +/** @brief x=y/n - constant time for fixed bd + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + @param bd non-negative bit difference between maximum y and n + */ +extern void BIG_ctddiv(BIG x, DBIG y, BIG n,int bd); + + +/** @brief Reduce x mod n - input and output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be reduced mod n + @param n The modulus + */ +extern void BIG_mod(BIG x, BIG n); +/** @brief Divide x by n - output normalised (Variable Time) + * + Slow but rarely used + @param x BIG number to be divided by n + @param n The Divisor + */ +extern void BIG_sdiv(BIG x, BIG n); +/** @brief x=y mod n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y mod n + @param y DBIG number + @param n Modulus + */ +extern void BIG_dmod(BIG x, DBIG y, BIG n); +/** @brief x=y/n - output normalised (Variable Time) + * + Slow but rarely used. y is destroyed. + @param x BIG number, on exit = y/n + @param y DBIG number + @param n Modulus + */ +extern void BIG_ddiv(BIG x, DBIG y, BIG n); +/** @brief return parity of BIG, that is the least significant bit (Constant Time) + * + @param x BIG number + @return 0 or 1 + */ +extern int BIG_parity(BIG x); +/** @brief return i-th of BIG (Constant Time) + * + @param x BIG number + @param i the bit of x to be returned + @return 0 or 1 + */ +extern int BIG_bit(BIG x, int i); +/** @brief return least significant bits of a BIG (Constant Time) + * + @param x BIG number + @param n number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int BIG_lastbits(BIG x, int n); +/** @brief Create a random BIG from a random number generator (Constant Time) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_random(BIG x, csprng *r); +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randomnum(BIG x, BIG n, csprng *r); + +/** @brief Create an unbiased random BIG from a random number generator, reduced with respect to a modulus and truncated to max bit length (Constant Time as used) + * + Assumes that the random number generator has been suitably initialised + @param x BIG number, on exit a random number + @param n The modulus + @param t Maximum bit length + @param r A pointer to a Cryptographically Secure Random Number Generator + */ +extern void BIG_randtrunc(BIG x, BIG n, int t, csprng *r); + +/** brief return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised + * + Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any + param x BIG number + param x3 BIG number, three times x + param i bit position + param nbs pointer to integer returning number of bits processed + param nzs pointer to integer returning number of trailing 0s + return + or - 1, 3 or 5 +*/ + +/** @brief Calculate x=y*z mod n (Variable Time) + * + Slow method for modular multiplication + @param x BIG number, on exit = y*z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modmul(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y/z mod n (Variable Time) + * + Slow method for modular division + @param x BIG number, on exit = y/z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_moddiv(BIG x, BIG y, BIG z, BIG n); +/** @brief Calculate x=y^2 mod n (Variable Time) + * + Slow method for modular squaring + @param x BIG number, on exit = y^2 mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modsqr(BIG x, BIG y, BIG n); +/** @brief Calculate x=-y mod n (Variable Time) + * + Modular negation + @param x BIG number, on exit = -y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_modneg(BIG x, BIG y, BIG n); + +/** @brief Calculate x=y+z mod n (Variable Time) + * + Slow method for modular addition + @param x BIG number, on exit = y+z mod n + @param y BIG number + @param z BIG number + @param n The BIG Modulus + */ +extern void BIG_modadd(BIG x, BIG y, BIG z, BIG n); + +/** @brief Calculate jacobi Symbol (x/y) (Variable Time) + * + @param x BIG number + @param y BIG number + @return Jacobi symbol, -1,0 or 1 + */ +extern int BIG_jacobi(BIG x, BIG y); +/** @brief Calculate x=1/y mod n (Variable Time) + * + Modular Inversion - This is slow. Uses binary method. + @param x BIG number, on exit = 1/y mod n + @param y BIG number + @param n The BIG Modulus + */ +extern void BIG_invmodp(BIG x, BIG y, BIG n); +/** @brief Calculate x=x mod 2^m (Variable Time) + * + Truncation + @param x BIG number, on reduced mod 2^m + @param m new truncated size +*/ +extern void BIG_mod2m(BIG x, int m); + +/** @brief Calculates a*b+c+*d + * + Calculate partial product of a.b, add in carry c, and add total to d (Constant Time) + @param a multiplier + @param b multiplicand + @param c carry + @param d pointer to accumulated bottom half of result + @return top half of result + */ + + +extern int step1(BIG,BIG,BIG); +extern void step2(BIG,BIG,BIG); + +#ifdef dchunk + +/* Method required to calculate x*y+c+r, bottom half in r, top half returned */ +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + dchunk prod = (dchunk)x * y + c + *r; + *r = (chunk)prod & BMASK_B584_60; + return (chunk)(prod >> BASEBITS_B584_60); +} + +#else + +/* No integer type available that can store double the wordlength */ +/* accumulate partial products */ + +inline chunk muladd(chunk x, chunk y, chunk c, chunk *r) +{ + chunk x0, x1, y0, y1; + chunk bot, top, mid, carry; + x0 = x & HMASK_B584_60; + x1 = (x >> HBITS_B584_60); + y0 = y & HMASK_B584_60; + y1 = (y >> HBITS_B584_60); + bot = x0 * y0; + top = x1 * y1; + mid = x0 * y1 + x1 * y0; + x0 = mid & HMASK_B584_60; + x1 = (mid >> HBITS_B584_60); + bot += x0 << HBITS_B584_60; + bot += *r; + bot += c; + + top += x1; + carry = bot >> BASEBITS_B584_60; + bot &= BMASK_B584_60; + top += carry; + + *r = bot; + return top; +} + +#endif + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/bls.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/bls.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/bls192.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls192.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/bls192.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls192.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls192_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls192_BLS24479.h index e5b67f5..b7302de 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls192_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls192_BLS24479.h @@ -1,86 +1,86 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls192.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS192_BLS24479_H -#define BLS192_BLS24479_H - -#include "pair4_BLS24479.h" - -using namespace core; - -namespace BLS24479 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS24479 MODBYTES_B480_56 /**< BLS Group Size */ -#define BFS_BLS24479 MODBYTES_B480_56 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls192.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS192_BLS24479_H +#define BLS192_BLS24479_H + +#include "pair4_BLS24479.h" + +using namespace core; + +namespace BLS24479 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS24479 MODBYTES_B480_56 /**< BLS Group Size */ +#define BFS_BLS24479 MODBYTES_B480_56 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/bls256.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/bls256.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48286.h index 323f20b..832a844 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48286.h @@ -1,86 +1,86 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls256.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS256_BLS48286_H -#define BLS256_BLS48286_H - -#include "pair8_BLS48286.h" - -using namespace core; - -namespace BLS48286 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS48286 MODBYTES_B288_60 /**< BLS Group Size */ -#define BFS_BLS48286 MODBYTES_B288_60 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param m is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param m is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls256.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS256_BLS48286_H +#define BLS256_BLS48286_H + +#include "pair8_BLS48286.h" + +using namespace core; + +namespace BLS48286 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS48286 MODBYTES_B288_60 /**< BLS Group Size */ +#define BFS_BLS48286 MODBYTES_B288_60 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param m is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param m is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48556.h index a0b79b2..3173645 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48556.h @@ -1,86 +1,86 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls256.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS256_BLS48556_H -#define BLS256_BLS48556_H - -#include "pair8_BLS48556.h" - -using namespace core; - -namespace BLS48556 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS48556 MODBYTES_B560_58 /**< BLS Group Size */ -#define BFS_BLS48556 MODBYTES_B560_58 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param m is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param m is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls256.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS256_BLS48556_H +#define BLS256_BLS48556_H + +#include "pair8_BLS48556.h" + +using namespace core; + +namespace BLS48556 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS48556 MODBYTES_B560_58 /**< BLS Group Size */ +#define BFS_BLS48556 MODBYTES_B560_58 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param m is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param m is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48581.h index 1196da4..c868eae 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls256_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls256_BLS48581.h @@ -1,86 +1,86 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls256.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS256_BLS48581_H -#define BLS256_BLS48581_H - -#include "pair8_BLS48581.h" - -using namespace core; - -namespace BLS48581 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS48581 MODBYTES_B584_60 /**< BLS Group Size */ -#define BFS_BLS48581 MODBYTES_B584_60 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param m is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param m is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls256.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS256_BLS48581_H +#define BLS256_BLS48581_H + +#include "pair8_BLS48581.h" + +using namespace core; + +namespace BLS48581 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS48581 MODBYTES_B584_60 /**< BLS Group Size */ +#define BFS_BLS48581 MODBYTES_B584_60 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param m is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param m is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12381.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12381.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12381.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12381.h index e1bf9ff..de31cce 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12381.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12381.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BLS12381_H -#define BLS_BLS12381_H - -#include "pair_BLS12381.h" - -using namespace core; - -namespace BLS12381 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS12381 MODBYTES_B384_58 /**< BLS Group Size */ -#define BFS_BLS12381 MODBYTES_B384_58 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BLS12381_H +#define BLS_BLS12381_H + +#include "pair_BLS12381.h" + +using namespace core; + +namespace BLS12381 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS12381 MODBYTES_B384_58 /**< BLS Group Size */ +#define BFS_BLS12381 MODBYTES_B384_58 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12383.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12383.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12383.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12383.h index 32bd832..4eda3f3 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12383.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12383.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BLS12383_H -#define BLS_BLS12383_H - -#include "pair_BLS12383.h" - -using namespace core; - -namespace BLS12383 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS12383 MODBYTES_B384_58 /**< BLS Group Size */ -#define BFS_BLS12383 MODBYTES_B384_58 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BLS12383_H +#define BLS_BLS12383_H + +#include "pair_BLS12383.h" + +using namespace core; + +namespace BLS12383 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS12383 MODBYTES_B384_58 /**< BLS Group Size */ +#define BFS_BLS12383 MODBYTES_B384_58 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12443.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12443.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12443.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12443.h index 42b13f5..2d14991 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12443.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12443.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BLS12443_H -#define BLS_BLS12443_H - -#include "pair_BLS12443.h" - -using namespace core; - -namespace BLS12443 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS12443 MODBYTES_B448_60 /**< BLS Group Size */ -#define BFS_BLS12443 MODBYTES_B448_60 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BLS12443_H +#define BLS_BLS12443_H + +#include "pair_BLS12443.h" + +using namespace core; + +namespace BLS12443 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS12443 MODBYTES_B448_60 /**< BLS Group Size */ +#define BFS_BLS12443 MODBYTES_B448_60 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12461.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12461.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12461.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12461.h index f52b401..03a7e2c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BLS12461.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BLS12461.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BLS12461_H -#define BLS_BLS12461_H - -#include "pair_BLS12461.h" - -using namespace core; - -namespace BLS12461 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BLS12461 MODBYTES_B464_60 /**< BLS Group Size */ -#define BFS_BLS12461 MODBYTES_B464_60 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BLS12461_H +#define BLS_BLS12461_H + +#include "pair_BLS12461.h" + +using namespace core; + +namespace BLS12461 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BLS12461 MODBYTES_B464_60 /**< BLS Group Size */ +#define BFS_BLS12461 MODBYTES_B464_60 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN158.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN158.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN158.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN158.h index 5ae3c37..f19142d 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN158.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN158.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BN158_H -#define BLS_BN158_H - -#include "pair_BN158.h" - -using namespace core; - -namespace BN158 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BN158 MODBYTES_B160_56 /**< BLS Group Size */ -#define BFS_BN158 MODBYTES_B160_56 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BN158_H +#define BLS_BN158_H + +#include "pair_BN158.h" + +using namespace core; + +namespace BN158 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BN158 MODBYTES_B160_56 /**< BLS Group Size */ +#define BFS_BN158 MODBYTES_B160_56 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN254.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN254.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN254.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN254.h index 3c725b6..f331731 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN254.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN254.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BN254_H -#define BLS_BN254_H - -#include "pair_BN254.h" - -using namespace core; - -namespace BN254 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BN254 MODBYTES_B256_56 /**< BLS Group Size */ -#define BFS_BN254 MODBYTES_B256_56 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BN254_H +#define BLS_BN254_H + +#include "pair_BN254.h" + +using namespace core; + +namespace BN254 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BN254 MODBYTES_B256_56 /**< BLS Group Size */ +#define BFS_BN254 MODBYTES_B256_56 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN254CX.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN254CX.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN254CX.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN254CX.h index a8e89b7..10b3b3d 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN254CX.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN254CX.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BN254CX_H -#define BLS_BN254CX_H - -#include "pair_BN254CX.h" - -using namespace core; - -namespace BN254CX { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BN254CX MODBYTES_B256_56 /**< BLS Group Size */ -#define BFS_BN254CX MODBYTES_B256_56 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BN254CX_H +#define BLS_BN254CX_H + +#include "pair_BN254CX.h" + +using namespace core; + +namespace BN254CX { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BN254CX MODBYTES_B256_56 /**< BLS Group Size */ +#define BFS_BN254CX MODBYTES_B256_56 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN462.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN462.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN462.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN462.h index 4593746..5563582 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_BN462.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_BN462.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_BN462_H -#define BLS_BN462_H - -#include "pair_BN462.h" - -using namespace core; - -namespace BN462 { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_BN462 MODBYTES_B464_60 /**< BLS Group Size */ -#define BFS_BN462 MODBYTES_B464_60 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_BN462_H +#define BLS_BN462_H + +#include "pair_BN462.h" + +using namespace core; + +namespace BN462 { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_BN462 MODBYTES_B464_60 /**< BLS Group Size */ +#define BFS_BN462 MODBYTES_B464_60 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_FP256BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_FP256BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_FP256BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_FP256BN.h index d699d50..ab661b5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_FP256BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_FP256BN.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_FP256BN_H -#define BLS_FP256BN_H - -#include "pair_FP256BN.h" - -using namespace core; - -namespace FP256BN { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_FP256BN MODBYTES_B256_56 /**< BLS Group Size */ -#define BFS_FP256BN MODBYTES_B256_56 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_FP256BN_H +#define BLS_FP256BN_H + +#include "pair_FP256BN.h" + +using namespace core; + +namespace FP256BN { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_FP256BN MODBYTES_B256_56 /**< BLS Group Size */ +#define BFS_FP256BN MODBYTES_B256_56 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_FP512BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_FP512BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_FP512BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_FP512BN.h index ce2b275..1459b24 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/bls_FP512BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/bls_FP512BN.h @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file bls.h - * @author Mike Scott - * @date 28th Novemebr 2018 - * @brief BLS Header file - * - * Allows some user configuration - * defines structures - * declares functions - * - */ - -#ifndef BLS_FP512BN_H -#define BLS_FP512BN_H - -#include "pair_FP512BN.h" - -using namespace core; - -namespace FP512BN { - -/* Field size is assumed to be greater than or equal to group size */ - -#define BGS_FP512BN MODBYTES_B512_60 /**< BLS Group Size */ -#define BFS_FP512BN MODBYTES_B512_60 /**< BLS Field Size */ - -#define BLS_OK 0 /**< Function completed without error */ -#define BLS_FAIL -1 /**< Point is NOT on the curve */ - -/* BLS API functions */ - - -/** @brief Initialise BLS - * - @return BLS_OK if worked, otherwise BLS_FAIL - */ -int BLS_INIT(); - -/** @brief Generate Key Pair - * - @param IKM contains truly random keying material - @param S on output a private key - @param W on output a public key = S*G, where G is fixed generator - @return BLS_OK - */ -int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); - -/** @brief Calculate a signature - * - @param SIG the ouput signature - @param M is the message to be signed - @param S an input private key - @return BLS_OK - */ -int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); - -/** @brief Verify a signature - * - @param SIG an input signature - @param M is the message whose signature is to be verified. - @param W an public key - @return BLS_OK if verified, otherwise BLS_FAIL - */ -int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bls.h + * @author Mike Scott + * @date 28th Novemebr 2018 + * @brief BLS Header file + * + * Allows some user configuration + * defines structures + * declares functions + * + */ + +#ifndef BLS_FP512BN_H +#define BLS_FP512BN_H + +#include "pair_FP512BN.h" + +using namespace core; + +namespace FP512BN { + +/* Field size is assumed to be greater than or equal to group size */ + +#define BGS_FP512BN MODBYTES_B512_60 /**< BLS Group Size */ +#define BFS_FP512BN MODBYTES_B512_60 /**< BLS Field Size */ + +#define BLS_OK 0 /**< Function completed without error */ +#define BLS_FAIL -1 /**< Point is NOT on the curve */ + +/* BLS API functions */ + + +/** @brief Initialise BLS + * + @return BLS_OK if worked, otherwise BLS_FAIL + */ +int BLS_INIT(); + +/** @brief Generate Key Pair + * + @param IKM contains truly random keying material + @param S on output a private key + @param W on output a public key = S*G, where G is fixed generator + @return BLS_OK + */ +int BLS_KEY_PAIR_GENERATE(octet *IKM, octet* S, octet *W); + +/** @brief Calculate a signature + * + @param SIG the ouput signature + @param M is the message to be signed + @param S an input private key + @return BLS_OK + */ +int BLS_CORE_SIGN(octet *SIG, octet *M, octet *S); + +/** @brief Verify a signature + * + @param SIG an input signature + @param M is the message whose signature is to be verified. + @param W an public key + @return BLS_OK if verified, otherwise BLS_FAIL + */ +int BLS_CORE_VERIFY(octet *SIG, octet *M, octet *W); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_big.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_big.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B160_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B160_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B160_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B160_56.h index e07a289..3c3e9e7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B160_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B160_56.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B160_56_H -#define CONFIG_BIG_B160_56_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B160_56 20 -#define BASEBITS_B160_56 56 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B160_56_H +#define CONFIG_BIG_B160_56_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B160_56 20 +#define BASEBITS_B160_56 56 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B168_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B168_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B168_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B168_60.h index 5180f26..5cc2f30 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B168_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B168_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B168_60_H -#define CONFIG_BIG_B168_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B168_60 21 -#define BASEBITS_B168_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B168_60_H +#define CONFIG_BIG_B168_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B168_60 21 +#define BASEBITS_B168_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B256_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B256_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B256_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B256_56.h index 0cb6488..64d8b22 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B256_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B256_56.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B256_56_H -#define CONFIG_BIG_B256_56_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B256_56 32 -#define BASEBITS_B256_56 56 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B256_56_H +#define CONFIG_BIG_B256_56_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B256_56 32 +#define BASEBITS_B256_56 56 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B288_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B288_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B288_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B288_60.h index 7aa116a..135663e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B288_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B288_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B288_60_H -#define CONFIG_BIG_B288_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B288_60 36 -#define BASEBITS_B288_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B288_60_H +#define CONFIG_BIG_B288_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B288_60 36 +#define BASEBITS_B288_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B336_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B336_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B336_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B336_60.h index 5cdd05d..db7c7bd 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B336_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B336_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B336_60_H -#define CONFIG_BIG_B336_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B336_60 42 -#define BASEBITS_B336_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B336_60_H +#define CONFIG_BIG_B336_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B336_60 42 +#define BASEBITS_B336_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B384_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B384_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B384_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B384_56.h index acfb14f..8c707de 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B384_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B384_56.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B384_56_H -#define CONFIG_BIG_B384_56_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B384_56 48 -#define BASEBITS_B384_56 56 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B384_56_H +#define CONFIG_BIG_B384_56_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B384_56 48 +#define BASEBITS_B384_56 56 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B384_58.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B384_58.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B384_58.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B384_58.h index 0d9dce8..abc05bb 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B384_58.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B384_58.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B384_58_H -#define CONFIG_BIG_B384_58_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B384_58 48 -#define BASEBITS_B384_58 58 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B384_58_H +#define CONFIG_BIG_B384_58_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B384_58 48 +#define BASEBITS_B384_58 58 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B416_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B416_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B416_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B416_60.h index 8aaab21..f57fbe9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B416_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B416_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B416_60_H -#define CONFIG_BIG_B416_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B416_60 52 -#define BASEBITS_B416_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B416_60_H +#define CONFIG_BIG_B416_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B416_60 52 +#define BASEBITS_B416_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B448_58.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B448_58.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B448_58.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B448_58.h index 83fff6c..bd3d2fa 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B448_58.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B448_58.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B448_58_H -#define CONFIG_BIG_B448_58_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B448_58 56 -#define BASEBITS_B448_58 58 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B448_58_H +#define CONFIG_BIG_B448_58_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B448_58 56 +#define BASEBITS_B448_58 58 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B448_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B448_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B448_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B448_60.h index c031342..622ae94 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B448_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B448_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B448_60_H -#define CONFIG_BIG_B448_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B448_60 56 -#define BASEBITS_B448_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B448_60_H +#define CONFIG_BIG_B448_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B448_60 56 +#define BASEBITS_B448_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B464_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B464_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B464_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B464_60.h index cc0daa5..558d678 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B464_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B464_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B464_60_H -#define CONFIG_BIG_B464_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B464_60 58 -#define BASEBITS_B464_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B464_60_H +#define CONFIG_BIG_B464_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B464_60 58 +#define BASEBITS_B464_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B480_56.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B480_56.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B480_56.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B480_56.h index 1b0f11f..c7e730c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B480_56.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B480_56.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B480_56_H -#define CONFIG_BIG_B480_56_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B480_56 60 -#define BASEBITS_B480_56 56 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B480_56_H +#define CONFIG_BIG_B480_56_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B480_56 60 +#define BASEBITS_B480_56 56 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B512_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B512_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B512_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B512_60.h index e2dce43..180f4ab 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B512_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B512_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B512_60_H -#define CONFIG_BIG_B512_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B512_60 64 -#define BASEBITS_B512_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B512_60_H +#define CONFIG_BIG_B512_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B512_60 64 +#define BASEBITS_B512_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B528_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B528_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B528_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B528_60.h index fa3c8dc..334db43 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B528_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B528_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B528_60_H -#define CONFIG_BIG_B528_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B528_60 66 -#define BASEBITS_B528_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B528_60_H +#define CONFIG_BIG_B528_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B528_60 66 +#define BASEBITS_B528_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B560_58.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B560_58.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B560_58.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B560_58.h index c2f9f59..4157e14 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B560_58.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B560_58.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B560_58_H -#define CONFIG_BIG_B560_58_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B560_58 70 -#define BASEBITS_B560_58 58 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B560_58_H +#define CONFIG_BIG_B560_58_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B560_58 70 +#define BASEBITS_B560_58 58 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B584_60.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B584_60.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B584_60.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B584_60.h index 733d55e..5e611b3 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_big_B584_60.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_big_B584_60.h @@ -1,31 +1,31 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_BIG_B584_60_H -#define CONFIG_BIG_B584_60_H - -#include"core.h" - -// BIG stuff - -#define MODBYTES_B584_60 73 -#define BASEBITS_B584_60 60 - - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_BIG_B584_60_H +#define CONFIG_BIG_B584_60_H + +#include"core.h" + +// BIG stuff + +#define MODBYTES_B584_60 73 +#define BASEBITS_B584_60 60 + + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_curve.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_curve.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_ANSSI.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_ANSSI.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_ANSSI.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_ANSSI.h index 9b5648f..5fd0554 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_ANSSI.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_ANSSI.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_ANSSI_H -#define CONFIG_CURVE_ANSSI_H - -#include"core.h" -#include"config_field_ANSSI.h" - -// ECP stuff - -#define CURVETYPE_ANSSI WEIERSTRASS -#define CURVE_A_ANSSI -3 -#define PAIRING_FRIENDLY_ANSSI NOT_PF -#define CURVE_SECURITY_ANSSI 128 -#define HTC_ISO_ANSSI 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_ANSSI - -#if PAIRING_FRIENDLY_ANSSI != NOT_PF - -#define HTC_ISO_G2_ANSSI 0 - -#define USE_GLV_ANSSI /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_ANSSI /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_ANSSI /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_ANSSI -#define SIGN_OF_X_ANSSI - -#define ATE_BITS_ANSSI -#define G2_TABLE_ANSSI - -#endif - - -#if CURVE_SECURITY_ANSSI == 128 -#define AESKEY_ANSSI 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_ANSSI SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_ANSSI == 192 -#define AESKEY_ANSSI 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_ANSSI SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_ANSSI == 256 -#define AESKEY_ANSSI 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_ANSSI SHA512 /**< Hash type */ -#endif - - -namespace ANSSI_BIG = B256_56; -namespace ANSSI_FP = ANSSI; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_ANSSI_H +#define CONFIG_CURVE_ANSSI_H + +#include"core.h" +#include"config_field_ANSSI.h" + +// ECP stuff + +#define CURVETYPE_ANSSI WEIERSTRASS +#define CURVE_A_ANSSI -3 +#define PAIRING_FRIENDLY_ANSSI NOT_PF +#define CURVE_SECURITY_ANSSI 128 +#define HTC_ISO_ANSSI 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_ANSSI + +#if PAIRING_FRIENDLY_ANSSI != NOT_PF + +#define HTC_ISO_G2_ANSSI 0 + +#define USE_GLV_ANSSI /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_ANSSI /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_ANSSI /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_ANSSI +#define SIGN_OF_X_ANSSI + +#define ATE_BITS_ANSSI +#define G2_TABLE_ANSSI + +#endif + + +#if CURVE_SECURITY_ANSSI == 128 +#define AESKEY_ANSSI 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_ANSSI SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_ANSSI == 192 +#define AESKEY_ANSSI 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_ANSSI SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_ANSSI == 256 +#define AESKEY_ANSSI 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_ANSSI SHA512 /**< Hash type */ +#endif + + +namespace ANSSI_BIG = B256_56; +namespace ANSSI_FP = ANSSI; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12381.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12381.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12381.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12381.h index 14993f8..16c7f52 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12381.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12381.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS12381_H -#define CONFIG_CURVE_BLS12381_H - -#include"core.h" -#include"config_field_BLS12381.h" - -// ECP stuff - -#define CURVETYPE_BLS12381 WEIERSTRASS -#define CURVE_A_BLS12381 0 -#define PAIRING_FRIENDLY_BLS12381 BLS12_CURVE -#define CURVE_SECURITY_BLS12381 128 -#define HTC_ISO_BLS12381 11 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS12381 - -#if PAIRING_FRIENDLY_BLS12381 != NOT_PF - -#define HTC_ISO_G2_BLS12381 3 - -#define USE_GLV_BLS12381 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS12381 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS12381 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS12381 M_TYPE -#define SIGN_OF_X_BLS12381 NEGATIVEX - -#define ATE_BITS_BLS12381 65 -#define G2_TABLE_BLS12381 69 - -#endif - - -#if CURVE_SECURITY_BLS12381 == 128 -#define AESKEY_BLS12381 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS12381 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12381 == 192 -#define AESKEY_BLS12381 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS12381 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12381 == 256 -#define AESKEY_BLS12381 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS12381 SHA512 /**< Hash type */ -#endif - - -namespace BLS12381_BIG = B384_58; -namespace BLS12381_FP = BLS12381; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS12381_H +#define CONFIG_CURVE_BLS12381_H + +#include"core.h" +#include"config_field_BLS12381.h" + +// ECP stuff + +#define CURVETYPE_BLS12381 WEIERSTRASS +#define CURVE_A_BLS12381 0 +#define PAIRING_FRIENDLY_BLS12381 BLS12_CURVE +#define CURVE_SECURITY_BLS12381 128 +#define HTC_ISO_BLS12381 11 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS12381 + +#if PAIRING_FRIENDLY_BLS12381 != NOT_PF + +#define HTC_ISO_G2_BLS12381 3 + +#define USE_GLV_BLS12381 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS12381 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS12381 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS12381 M_TYPE +#define SIGN_OF_X_BLS12381 NEGATIVEX + +#define ATE_BITS_BLS12381 65 +#define G2_TABLE_BLS12381 69 + +#endif + + +#if CURVE_SECURITY_BLS12381 == 128 +#define AESKEY_BLS12381 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS12381 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12381 == 192 +#define AESKEY_BLS12381 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS12381 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12381 == 256 +#define AESKEY_BLS12381 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS12381 SHA512 /**< Hash type */ +#endif + + +namespace BLS12381_BIG = B384_58; +namespace BLS12381_FP = BLS12381; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12383.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12383.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12383.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12383.h index 9c50bfc..961080b 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12383.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12383.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS12383_H -#define CONFIG_CURVE_BLS12383_H - -#include"core.h" -#include"config_field_BLS12383.h" - -// ECP stuff - -#define CURVETYPE_BLS12383 WEIERSTRASS -#define CURVE_A_BLS12383 0 -#define PAIRING_FRIENDLY_BLS12383 BLS12_CURVE -#define CURVE_SECURITY_BLS12383 128 -#define HTC_ISO_BLS12383 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS12383 - -#if PAIRING_FRIENDLY_BLS12383 != NOT_PF - -#define HTC_ISO_G2_BLS12383 0 - -#define USE_GLV_BLS12383 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS12383 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS12383 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS12383 M_TYPE -#define SIGN_OF_X_BLS12383 POSITIVEX - -#define ATE_BITS_BLS12383 65 -#define G2_TABLE_BLS12383 68 - -#endif - - -#if CURVE_SECURITY_BLS12383 == 128 -#define AESKEY_BLS12383 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS12383 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12383 == 192 -#define AESKEY_BLS12383 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS12383 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12383 == 256 -#define AESKEY_BLS12383 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS12383 SHA512 /**< Hash type */ -#endif - - -namespace BLS12383_BIG = B384_58; -namespace BLS12383_FP = BLS12383; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS12383_H +#define CONFIG_CURVE_BLS12383_H + +#include"core.h" +#include"config_field_BLS12383.h" + +// ECP stuff + +#define CURVETYPE_BLS12383 WEIERSTRASS +#define CURVE_A_BLS12383 0 +#define PAIRING_FRIENDLY_BLS12383 BLS12_CURVE +#define CURVE_SECURITY_BLS12383 128 +#define HTC_ISO_BLS12383 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS12383 + +#if PAIRING_FRIENDLY_BLS12383 != NOT_PF + +#define HTC_ISO_G2_BLS12383 0 + +#define USE_GLV_BLS12383 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS12383 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS12383 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS12383 M_TYPE +#define SIGN_OF_X_BLS12383 POSITIVEX + +#define ATE_BITS_BLS12383 65 +#define G2_TABLE_BLS12383 68 + +#endif + + +#if CURVE_SECURITY_BLS12383 == 128 +#define AESKEY_BLS12383 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS12383 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12383 == 192 +#define AESKEY_BLS12383 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS12383 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12383 == 256 +#define AESKEY_BLS12383 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS12383 SHA512 /**< Hash type */ +#endif + + +namespace BLS12383_BIG = B384_58; +namespace BLS12383_FP = BLS12383; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12443.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12443.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12443.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12443.h index 087b02f..f69036f 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12443.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12443.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS12443_H -#define CONFIG_CURVE_BLS12443_H - -#include"core.h" -#include"config_field_BLS12443.h" - -// ECP stuff - -#define CURVETYPE_BLS12443 WEIERSTRASS -#define CURVE_A_BLS12443 0 -#define PAIRING_FRIENDLY_BLS12443 BLS12_CURVE -#define CURVE_SECURITY_BLS12443 128 -#define HTC_ISO_BLS12443 11 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS12443 - -#if PAIRING_FRIENDLY_BLS12443 != NOT_PF - -#define HTC_ISO_G2_BLS12443 3 - -#define USE_GLV_BLS12443 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS12443 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS12443 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS12443 M_TYPE -#define SIGN_OF_X_BLS12443 POSITIVEX - -#define ATE_BITS_BLS12443 75 -#define G2_TABLE_BLS12443 78 - -#endif - - -#if CURVE_SECURITY_BLS12443 == 128 -#define AESKEY_BLS12443 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS12443 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12443 == 192 -#define AESKEY_BLS12443 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS12443 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12443 == 256 -#define AESKEY_BLS12443 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS12443 SHA512 /**< Hash type */ -#endif - - -namespace BLS12443_BIG = B448_60; -namespace BLS12443_FP = BLS12443; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS12443_H +#define CONFIG_CURVE_BLS12443_H + +#include"core.h" +#include"config_field_BLS12443.h" + +// ECP stuff + +#define CURVETYPE_BLS12443 WEIERSTRASS +#define CURVE_A_BLS12443 0 +#define PAIRING_FRIENDLY_BLS12443 BLS12_CURVE +#define CURVE_SECURITY_BLS12443 128 +#define HTC_ISO_BLS12443 11 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS12443 + +#if PAIRING_FRIENDLY_BLS12443 != NOT_PF + +#define HTC_ISO_G2_BLS12443 3 + +#define USE_GLV_BLS12443 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS12443 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS12443 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS12443 M_TYPE +#define SIGN_OF_X_BLS12443 POSITIVEX + +#define ATE_BITS_BLS12443 75 +#define G2_TABLE_BLS12443 78 + +#endif + + +#if CURVE_SECURITY_BLS12443 == 128 +#define AESKEY_BLS12443 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS12443 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12443 == 192 +#define AESKEY_BLS12443 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS12443 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12443 == 256 +#define AESKEY_BLS12443 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS12443 SHA512 /**< Hash type */ +#endif + + +namespace BLS12443_BIG = B448_60; +namespace BLS12443_FP = BLS12443; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12461.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12461.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12461.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12461.h index 1648b99..d98a7c6 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS12461.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS12461.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS12461_H -#define CONFIG_CURVE_BLS12461_H - -#include"core.h" -#include"config_field_BLS12461.h" - -// ECP stuff - -#define CURVETYPE_BLS12461 WEIERSTRASS -#define CURVE_A_BLS12461 0 -#define PAIRING_FRIENDLY_BLS12461 BLS12_CURVE -#define CURVE_SECURITY_BLS12461 128 -#define HTC_ISO_BLS12461 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS12461 - -#if PAIRING_FRIENDLY_BLS12461 != NOT_PF - -#define HTC_ISO_G2_BLS12461 0 - -#define USE_GLV_BLS12461 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS12461 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS12461 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS12461 M_TYPE -#define SIGN_OF_X_BLS12461 NEGATIVEX - -#define ATE_BITS_BLS12461 78 -#define G2_TABLE_BLS12461 79 - -#endif - - -#if CURVE_SECURITY_BLS12461 == 128 -#define AESKEY_BLS12461 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS12461 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12461 == 192 -#define AESKEY_BLS12461 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS12461 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS12461 == 256 -#define AESKEY_BLS12461 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS12461 SHA512 /**< Hash type */ -#endif - - -namespace BLS12461_BIG = B464_60; -namespace BLS12461_FP = BLS12461; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS12461_H +#define CONFIG_CURVE_BLS12461_H + +#include"core.h" +#include"config_field_BLS12461.h" + +// ECP stuff + +#define CURVETYPE_BLS12461 WEIERSTRASS +#define CURVE_A_BLS12461 0 +#define PAIRING_FRIENDLY_BLS12461 BLS12_CURVE +#define CURVE_SECURITY_BLS12461 128 +#define HTC_ISO_BLS12461 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS12461 + +#if PAIRING_FRIENDLY_BLS12461 != NOT_PF + +#define HTC_ISO_G2_BLS12461 0 + +#define USE_GLV_BLS12461 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS12461 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS12461 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS12461 M_TYPE +#define SIGN_OF_X_BLS12461 NEGATIVEX + +#define ATE_BITS_BLS12461 78 +#define G2_TABLE_BLS12461 79 + +#endif + + +#if CURVE_SECURITY_BLS12461 == 128 +#define AESKEY_BLS12461 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS12461 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12461 == 192 +#define AESKEY_BLS12461 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS12461 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS12461 == 256 +#define AESKEY_BLS12461 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS12461 SHA512 /**< Hash type */ +#endif + + +namespace BLS12461_BIG = B464_60; +namespace BLS12461_FP = BLS12461; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS24479.h index 1c1735b..15194b7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS24479.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS24479_H -#define CONFIG_CURVE_BLS24479_H - -#include"core.h" -#include"config_field_BLS24479.h" - -// ECP stuff - -#define CURVETYPE_BLS24479 WEIERSTRASS -#define CURVE_A_BLS24479 0 -#define PAIRING_FRIENDLY_BLS24479 BLS24_CURVE -#define CURVE_SECURITY_BLS24479 192 -#define HTC_ISO_BLS24479 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS24479 - -#if PAIRING_FRIENDLY_BLS24479 != NOT_PF - -#define HTC_ISO_G2_BLS24479 0 - -#define USE_GLV_BLS24479 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS24479 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS24479 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS24479 M_TYPE -#define SIGN_OF_X_BLS24479 POSITIVEX - -#define ATE_BITS_BLS24479 49 -#define G2_TABLE_BLS24479 52 - -#endif - - -#if CURVE_SECURITY_BLS24479 == 128 -#define AESKEY_BLS24479 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS24479 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS24479 == 192 -#define AESKEY_BLS24479 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS24479 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS24479 == 256 -#define AESKEY_BLS24479 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS24479 SHA512 /**< Hash type */ -#endif - - -namespace BLS24479_BIG = B480_56; -namespace BLS24479_FP = BLS24479; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS24479_H +#define CONFIG_CURVE_BLS24479_H + +#include"core.h" +#include"config_field_BLS24479.h" + +// ECP stuff + +#define CURVETYPE_BLS24479 WEIERSTRASS +#define CURVE_A_BLS24479 0 +#define PAIRING_FRIENDLY_BLS24479 BLS24_CURVE +#define CURVE_SECURITY_BLS24479 192 +#define HTC_ISO_BLS24479 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS24479 + +#if PAIRING_FRIENDLY_BLS24479 != NOT_PF + +#define HTC_ISO_G2_BLS24479 0 + +#define USE_GLV_BLS24479 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS24479 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS24479 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS24479 M_TYPE +#define SIGN_OF_X_BLS24479 POSITIVEX + +#define ATE_BITS_BLS24479 49 +#define G2_TABLE_BLS24479 52 + +#endif + + +#if CURVE_SECURITY_BLS24479 == 128 +#define AESKEY_BLS24479 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS24479 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS24479 == 192 +#define AESKEY_BLS24479 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS24479 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS24479 == 256 +#define AESKEY_BLS24479 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS24479 SHA512 /**< Hash type */ +#endif + + +namespace BLS24479_BIG = B480_56; +namespace BLS24479_FP = BLS24479; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48286.h index 792c00e..90bbad7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48286.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS48286_H -#define CONFIG_CURVE_BLS48286_H - -#include"core.h" -#include"config_field_BLS48286.h" - -// ECP stuff - -#define CURVETYPE_BLS48286 WEIERSTRASS -#define CURVE_A_BLS48286 0 -#define PAIRING_FRIENDLY_BLS48286 BLS48_CURVE -#define CURVE_SECURITY_BLS48286 128 -#define HTC_ISO_BLS48286 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS48286 - -#if PAIRING_FRIENDLY_BLS48286 != NOT_PF - -#define HTC_ISO_G2_BLS48286 0 - -#define USE_GLV_BLS48286 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS48286 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS48286 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS48286 M_TYPE -#define SIGN_OF_X_BLS48286 POSITIVEX - -#define ATE_BITS_BLS48286 17 -#define G2_TABLE_BLS48286 20 - -#endif - - -#if CURVE_SECURITY_BLS48286 == 128 -#define AESKEY_BLS48286 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS48286 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS48286 == 192 -#define AESKEY_BLS48286 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS48286 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS48286 == 256 -#define AESKEY_BLS48286 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS48286 SHA512 /**< Hash type */ -#endif - - -namespace BLS48286_BIG = B288_60; -namespace BLS48286_FP = BLS48286; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS48286_H +#define CONFIG_CURVE_BLS48286_H + +#include"core.h" +#include"config_field_BLS48286.h" + +// ECP stuff + +#define CURVETYPE_BLS48286 WEIERSTRASS +#define CURVE_A_BLS48286 0 +#define PAIRING_FRIENDLY_BLS48286 BLS48_CURVE +#define CURVE_SECURITY_BLS48286 128 +#define HTC_ISO_BLS48286 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS48286 + +#if PAIRING_FRIENDLY_BLS48286 != NOT_PF + +#define HTC_ISO_G2_BLS48286 0 + +#define USE_GLV_BLS48286 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS48286 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS48286 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS48286 M_TYPE +#define SIGN_OF_X_BLS48286 POSITIVEX + +#define ATE_BITS_BLS48286 17 +#define G2_TABLE_BLS48286 20 + +#endif + + +#if CURVE_SECURITY_BLS48286 == 128 +#define AESKEY_BLS48286 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS48286 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS48286 == 192 +#define AESKEY_BLS48286 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS48286 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS48286 == 256 +#define AESKEY_BLS48286 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS48286 SHA512 /**< Hash type */ +#endif + + +namespace BLS48286_BIG = B288_60; +namespace BLS48286_FP = BLS48286; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48556.h index dd20b2a..91e026b 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48556.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS48556_H -#define CONFIG_CURVE_BLS48556_H - -#include"core.h" -#include"config_field_BLS48556.h" - -// ECP stuff - -#define CURVETYPE_BLS48556 WEIERSTRASS -#define CURVE_A_BLS48556 0 -#define PAIRING_FRIENDLY_BLS48556 BLS48_CURVE -#define CURVE_SECURITY_BLS48556 256 -#define HTC_ISO_BLS48556 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS48556 - -#if PAIRING_FRIENDLY_BLS48556 != NOT_PF - -#define HTC_ISO_G2_BLS48556 0 - -#define USE_GLV_BLS48556 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS48556 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS48556 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS48556 M_TYPE -#define SIGN_OF_X_BLS48556 POSITIVEX - -#define ATE_BITS_BLS48556 32 -#define G2_TABLE_BLS48556 35 - -#endif - - -#if CURVE_SECURITY_BLS48556 == 128 -#define AESKEY_BLS48556 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS48556 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS48556 == 192 -#define AESKEY_BLS48556 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS48556 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS48556 == 256 -#define AESKEY_BLS48556 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS48556 SHA512 /**< Hash type */ -#endif - - -namespace BLS48556_BIG = B560_58; -namespace BLS48556_FP = BLS48556; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS48556_H +#define CONFIG_CURVE_BLS48556_H + +#include"core.h" +#include"config_field_BLS48556.h" + +// ECP stuff + +#define CURVETYPE_BLS48556 WEIERSTRASS +#define CURVE_A_BLS48556 0 +#define PAIRING_FRIENDLY_BLS48556 BLS48_CURVE +#define CURVE_SECURITY_BLS48556 256 +#define HTC_ISO_BLS48556 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS48556 + +#if PAIRING_FRIENDLY_BLS48556 != NOT_PF + +#define HTC_ISO_G2_BLS48556 0 + +#define USE_GLV_BLS48556 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS48556 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS48556 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS48556 M_TYPE +#define SIGN_OF_X_BLS48556 POSITIVEX + +#define ATE_BITS_BLS48556 32 +#define G2_TABLE_BLS48556 35 + +#endif + + +#if CURVE_SECURITY_BLS48556 == 128 +#define AESKEY_BLS48556 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS48556 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS48556 == 192 +#define AESKEY_BLS48556 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS48556 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS48556 == 256 +#define AESKEY_BLS48556 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS48556 SHA512 /**< Hash type */ +#endif + + +namespace BLS48556_BIG = B560_58; +namespace BLS48556_FP = BLS48556; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48581.h index fe21b47..e74b07b 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BLS48581.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BLS48581_H -#define CONFIG_CURVE_BLS48581_H - -#include"core.h" -#include"config_field_BLS48581.h" - -// ECP stuff - -#define CURVETYPE_BLS48581 WEIERSTRASS -#define CURVE_A_BLS48581 0 -#define PAIRING_FRIENDLY_BLS48581 BLS48_CURVE -#define CURVE_SECURITY_BLS48581 256 -#define HTC_ISO_BLS48581 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BLS48581 - -#if PAIRING_FRIENDLY_BLS48581 != NOT_PF - -#define HTC_ISO_G2_BLS48581 0 - -#define USE_GLV_BLS48581 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BLS48581 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BLS48581 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BLS48581 D_TYPE -#define SIGN_OF_X_BLS48581 NEGATIVEX - -#define ATE_BITS_BLS48581 33 -#define G2_TABLE_BLS48581 36 - -#endif - - -#if CURVE_SECURITY_BLS48581 == 128 -#define AESKEY_BLS48581 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BLS48581 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS48581 == 192 -#define AESKEY_BLS48581 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BLS48581 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BLS48581 == 256 -#define AESKEY_BLS48581 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BLS48581 SHA512 /**< Hash type */ -#endif - - -namespace BLS48581_BIG = B584_60; -namespace BLS48581_FP = BLS48581; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BLS48581_H +#define CONFIG_CURVE_BLS48581_H + +#include"core.h" +#include"config_field_BLS48581.h" + +// ECP stuff + +#define CURVETYPE_BLS48581 WEIERSTRASS +#define CURVE_A_BLS48581 0 +#define PAIRING_FRIENDLY_BLS48581 BLS48_CURVE +#define CURVE_SECURITY_BLS48581 256 +#define HTC_ISO_BLS48581 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BLS48581 + +#if PAIRING_FRIENDLY_BLS48581 != NOT_PF + +#define HTC_ISO_G2_BLS48581 0 + +#define USE_GLV_BLS48581 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BLS48581 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BLS48581 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BLS48581 D_TYPE +#define SIGN_OF_X_BLS48581 NEGATIVEX + +#define ATE_BITS_BLS48581 33 +#define G2_TABLE_BLS48581 36 + +#endif + + +#if CURVE_SECURITY_BLS48581 == 128 +#define AESKEY_BLS48581 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BLS48581 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS48581 == 192 +#define AESKEY_BLS48581 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BLS48581 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BLS48581 == 256 +#define AESKEY_BLS48581 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BLS48581 SHA512 /**< Hash type */ +#endif + + +namespace BLS48581_BIG = B584_60; +namespace BLS48581_FP = BLS48581; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN158.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN158.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN158.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN158.h index 821f6ac..5a689fe 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN158.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN158.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BN158_H -#define CONFIG_CURVE_BN158_H - -#include"core.h" -#include"config_field_BN158.h" - -// ECP stuff - -#define CURVETYPE_BN158 WEIERSTRASS -#define CURVE_A_BN158 0 -#define PAIRING_FRIENDLY_BN158 BN_CURVE -#define CURVE_SECURITY_BN158 128 -#define HTC_ISO_BN158 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BN158 - -#if PAIRING_FRIENDLY_BN158 != NOT_PF - -#define HTC_ISO_G2_BN158 0 - -#define USE_GLV_BN158 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BN158 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BN158 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BN158 M_TYPE -#define SIGN_OF_X_BN158 NEGATIVEX - -#define ATE_BITS_BN158 42 -#define G2_TABLE_BN158 49 - -#endif - - -#if CURVE_SECURITY_BN158 == 128 -#define AESKEY_BN158 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BN158 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN158 == 192 -#define AESKEY_BN158 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BN158 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN158 == 256 -#define AESKEY_BN158 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BN158 SHA512 /**< Hash type */ -#endif - - -namespace BN158_BIG = B160_56; -namespace BN158_FP = BN158; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BN158_H +#define CONFIG_CURVE_BN158_H + +#include"core.h" +#include"config_field_BN158.h" + +// ECP stuff + +#define CURVETYPE_BN158 WEIERSTRASS +#define CURVE_A_BN158 0 +#define PAIRING_FRIENDLY_BN158 BN_CURVE +#define CURVE_SECURITY_BN158 128 +#define HTC_ISO_BN158 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BN158 + +#if PAIRING_FRIENDLY_BN158 != NOT_PF + +#define HTC_ISO_G2_BN158 0 + +#define USE_GLV_BN158 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BN158 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BN158 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BN158 M_TYPE +#define SIGN_OF_X_BN158 NEGATIVEX + +#define ATE_BITS_BN158 42 +#define G2_TABLE_BN158 49 + +#endif + + +#if CURVE_SECURITY_BN158 == 128 +#define AESKEY_BN158 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BN158 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN158 == 192 +#define AESKEY_BN158 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BN158 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN158 == 256 +#define AESKEY_BN158 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BN158 SHA512 /**< Hash type */ +#endif + + +namespace BN158_BIG = B160_56; +namespace BN158_FP = BN158; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN254.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN254.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN254.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN254.h index f1bef15..0432c16 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN254.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN254.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BN254_H -#define CONFIG_CURVE_BN254_H - -#include"core.h" -#include"config_field_BN254.h" - -// ECP stuff - -#define CURVETYPE_BN254 WEIERSTRASS -#define CURVE_A_BN254 0 -#define PAIRING_FRIENDLY_BN254 BN_CURVE -#define CURVE_SECURITY_BN254 128 -#define HTC_ISO_BN254 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BN254 - -#if PAIRING_FRIENDLY_BN254 != NOT_PF - -#define HTC_ISO_G2_BN254 0 - -#define USE_GLV_BN254 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BN254 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BN254 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BN254 D_TYPE -#define SIGN_OF_X_BN254 NEGATIVEX - -#define ATE_BITS_BN254 66 -#define G2_TABLE_BN254 71 - -#endif - - -#if CURVE_SECURITY_BN254 == 128 -#define AESKEY_BN254 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BN254 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN254 == 192 -#define AESKEY_BN254 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BN254 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN254 == 256 -#define AESKEY_BN254 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BN254 SHA512 /**< Hash type */ -#endif - - -namespace BN254_BIG = B256_56; -namespace BN254_FP = BN254; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BN254_H +#define CONFIG_CURVE_BN254_H + +#include"core.h" +#include"config_field_BN254.h" + +// ECP stuff + +#define CURVETYPE_BN254 WEIERSTRASS +#define CURVE_A_BN254 0 +#define PAIRING_FRIENDLY_BN254 BN_CURVE +#define CURVE_SECURITY_BN254 128 +#define HTC_ISO_BN254 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BN254 + +#if PAIRING_FRIENDLY_BN254 != NOT_PF + +#define HTC_ISO_G2_BN254 0 + +#define USE_GLV_BN254 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BN254 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BN254 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BN254 D_TYPE +#define SIGN_OF_X_BN254 NEGATIVEX + +#define ATE_BITS_BN254 66 +#define G2_TABLE_BN254 71 + +#endif + + +#if CURVE_SECURITY_BN254 == 128 +#define AESKEY_BN254 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BN254 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN254 == 192 +#define AESKEY_BN254 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BN254 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN254 == 256 +#define AESKEY_BN254 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BN254 SHA512 /**< Hash type */ +#endif + + +namespace BN254_BIG = B256_56; +namespace BN254_FP = BN254; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN254CX.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN254CX.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN254CX.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN254CX.h index f446cac..af24e20 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN254CX.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN254CX.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BN254CX_H -#define CONFIG_CURVE_BN254CX_H - -#include"core.h" -#include"config_field_BN254CX.h" - -// ECP stuff - -#define CURVETYPE_BN254CX WEIERSTRASS -#define CURVE_A_BN254CX 0 -#define PAIRING_FRIENDLY_BN254CX BN_CURVE -#define CURVE_SECURITY_BN254CX 128 -#define HTC_ISO_BN254CX 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BN254CX - -#if PAIRING_FRIENDLY_BN254CX != NOT_PF - -#define HTC_ISO_G2_BN254CX 0 - -#define USE_GLV_BN254CX /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BN254CX /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BN254CX /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BN254CX D_TYPE -#define SIGN_OF_X_BN254CX NEGATIVEX - -#define ATE_BITS_BN254CX 66 -#define G2_TABLE_BN254CX 76 - -#endif - - -#if CURVE_SECURITY_BN254CX == 128 -#define AESKEY_BN254CX 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BN254CX SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN254CX == 192 -#define AESKEY_BN254CX 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BN254CX SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN254CX == 256 -#define AESKEY_BN254CX 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BN254CX SHA512 /**< Hash type */ -#endif - - -namespace BN254CX_BIG = B256_56; -namespace BN254CX_FP = BN254CX; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BN254CX_H +#define CONFIG_CURVE_BN254CX_H + +#include"core.h" +#include"config_field_BN254CX.h" + +// ECP stuff + +#define CURVETYPE_BN254CX WEIERSTRASS +#define CURVE_A_BN254CX 0 +#define PAIRING_FRIENDLY_BN254CX BN_CURVE +#define CURVE_SECURITY_BN254CX 128 +#define HTC_ISO_BN254CX 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BN254CX + +#if PAIRING_FRIENDLY_BN254CX != NOT_PF + +#define HTC_ISO_G2_BN254CX 0 + +#define USE_GLV_BN254CX /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BN254CX /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BN254CX /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BN254CX D_TYPE +#define SIGN_OF_X_BN254CX NEGATIVEX + +#define ATE_BITS_BN254CX 66 +#define G2_TABLE_BN254CX 76 + +#endif + + +#if CURVE_SECURITY_BN254CX == 128 +#define AESKEY_BN254CX 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BN254CX SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN254CX == 192 +#define AESKEY_BN254CX 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BN254CX SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN254CX == 256 +#define AESKEY_BN254CX 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BN254CX SHA512 /**< Hash type */ +#endif + + +namespace BN254CX_BIG = B256_56; +namespace BN254CX_FP = BN254CX; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN462.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN462.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN462.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN462.h index 51b4309..db222d6 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BN462.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BN462.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BN462_H -#define CONFIG_CURVE_BN462_H - -#include"core.h" -#include"config_field_BN462.h" - -// ECP stuff - -#define CURVETYPE_BN462 WEIERSTRASS -#define CURVE_A_BN462 0 -#define PAIRING_FRIENDLY_BN462 BN_CURVE -#define CURVE_SECURITY_BN462 128 -#define HTC_ISO_BN462 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BN462 - -#if PAIRING_FRIENDLY_BN462 != NOT_PF - -#define HTC_ISO_G2_BN462 0 - -#define USE_GLV_BN462 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BN462 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BN462 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BN462 D_TYPE -#define SIGN_OF_X_BN462 POSITIVEX - -#define ATE_BITS_BN462 118 -#define G2_TABLE_BN462 125 - -#endif - - -#if CURVE_SECURITY_BN462 == 128 -#define AESKEY_BN462 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BN462 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN462 == 192 -#define AESKEY_BN462 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BN462 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BN462 == 256 -#define AESKEY_BN462 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BN462 SHA512 /**< Hash type */ -#endif - - -namespace BN462_BIG = B464_60; -namespace BN462_FP = BN462; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BN462_H +#define CONFIG_CURVE_BN462_H + +#include"core.h" +#include"config_field_BN462.h" + +// ECP stuff + +#define CURVETYPE_BN462 WEIERSTRASS +#define CURVE_A_BN462 0 +#define PAIRING_FRIENDLY_BN462 BN_CURVE +#define CURVE_SECURITY_BN462 128 +#define HTC_ISO_BN462 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BN462 + +#if PAIRING_FRIENDLY_BN462 != NOT_PF + +#define HTC_ISO_G2_BN462 0 + +#define USE_GLV_BN462 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BN462 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BN462 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BN462 D_TYPE +#define SIGN_OF_X_BN462 POSITIVEX + +#define ATE_BITS_BN462 118 +#define G2_TABLE_BN462 125 + +#endif + + +#if CURVE_SECURITY_BN462 == 128 +#define AESKEY_BN462 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BN462 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN462 == 192 +#define AESKEY_BN462 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BN462 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BN462 == 256 +#define AESKEY_BN462 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BN462 SHA512 /**< Hash type */ +#endif + + +namespace BN462_BIG = B464_60; +namespace BN462_FP = BN462; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BRAINPOOL.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BRAINPOOL.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BRAINPOOL.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BRAINPOOL.h index 29cd927..bb29fb8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_BRAINPOOL.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_BRAINPOOL.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_BRAINPOOL_H -#define CONFIG_CURVE_BRAINPOOL_H - -#include"core.h" -#include"config_field_BRAINPOOL.h" - -// ECP stuff - -#define CURVETYPE_BRAINPOOL WEIERSTRASS -#define CURVE_A_BRAINPOOL -3 -#define PAIRING_FRIENDLY_BRAINPOOL NOT_PF -#define CURVE_SECURITY_BRAINPOOL 128 -#define HTC_ISO_BRAINPOOL 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_BRAINPOOL - -#if PAIRING_FRIENDLY_BRAINPOOL != NOT_PF - -#define HTC_ISO_G2_BRAINPOOL 0 - -#define USE_GLV_BRAINPOOL /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_BRAINPOOL /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_BRAINPOOL /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_BRAINPOOL -#define SIGN_OF_X_BRAINPOOL - -#define ATE_BITS_BRAINPOOL -#define G2_TABLE_BRAINPOOL - -#endif - - -#if CURVE_SECURITY_BRAINPOOL == 128 -#define AESKEY_BRAINPOOL 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_BRAINPOOL SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BRAINPOOL == 192 -#define AESKEY_BRAINPOOL 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_BRAINPOOL SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_BRAINPOOL == 256 -#define AESKEY_BRAINPOOL 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_BRAINPOOL SHA512 /**< Hash type */ -#endif - - -namespace BRAINPOOL_BIG = B256_56; -namespace BRAINPOOL_FP = BRAINPOOL; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_BRAINPOOL_H +#define CONFIG_CURVE_BRAINPOOL_H + +#include"core.h" +#include"config_field_BRAINPOOL.h" + +// ECP stuff + +#define CURVETYPE_BRAINPOOL WEIERSTRASS +#define CURVE_A_BRAINPOOL -3 +#define PAIRING_FRIENDLY_BRAINPOOL NOT_PF +#define CURVE_SECURITY_BRAINPOOL 128 +#define HTC_ISO_BRAINPOOL 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_BRAINPOOL + +#if PAIRING_FRIENDLY_BRAINPOOL != NOT_PF + +#define HTC_ISO_G2_BRAINPOOL 0 + +#define USE_GLV_BRAINPOOL /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_BRAINPOOL /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_BRAINPOOL /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_BRAINPOOL +#define SIGN_OF_X_BRAINPOOL + +#define ATE_BITS_BRAINPOOL +#define G2_TABLE_BRAINPOOL + +#endif + + +#if CURVE_SECURITY_BRAINPOOL == 128 +#define AESKEY_BRAINPOOL 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_BRAINPOOL SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BRAINPOOL == 192 +#define AESKEY_BRAINPOOL 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_BRAINPOOL SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_BRAINPOOL == 256 +#define AESKEY_BRAINPOOL 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_BRAINPOOL SHA512 /**< Hash type */ +#endif + + +namespace BRAINPOOL_BIG = B256_56; +namespace BRAINPOOL_FP = BRAINPOOL; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C1174.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C1174.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C1174.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C1174.h index d759ba7..14eb019 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C1174.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C1174.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_C1174_H -#define CONFIG_CURVE_C1174_H - -#include"core.h" -#include"config_field_C1174.h" - -// ECP stuff - -#define CURVETYPE_C1174 EDWARDS -#define CURVE_A_C1174 1 -#define PAIRING_FRIENDLY_C1174 NOT_PF -#define CURVE_SECURITY_C1174 128 -#define HTC_ISO_C1174 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_C1174 - -#if PAIRING_FRIENDLY_C1174 != NOT_PF - -#define HTC_ISO_G2_C1174 0 - -#define USE_GLV_C1174 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_C1174 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_C1174 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_C1174 -#define SIGN_OF_X_C1174 - -#define ATE_BITS_C1174 -#define G2_TABLE_C1174 - -#endif - - -#if CURVE_SECURITY_C1174 == 128 -#define AESKEY_C1174 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_C1174 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C1174 == 192 -#define AESKEY_C1174 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_C1174 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C1174 == 256 -#define AESKEY_C1174 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_C1174 SHA512 /**< Hash type */ -#endif - - -namespace C1174_BIG = B256_56; -namespace C1174_FP = C1174; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_C1174_H +#define CONFIG_CURVE_C1174_H + +#include"core.h" +#include"config_field_C1174.h" + +// ECP stuff + +#define CURVETYPE_C1174 EDWARDS +#define CURVE_A_C1174 1 +#define PAIRING_FRIENDLY_C1174 NOT_PF +#define CURVE_SECURITY_C1174 128 +#define HTC_ISO_C1174 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_C1174 + +#if PAIRING_FRIENDLY_C1174 != NOT_PF + +#define HTC_ISO_G2_C1174 0 + +#define USE_GLV_C1174 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_C1174 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_C1174 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_C1174 +#define SIGN_OF_X_C1174 + +#define ATE_BITS_C1174 +#define G2_TABLE_C1174 + +#endif + + +#if CURVE_SECURITY_C1174 == 128 +#define AESKEY_C1174 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_C1174 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C1174 == 192 +#define AESKEY_C1174 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_C1174 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C1174 == 256 +#define AESKEY_C1174 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_C1174 SHA512 /**< Hash type */ +#endif + + +namespace C1174_BIG = B256_56; +namespace C1174_FP = C1174; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C13318.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C13318.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C13318.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C13318.h index eea03ff..2107469 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C13318.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C13318.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_C13318_H -#define CONFIG_CURVE_C13318_H - -#include"core.h" -#include"config_field_F25519.h" - -// ECP stuff - -#define CURVETYPE_C13318 WEIERSTRASS -#define CURVE_A_C13318 -3 -#define PAIRING_FRIENDLY_C13318 NOT_PF -#define CURVE_SECURITY_C13318 128 -#define HTC_ISO_C13318 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_C13318 - -#if PAIRING_FRIENDLY_C13318 != NOT_PF - -#define HTC_ISO_G2_C13318 0 - -#define USE_GLV_C13318 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_C13318 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_C13318 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_C13318 -#define SIGN_OF_X_C13318 - -#define ATE_BITS_C13318 -#define G2_TABLE_C13318 - -#endif - - -#if CURVE_SECURITY_C13318 == 128 -#define AESKEY_C13318 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_C13318 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C13318 == 192 -#define AESKEY_C13318 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_C13318 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C13318 == 256 -#define AESKEY_C13318 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_C13318 SHA512 /**< Hash type */ -#endif - - -namespace C13318_BIG = B256_56; -namespace C13318_FP = F25519; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_C13318_H +#define CONFIG_CURVE_C13318_H + +#include"core.h" +#include"config_field_F25519.h" + +// ECP stuff + +#define CURVETYPE_C13318 WEIERSTRASS +#define CURVE_A_C13318 -3 +#define PAIRING_FRIENDLY_C13318 NOT_PF +#define CURVE_SECURITY_C13318 128 +#define HTC_ISO_C13318 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_C13318 + +#if PAIRING_FRIENDLY_C13318 != NOT_PF + +#define HTC_ISO_G2_C13318 0 + +#define USE_GLV_C13318 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_C13318 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_C13318 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_C13318 +#define SIGN_OF_X_C13318 + +#define ATE_BITS_C13318 +#define G2_TABLE_C13318 + +#endif + + +#if CURVE_SECURITY_C13318 == 128 +#define AESKEY_C13318 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_C13318 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C13318 == 192 +#define AESKEY_C13318 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_C13318 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C13318 == 256 +#define AESKEY_C13318 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_C13318 SHA512 /**< Hash type */ +#endif + + +namespace C13318_BIG = B256_56; +namespace C13318_FP = F25519; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C1665.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C1665.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C1665.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C1665.h index f8239c7..256fa7f 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C1665.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C1665.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_C1665_H -#define CONFIG_CURVE_C1665_H - -#include"core.h" -#include"config_field_C1665.h" - -// ECP stuff - -#define CURVETYPE_C1665 EDWARDS -#define CURVE_A_C1665 1 -#define PAIRING_FRIENDLY_C1665 NOT_PF -#define CURVE_SECURITY_C1665 128 -#define HTC_ISO_C1665 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_C1665 - -#if PAIRING_FRIENDLY_C1665 != NOT_PF - -#define HTC_ISO_G2_C1665 0 - -#define USE_GLV_C1665 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_C1665 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_C1665 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_C1665 -#define SIGN_OF_X_C1665 - -#define ATE_BITS_C1665 -#define G2_TABLE_C1665 - -#endif - - -#if CURVE_SECURITY_C1665 == 128 -#define AESKEY_C1665 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_C1665 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C1665 == 192 -#define AESKEY_C1665 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_C1665 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C1665 == 256 -#define AESKEY_C1665 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_C1665 SHA512 /**< Hash type */ -#endif - - -namespace C1665_BIG = B168_60; -namespace C1665_FP = C1665; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_C1665_H +#define CONFIG_CURVE_C1665_H + +#include"core.h" +#include"config_field_C1665.h" + +// ECP stuff + +#define CURVETYPE_C1665 EDWARDS +#define CURVE_A_C1665 1 +#define PAIRING_FRIENDLY_C1665 NOT_PF +#define CURVE_SECURITY_C1665 128 +#define HTC_ISO_C1665 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_C1665 + +#if PAIRING_FRIENDLY_C1665 != NOT_PF + +#define HTC_ISO_G2_C1665 0 + +#define USE_GLV_C1665 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_C1665 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_C1665 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_C1665 +#define SIGN_OF_X_C1665 + +#define ATE_BITS_C1665 +#define G2_TABLE_C1665 + +#endif + + +#if CURVE_SECURITY_C1665 == 128 +#define AESKEY_C1665 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_C1665 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C1665 == 192 +#define AESKEY_C1665 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_C1665 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C1665 == 256 +#define AESKEY_C1665 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_C1665 SHA512 /**< Hash type */ +#endif + + +namespace C1665_BIG = B168_60; +namespace C1665_FP = C1665; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C25519.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C25519.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C25519.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C25519.h index ffa0325..21b6ce6 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C25519.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C25519.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_C25519_H -#define CONFIG_CURVE_C25519_H - -#include"core.h" -#include"config_field_F25519.h" - -// ECP stuff - -#define CURVETYPE_C25519 MONTGOMERY -#define CURVE_A_C25519 486662 -#define PAIRING_FRIENDLY_C25519 NOT_PF -#define CURVE_SECURITY_C25519 128 -#define HTC_ISO_C25519 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_C25519 - -#if PAIRING_FRIENDLY_C25519 != NOT_PF - -#define HTC_ISO_G2_C25519 0 - -#define USE_GLV_C25519 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_C25519 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_C25519 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_C25519 -#define SIGN_OF_X_C25519 - -#define ATE_BITS_C25519 -#define G2_TABLE_C25519 - -#endif - - -#if CURVE_SECURITY_C25519 == 128 -#define AESKEY_C25519 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_C25519 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C25519 == 192 -#define AESKEY_C25519 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_C25519 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C25519 == 256 -#define AESKEY_C25519 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_C25519 SHA512 /**< Hash type */ -#endif - - -namespace C25519_BIG = B256_56; -namespace C25519_FP = F25519; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_C25519_H +#define CONFIG_CURVE_C25519_H + +#include"core.h" +#include"config_field_F25519.h" + +// ECP stuff + +#define CURVETYPE_C25519 MONTGOMERY +#define CURVE_A_C25519 486662 +#define PAIRING_FRIENDLY_C25519 NOT_PF +#define CURVE_SECURITY_C25519 128 +#define HTC_ISO_C25519 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_C25519 + +#if PAIRING_FRIENDLY_C25519 != NOT_PF + +#define HTC_ISO_G2_C25519 0 + +#define USE_GLV_C25519 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_C25519 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_C25519 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_C25519 +#define SIGN_OF_X_C25519 + +#define ATE_BITS_C25519 +#define G2_TABLE_C25519 + +#endif + + +#if CURVE_SECURITY_C25519 == 128 +#define AESKEY_C25519 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_C25519 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C25519 == 192 +#define AESKEY_C25519 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_C25519 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C25519 == 256 +#define AESKEY_C25519 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_C25519 SHA512 /**< Hash type */ +#endif + + +namespace C25519_BIG = B256_56; +namespace C25519_FP = F25519; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C41417.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C41417.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C41417.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C41417.h index f66b588..e3ee32c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_C41417.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_C41417.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_C41417_H -#define CONFIG_CURVE_C41417_H - -#include"core.h" -#include"config_field_C41417.h" - -// ECP stuff - -#define CURVETYPE_C41417 EDWARDS -#define CURVE_A_C41417 1 -#define PAIRING_FRIENDLY_C41417 NOT_PF -#define CURVE_SECURITY_C41417 256 -#define HTC_ISO_C41417 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_C41417 - -#if PAIRING_FRIENDLY_C41417 != NOT_PF - -#define HTC_ISO_G2_C41417 0 - -#define USE_GLV_C41417 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_C41417 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_C41417 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_C41417 -#define SIGN_OF_X_C41417 - -#define ATE_BITS_C41417 -#define G2_TABLE_C41417 - -#endif - - -#if CURVE_SECURITY_C41417 == 128 -#define AESKEY_C41417 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_C41417 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C41417 == 192 -#define AESKEY_C41417 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_C41417 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_C41417 == 256 -#define AESKEY_C41417 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_C41417 SHA512 /**< Hash type */ -#endif - - -namespace C41417_BIG = B416_60; -namespace C41417_FP = C41417; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_C41417_H +#define CONFIG_CURVE_C41417_H + +#include"core.h" +#include"config_field_C41417.h" + +// ECP stuff + +#define CURVETYPE_C41417 EDWARDS +#define CURVE_A_C41417 1 +#define PAIRING_FRIENDLY_C41417 NOT_PF +#define CURVE_SECURITY_C41417 256 +#define HTC_ISO_C41417 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_C41417 + +#if PAIRING_FRIENDLY_C41417 != NOT_PF + +#define HTC_ISO_G2_C41417 0 + +#define USE_GLV_C41417 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_C41417 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_C41417 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_C41417 +#define SIGN_OF_X_C41417 + +#define ATE_BITS_C41417 +#define G2_TABLE_C41417 + +#endif + + +#if CURVE_SECURITY_C41417 == 128 +#define AESKEY_C41417 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_C41417 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C41417 == 192 +#define AESKEY_C41417 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_C41417 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_C41417 == 256 +#define AESKEY_C41417 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_C41417 SHA512 /**< Hash type */ +#endif + + +namespace C41417_BIG = B416_60; +namespace C41417_FP = C41417; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_Ed25519.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_Ed25519.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_Ed25519.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_Ed25519.h index 3f5ace7..d619828 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_Ed25519.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_Ed25519.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_Ed25519_H -#define CONFIG_CURVE_Ed25519_H - -#include"core.h" -#include"config_field_F25519.h" - -// ECP stuff - -#define CURVETYPE_Ed25519 EDWARDS -#define CURVE_A_Ed25519 -1 -#define PAIRING_FRIENDLY_Ed25519 NOT_PF -#define CURVE_SECURITY_Ed25519 128 -#define HTC_ISO_Ed25519 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_Ed25519 - -#if PAIRING_FRIENDLY_Ed25519 != NOT_PF - -#define HTC_ISO_G2_Ed25519 0 - -#define USE_GLV_Ed25519 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_Ed25519 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_Ed25519 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_Ed25519 -#define SIGN_OF_X_Ed25519 - -#define ATE_BITS_Ed25519 -#define G2_TABLE_Ed25519 - -#endif - - -#if CURVE_SECURITY_Ed25519 == 128 -#define AESKEY_Ed25519 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_Ed25519 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_Ed25519 == 192 -#define AESKEY_Ed25519 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_Ed25519 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_Ed25519 == 256 -#define AESKEY_Ed25519 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_Ed25519 SHA512 /**< Hash type */ -#endif - - -namespace Ed25519_BIG = B256_56; -namespace Ed25519_FP = F25519; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_Ed25519_H +#define CONFIG_CURVE_Ed25519_H + +#include"core.h" +#include"config_field_F25519.h" + +// ECP stuff + +#define CURVETYPE_Ed25519 EDWARDS +#define CURVE_A_Ed25519 -1 +#define PAIRING_FRIENDLY_Ed25519 NOT_PF +#define CURVE_SECURITY_Ed25519 128 +#define HTC_ISO_Ed25519 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_Ed25519 + +#if PAIRING_FRIENDLY_Ed25519 != NOT_PF + +#define HTC_ISO_G2_Ed25519 0 + +#define USE_GLV_Ed25519 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_Ed25519 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_Ed25519 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_Ed25519 +#define SIGN_OF_X_Ed25519 + +#define ATE_BITS_Ed25519 +#define G2_TABLE_Ed25519 + +#endif + + +#if CURVE_SECURITY_Ed25519 == 128 +#define AESKEY_Ed25519 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_Ed25519 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_Ed25519 == 192 +#define AESKEY_Ed25519 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_Ed25519 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_Ed25519 == 256 +#define AESKEY_Ed25519 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_Ed25519 SHA512 /**< Hash type */ +#endif + + +namespace Ed25519_BIG = B256_56; +namespace Ed25519_FP = F25519; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_Ed448.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_Ed448.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_Ed448.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_Ed448.h index f85c80e..ae385ed 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_Ed448.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_Ed448.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_Ed448_H -#define CONFIG_CURVE_Ed448_H - -#include"core.h" -#include"config_field_F448.h" - -// ECP stuff - -#define CURVETYPE_Ed448 EDWARDS -#define CURVE_A_Ed448 1 -#define PAIRING_FRIENDLY_Ed448 NOT_PF -#define CURVE_SECURITY_Ed448 256 -#define HTC_ISO_Ed448 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_Ed448 - -#if PAIRING_FRIENDLY_Ed448 != NOT_PF - -#define HTC_ISO_G2_Ed448 0 - -#define USE_GLV_Ed448 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_Ed448 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_Ed448 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_Ed448 -#define SIGN_OF_X_Ed448 - -#define ATE_BITS_Ed448 -#define G2_TABLE_Ed448 - -#endif - - -#if CURVE_SECURITY_Ed448 == 128 -#define AESKEY_Ed448 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_Ed448 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_Ed448 == 192 -#define AESKEY_Ed448 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_Ed448 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_Ed448 == 256 -#define AESKEY_Ed448 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_Ed448 SHA512 /**< Hash type */ -#endif - - -namespace Ed448_BIG = B448_58; -namespace Ed448_FP = F448; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_Ed448_H +#define CONFIG_CURVE_Ed448_H + +#include"core.h" +#include"config_field_F448.h" + +// ECP stuff + +#define CURVETYPE_Ed448 EDWARDS +#define CURVE_A_Ed448 1 +#define PAIRING_FRIENDLY_Ed448 NOT_PF +#define CURVE_SECURITY_Ed448 256 +#define HTC_ISO_Ed448 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_Ed448 + +#if PAIRING_FRIENDLY_Ed448 != NOT_PF + +#define HTC_ISO_G2_Ed448 0 + +#define USE_GLV_Ed448 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_Ed448 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_Ed448 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_Ed448 +#define SIGN_OF_X_Ed448 + +#define ATE_BITS_Ed448 +#define G2_TABLE_Ed448 + +#endif + + +#if CURVE_SECURITY_Ed448 == 128 +#define AESKEY_Ed448 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_Ed448 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_Ed448 == 192 +#define AESKEY_Ed448 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_Ed448 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_Ed448 == 256 +#define AESKEY_Ed448 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_Ed448 SHA512 /**< Hash type */ +#endif + + +namespace Ed448_BIG = B448_58; +namespace Ed448_FP = F448; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_FP256BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_FP256BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_FP256BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_FP256BN.h index 3174557..f0abef8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_FP256BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_FP256BN.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_FP256BN_H -#define CONFIG_CURVE_FP256BN_H - -#include"core.h" -#include"config_field_FP256BN.h" - -// ECP stuff - -#define CURVETYPE_FP256BN WEIERSTRASS -#define CURVE_A_FP256BN 0 -#define PAIRING_FRIENDLY_FP256BN BN_CURVE -#define CURVE_SECURITY_FP256BN 128 -#define HTC_ISO_FP256BN 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_FP256BN - -#if PAIRING_FRIENDLY_FP256BN != NOT_PF - -#define HTC_ISO_G2_FP256BN 0 - -#define USE_GLV_FP256BN /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_FP256BN /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_FP256BN /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_FP256BN M_TYPE -#define SIGN_OF_X_FP256BN NEGATIVEX - -#define ATE_BITS_FP256BN 66 -#define G2_TABLE_FP256BN 83 - -#endif - - -#if CURVE_SECURITY_FP256BN == 128 -#define AESKEY_FP256BN 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_FP256BN SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_FP256BN == 192 -#define AESKEY_FP256BN 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_FP256BN SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_FP256BN == 256 -#define AESKEY_FP256BN 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_FP256BN SHA512 /**< Hash type */ -#endif - - -namespace FP256BN_BIG = B256_56; -namespace FP256BN_FP = FP256BN; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_FP256BN_H +#define CONFIG_CURVE_FP256BN_H + +#include"core.h" +#include"config_field_FP256BN.h" + +// ECP stuff + +#define CURVETYPE_FP256BN WEIERSTRASS +#define CURVE_A_FP256BN 0 +#define PAIRING_FRIENDLY_FP256BN BN_CURVE +#define CURVE_SECURITY_FP256BN 128 +#define HTC_ISO_FP256BN 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_FP256BN + +#if PAIRING_FRIENDLY_FP256BN != NOT_PF + +#define HTC_ISO_G2_FP256BN 0 + +#define USE_GLV_FP256BN /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_FP256BN /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_FP256BN /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_FP256BN M_TYPE +#define SIGN_OF_X_FP256BN NEGATIVEX + +#define ATE_BITS_FP256BN 66 +#define G2_TABLE_FP256BN 83 + +#endif + + +#if CURVE_SECURITY_FP256BN == 128 +#define AESKEY_FP256BN 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_FP256BN SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_FP256BN == 192 +#define AESKEY_FP256BN 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_FP256BN SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_FP256BN == 256 +#define AESKEY_FP256BN 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_FP256BN SHA512 /**< Hash type */ +#endif + + +namespace FP256BN_BIG = B256_56; +namespace FP256BN_FP = FP256BN; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_FP512BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_FP512BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_FP512BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_FP512BN.h index c66ae27..42a1dcf 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_FP512BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_FP512BN.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_FP512BN_H -#define CONFIG_CURVE_FP512BN_H - -#include"core.h" -#include"config_field_FP512BN.h" - -// ECP stuff - -#define CURVETYPE_FP512BN WEIERSTRASS -#define CURVE_A_FP512BN 0 -#define PAIRING_FRIENDLY_FP512BN BN_CURVE -#define CURVE_SECURITY_FP512BN 128 -#define HTC_ISO_FP512BN 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_FP512BN - -#if PAIRING_FRIENDLY_FP512BN != NOT_PF - -#define HTC_ISO_G2_FP512BN 0 - -#define USE_GLV_FP512BN /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_FP512BN /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_FP512BN /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_FP512BN M_TYPE -#define SIGN_OF_X_FP512BN POSITIVEX - -#define ATE_BITS_FP512BN 130 -#define G2_TABLE_FP512BN 172 - -#endif - - -#if CURVE_SECURITY_FP512BN == 128 -#define AESKEY_FP512BN 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_FP512BN SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_FP512BN == 192 -#define AESKEY_FP512BN 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_FP512BN SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_FP512BN == 256 -#define AESKEY_FP512BN 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_FP512BN SHA512 /**< Hash type */ -#endif - - -namespace FP512BN_BIG = B512_60; -namespace FP512BN_FP = FP512BN; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_FP512BN_H +#define CONFIG_CURVE_FP512BN_H + +#include"core.h" +#include"config_field_FP512BN.h" + +// ECP stuff + +#define CURVETYPE_FP512BN WEIERSTRASS +#define CURVE_A_FP512BN 0 +#define PAIRING_FRIENDLY_FP512BN BN_CURVE +#define CURVE_SECURITY_FP512BN 128 +#define HTC_ISO_FP512BN 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_FP512BN + +#if PAIRING_FRIENDLY_FP512BN != NOT_PF + +#define HTC_ISO_G2_FP512BN 0 + +#define USE_GLV_FP512BN /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_FP512BN /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_FP512BN /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_FP512BN M_TYPE +#define SIGN_OF_X_FP512BN POSITIVEX + +#define ATE_BITS_FP512BN 130 +#define G2_TABLE_FP512BN 172 + +#endif + + +#if CURVE_SECURITY_FP512BN == 128 +#define AESKEY_FP512BN 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_FP512BN SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_FP512BN == 192 +#define AESKEY_FP512BN 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_FP512BN SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_FP512BN == 256 +#define AESKEY_FP512BN 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_FP512BN SHA512 /**< Hash type */ +#endif + + +namespace FP512BN_BIG = B512_60; +namespace FP512BN_FP = FP512BN; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_HIFIVE.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_HIFIVE.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_HIFIVE.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_HIFIVE.h index 436a71f..2aca8a4 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_HIFIVE.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_HIFIVE.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_HIFIVE_H -#define CONFIG_CURVE_HIFIVE_H - -#include"core.h" -#include"config_field_HIFIVE.h" - -// ECP stuff - -#define CURVETYPE_HIFIVE EDWARDS -#define CURVE_A_HIFIVE 1 -#define PAIRING_FRIENDLY_HIFIVE NOT_PF -#define CURVE_SECURITY_HIFIVE 192 -#define HTC_ISO_HIFIVE 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_HIFIVE - -#if PAIRING_FRIENDLY_HIFIVE != NOT_PF - -#define HTC_ISO_G2_HIFIVE 0 - -#define USE_GLV_HIFIVE /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_HIFIVE /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_HIFIVE /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_HIFIVE -#define SIGN_OF_X_HIFIVE - -#define ATE_BITS_HIFIVE -#define G2_TABLE_HIFIVE - -#endif - - -#if CURVE_SECURITY_HIFIVE == 128 -#define AESKEY_HIFIVE 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_HIFIVE SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_HIFIVE == 192 -#define AESKEY_HIFIVE 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_HIFIVE SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_HIFIVE == 256 -#define AESKEY_HIFIVE 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_HIFIVE SHA512 /**< Hash type */ -#endif - - -namespace HIFIVE_BIG = B336_60; -namespace HIFIVE_FP = HIFIVE; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_HIFIVE_H +#define CONFIG_CURVE_HIFIVE_H + +#include"core.h" +#include"config_field_HIFIVE.h" + +// ECP stuff + +#define CURVETYPE_HIFIVE EDWARDS +#define CURVE_A_HIFIVE 1 +#define PAIRING_FRIENDLY_HIFIVE NOT_PF +#define CURVE_SECURITY_HIFIVE 192 +#define HTC_ISO_HIFIVE 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_HIFIVE + +#if PAIRING_FRIENDLY_HIFIVE != NOT_PF + +#define HTC_ISO_G2_HIFIVE 0 + +#define USE_GLV_HIFIVE /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_HIFIVE /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_HIFIVE /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_HIFIVE +#define SIGN_OF_X_HIFIVE + +#define ATE_BITS_HIFIVE +#define G2_TABLE_HIFIVE + +#endif + + +#if CURVE_SECURITY_HIFIVE == 128 +#define AESKEY_HIFIVE 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_HIFIVE SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_HIFIVE == 192 +#define AESKEY_HIFIVE 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_HIFIVE SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_HIFIVE == 256 +#define AESKEY_HIFIVE 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_HIFIVE SHA512 /**< Hash type */ +#endif + + +namespace HIFIVE_BIG = B336_60; +namespace HIFIVE_FP = HIFIVE; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_JUBJUB.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_JUBJUB.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_JUBJUB.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_JUBJUB.h index bfe0f80..388fd68 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_JUBJUB.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_JUBJUB.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_JUBJUB_H -#define CONFIG_CURVE_JUBJUB_H - -#include"core.h" -#include"config_field_JUBJUB.h" - -// ECP stuff - -#define CURVETYPE_JUBJUB EDWARDS -#define CURVE_A_JUBJUB -1 -#define PAIRING_FRIENDLY_JUBJUB NOT_PF -#define CURVE_SECURITY_JUBJUB 128 -#define HTC_ISO_JUBJUB 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_JUBJUB - -#if PAIRING_FRIENDLY_JUBJUB != NOT_PF - -#define HTC_ISO_G2_JUBJUB 0 - -#define USE_GLV_JUBJUB /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_JUBJUB /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_JUBJUB /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_JUBJUB -#define SIGN_OF_X_JUBJUB - -#define ATE_BITS_JUBJUB -#define G2_TABLE_JUBJUB - -#endif - - -#if CURVE_SECURITY_JUBJUB == 128 -#define AESKEY_JUBJUB 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_JUBJUB SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_JUBJUB == 192 -#define AESKEY_JUBJUB 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_JUBJUB SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_JUBJUB == 256 -#define AESKEY_JUBJUB 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_JUBJUB SHA512 /**< Hash type */ -#endif - - -namespace JUBJUB_BIG = B256_56; -namespace JUBJUB_FP = JUBJUB; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_JUBJUB_H +#define CONFIG_CURVE_JUBJUB_H + +#include"core.h" +#include"config_field_JUBJUB.h" + +// ECP stuff + +#define CURVETYPE_JUBJUB EDWARDS +#define CURVE_A_JUBJUB -1 +#define PAIRING_FRIENDLY_JUBJUB NOT_PF +#define CURVE_SECURITY_JUBJUB 128 +#define HTC_ISO_JUBJUB 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_JUBJUB + +#if PAIRING_FRIENDLY_JUBJUB != NOT_PF + +#define HTC_ISO_G2_JUBJUB 0 + +#define USE_GLV_JUBJUB /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_JUBJUB /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_JUBJUB /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_JUBJUB +#define SIGN_OF_X_JUBJUB + +#define ATE_BITS_JUBJUB +#define G2_TABLE_JUBJUB + +#endif + + +#if CURVE_SECURITY_JUBJUB == 128 +#define AESKEY_JUBJUB 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_JUBJUB SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_JUBJUB == 192 +#define AESKEY_JUBJUB 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_JUBJUB SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_JUBJUB == 256 +#define AESKEY_JUBJUB 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_JUBJUB SHA512 /**< Hash type */ +#endif + + +namespace JUBJUB_BIG = B256_56; +namespace JUBJUB_FP = JUBJUB; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_MDC.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_MDC.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_MDC.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_MDC.h index 6828668..d526b29 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_MDC.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_MDC.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_MDC_H -#define CONFIG_CURVE_MDC_H - -#include"core.h" -#include"config_field_MDC.h" - -// ECP stuff - -#define CURVETYPE_MDC EDWARDS -#define CURVE_A_MDC 1 -#define PAIRING_FRIENDLY_MDC NOT_PF -#define CURVE_SECURITY_MDC 128 -#define HTC_ISO_MDC 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_MDC - -#if PAIRING_FRIENDLY_MDC != NOT_PF - -#define HTC_ISO_G2_MDC 0 - -#define USE_GLV_MDC /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_MDC /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_MDC /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_MDC -#define SIGN_OF_X_MDC - -#define ATE_BITS_MDC -#define G2_TABLE_MDC - -#endif - - -#if CURVE_SECURITY_MDC == 128 -#define AESKEY_MDC 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_MDC SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_MDC == 192 -#define AESKEY_MDC 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_MDC SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_MDC == 256 -#define AESKEY_MDC 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_MDC SHA512 /**< Hash type */ -#endif - - -namespace MDC_BIG = B256_56; -namespace MDC_FP = MDC; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_MDC_H +#define CONFIG_CURVE_MDC_H + +#include"core.h" +#include"config_field_MDC.h" + +// ECP stuff + +#define CURVETYPE_MDC EDWARDS +#define CURVE_A_MDC 1 +#define PAIRING_FRIENDLY_MDC NOT_PF +#define CURVE_SECURITY_MDC 128 +#define HTC_ISO_MDC 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_MDC + +#if PAIRING_FRIENDLY_MDC != NOT_PF + +#define HTC_ISO_G2_MDC 0 + +#define USE_GLV_MDC /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_MDC /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_MDC /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_MDC +#define SIGN_OF_X_MDC + +#define ATE_BITS_MDC +#define G2_TABLE_MDC + +#endif + + +#if CURVE_SECURITY_MDC == 128 +#define AESKEY_MDC 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_MDC SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_MDC == 192 +#define AESKEY_MDC 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_MDC SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_MDC == 256 +#define AESKEY_MDC 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_MDC SHA512 /**< Hash type */ +#endif + + +namespace MDC_BIG = B256_56; +namespace MDC_FP = MDC; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST256.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST256.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST256.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST256.h index 78c0807..dbd4b64 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST256.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST256.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NIST256_H -#define CONFIG_CURVE_NIST256_H - -#include"core.h" -#include"config_field_NIST256.h" - -// ECP stuff - -#define CURVETYPE_NIST256 WEIERSTRASS -#define CURVE_A_NIST256 -3 -#define PAIRING_FRIENDLY_NIST256 NOT_PF -#define CURVE_SECURITY_NIST256 128 -#define HTC_ISO_NIST256 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NIST256 - -#if PAIRING_FRIENDLY_NIST256 != NOT_PF - -#define HTC_ISO_G2_NIST256 0 - -#define USE_GLV_NIST256 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NIST256 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NIST256 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NIST256 -#define SIGN_OF_X_NIST256 - -#define ATE_BITS_NIST256 -#define G2_TABLE_NIST256 - -#endif - - -#if CURVE_SECURITY_NIST256 == 128 -#define AESKEY_NIST256 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NIST256 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NIST256 == 192 -#define AESKEY_NIST256 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NIST256 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NIST256 == 256 -#define AESKEY_NIST256 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NIST256 SHA512 /**< Hash type */ -#endif - - -namespace NIST256_BIG = B256_56; -namespace NIST256_FP = NIST256; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NIST256_H +#define CONFIG_CURVE_NIST256_H + +#include"core.h" +#include"config_field_NIST256.h" + +// ECP stuff + +#define CURVETYPE_NIST256 WEIERSTRASS +#define CURVE_A_NIST256 -3 +#define PAIRING_FRIENDLY_NIST256 NOT_PF +#define CURVE_SECURITY_NIST256 128 +#define HTC_ISO_NIST256 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NIST256 + +#if PAIRING_FRIENDLY_NIST256 != NOT_PF + +#define HTC_ISO_G2_NIST256 0 + +#define USE_GLV_NIST256 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NIST256 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NIST256 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NIST256 +#define SIGN_OF_X_NIST256 + +#define ATE_BITS_NIST256 +#define G2_TABLE_NIST256 + +#endif + + +#if CURVE_SECURITY_NIST256 == 128 +#define AESKEY_NIST256 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NIST256 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NIST256 == 192 +#define AESKEY_NIST256 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NIST256 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NIST256 == 256 +#define AESKEY_NIST256 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NIST256 SHA512 /**< Hash type */ +#endif + + +namespace NIST256_BIG = B256_56; +namespace NIST256_FP = NIST256; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST384.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST384.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST384.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST384.h index 1a089b1..ed648be 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST384.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST384.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NIST384_H -#define CONFIG_CURVE_NIST384_H - -#include"core.h" -#include"config_field_NIST384.h" - -// ECP stuff - -#define CURVETYPE_NIST384 WEIERSTRASS -#define CURVE_A_NIST384 -3 -#define PAIRING_FRIENDLY_NIST384 NOT_PF -#define CURVE_SECURITY_NIST384 192 -#define HTC_ISO_NIST384 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NIST384 - -#if PAIRING_FRIENDLY_NIST384 != NOT_PF - -#define HTC_ISO_G2_NIST384 0 - -#define USE_GLV_NIST384 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NIST384 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NIST384 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NIST384 -#define SIGN_OF_X_NIST384 - -#define ATE_BITS_NIST384 -#define G2_TABLE_NIST384 - -#endif - - -#if CURVE_SECURITY_NIST384 == 128 -#define AESKEY_NIST384 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NIST384 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NIST384 == 192 -#define AESKEY_NIST384 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NIST384 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NIST384 == 256 -#define AESKEY_NIST384 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NIST384 SHA512 /**< Hash type */ -#endif - - -namespace NIST384_BIG = B384_56; -namespace NIST384_FP = NIST384; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NIST384_H +#define CONFIG_CURVE_NIST384_H + +#include"core.h" +#include"config_field_NIST384.h" + +// ECP stuff + +#define CURVETYPE_NIST384 WEIERSTRASS +#define CURVE_A_NIST384 -3 +#define PAIRING_FRIENDLY_NIST384 NOT_PF +#define CURVE_SECURITY_NIST384 192 +#define HTC_ISO_NIST384 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NIST384 + +#if PAIRING_FRIENDLY_NIST384 != NOT_PF + +#define HTC_ISO_G2_NIST384 0 + +#define USE_GLV_NIST384 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NIST384 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NIST384 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NIST384 +#define SIGN_OF_X_NIST384 + +#define ATE_BITS_NIST384 +#define G2_TABLE_NIST384 + +#endif + + +#if CURVE_SECURITY_NIST384 == 128 +#define AESKEY_NIST384 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NIST384 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NIST384 == 192 +#define AESKEY_NIST384 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NIST384 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NIST384 == 256 +#define AESKEY_NIST384 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NIST384 SHA512 /**< Hash type */ +#endif + + +namespace NIST384_BIG = B384_56; +namespace NIST384_FP = NIST384; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST521.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST521.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST521.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST521.h index 9bad49d..888a733 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NIST521.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NIST521.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NIST521_H -#define CONFIG_CURVE_NIST521_H - -#include"core.h" -#include"config_field_NIST521.h" - -// ECP stuff - -#define CURVETYPE_NIST521 WEIERSTRASS -#define CURVE_A_NIST521 -3 -#define PAIRING_FRIENDLY_NIST521 NOT_PF -#define CURVE_SECURITY_NIST521 256 -#define HTC_ISO_NIST521 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NIST521 - -#if PAIRING_FRIENDLY_NIST521 != NOT_PF - -#define HTC_ISO_G2_NIST521 0 - -#define USE_GLV_NIST521 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NIST521 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NIST521 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NIST521 -#define SIGN_OF_X_NIST521 - -#define ATE_BITS_NIST521 -#define G2_TABLE_NIST521 - -#endif - - -#if CURVE_SECURITY_NIST521 == 128 -#define AESKEY_NIST521 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NIST521 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NIST521 == 192 -#define AESKEY_NIST521 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NIST521 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NIST521 == 256 -#define AESKEY_NIST521 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NIST521 SHA512 /**< Hash type */ -#endif - - -namespace NIST521_BIG = B528_60; -namespace NIST521_FP = NIST521; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NIST521_H +#define CONFIG_CURVE_NIST521_H + +#include"core.h" +#include"config_field_NIST521.h" + +// ECP stuff + +#define CURVETYPE_NIST521 WEIERSTRASS +#define CURVE_A_NIST521 -3 +#define PAIRING_FRIENDLY_NIST521 NOT_PF +#define CURVE_SECURITY_NIST521 256 +#define HTC_ISO_NIST521 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NIST521 + +#if PAIRING_FRIENDLY_NIST521 != NOT_PF + +#define HTC_ISO_G2_NIST521 0 + +#define USE_GLV_NIST521 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NIST521 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NIST521 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NIST521 +#define SIGN_OF_X_NIST521 + +#define ATE_BITS_NIST521 +#define G2_TABLE_NIST521 + +#endif + + +#if CURVE_SECURITY_NIST521 == 128 +#define AESKEY_NIST521 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NIST521 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NIST521 == 192 +#define AESKEY_NIST521 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NIST521 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NIST521 == 256 +#define AESKEY_NIST521 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NIST521 SHA512 /**< Hash type */ +#endif + + +namespace NIST521_BIG = B528_60; +namespace NIST521_FP = NIST521; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS256E.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS256E.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS256E.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS256E.h index 765d71f..dd5629e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS256E.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS256E.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NUMS256E_H -#define CONFIG_CURVE_NUMS256E_H - -#include"core.h" -#include"config_field_F256PME.h" - -// ECP stuff - -#define CURVETYPE_NUMS256E EDWARDS -#define CURVE_A_NUMS256E 1 -#define PAIRING_FRIENDLY_NUMS256E NOT_PF -#define CURVE_SECURITY_NUMS256E 128 -#define HTC_ISO_NUMS256E 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NUMS256E - -#if PAIRING_FRIENDLY_NUMS256E != NOT_PF - -#define HTC_ISO_G2_NUMS256E 0 - -#define USE_GLV_NUMS256E /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NUMS256E /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NUMS256E /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NUMS256E -#define SIGN_OF_X_NUMS256E - -#define ATE_BITS_NUMS256E -#define G2_TABLE_NUMS256E - -#endif - - -#if CURVE_SECURITY_NUMS256E == 128 -#define AESKEY_NUMS256E 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NUMS256E SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS256E == 192 -#define AESKEY_NUMS256E 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NUMS256E SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS256E == 256 -#define AESKEY_NUMS256E 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NUMS256E SHA512 /**< Hash type */ -#endif - - -namespace NUMS256E_BIG = B256_56; -namespace NUMS256E_FP = F256PME; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NUMS256E_H +#define CONFIG_CURVE_NUMS256E_H + +#include"core.h" +#include"config_field_F256PME.h" + +// ECP stuff + +#define CURVETYPE_NUMS256E EDWARDS +#define CURVE_A_NUMS256E 1 +#define PAIRING_FRIENDLY_NUMS256E NOT_PF +#define CURVE_SECURITY_NUMS256E 128 +#define HTC_ISO_NUMS256E 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NUMS256E + +#if PAIRING_FRIENDLY_NUMS256E != NOT_PF + +#define HTC_ISO_G2_NUMS256E 0 + +#define USE_GLV_NUMS256E /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NUMS256E /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NUMS256E /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NUMS256E +#define SIGN_OF_X_NUMS256E + +#define ATE_BITS_NUMS256E +#define G2_TABLE_NUMS256E + +#endif + + +#if CURVE_SECURITY_NUMS256E == 128 +#define AESKEY_NUMS256E 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NUMS256E SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS256E == 192 +#define AESKEY_NUMS256E 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NUMS256E SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS256E == 256 +#define AESKEY_NUMS256E 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NUMS256E SHA512 /**< Hash type */ +#endif + + +namespace NUMS256E_BIG = B256_56; +namespace NUMS256E_FP = F256PME; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS256W.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS256W.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS256W.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS256W.h index 3c7901f..262bf4a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS256W.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS256W.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NUMS256W_H -#define CONFIG_CURVE_NUMS256W_H - -#include"core.h" -#include"config_field_F256PMW.h" - -// ECP stuff - -#define CURVETYPE_NUMS256W WEIERSTRASS -#define CURVE_A_NUMS256W -3 -#define PAIRING_FRIENDLY_NUMS256W NOT_PF -#define CURVE_SECURITY_NUMS256W 128 -#define HTC_ISO_NUMS256W 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NUMS256W - -#if PAIRING_FRIENDLY_NUMS256W != NOT_PF - -#define HTC_ISO_G2_NUMS256W 0 - -#define USE_GLV_NUMS256W /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NUMS256W /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NUMS256W /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NUMS256W -#define SIGN_OF_X_NUMS256W - -#define ATE_BITS_NUMS256W -#define G2_TABLE_NUMS256W - -#endif - - -#if CURVE_SECURITY_NUMS256W == 128 -#define AESKEY_NUMS256W 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NUMS256W SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS256W == 192 -#define AESKEY_NUMS256W 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NUMS256W SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS256W == 256 -#define AESKEY_NUMS256W 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NUMS256W SHA512 /**< Hash type */ -#endif - - -namespace NUMS256W_BIG = B256_56; -namespace NUMS256W_FP = F256PMW; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NUMS256W_H +#define CONFIG_CURVE_NUMS256W_H + +#include"core.h" +#include"config_field_F256PMW.h" + +// ECP stuff + +#define CURVETYPE_NUMS256W WEIERSTRASS +#define CURVE_A_NUMS256W -3 +#define PAIRING_FRIENDLY_NUMS256W NOT_PF +#define CURVE_SECURITY_NUMS256W 128 +#define HTC_ISO_NUMS256W 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NUMS256W + +#if PAIRING_FRIENDLY_NUMS256W != NOT_PF + +#define HTC_ISO_G2_NUMS256W 0 + +#define USE_GLV_NUMS256W /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NUMS256W /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NUMS256W /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NUMS256W +#define SIGN_OF_X_NUMS256W + +#define ATE_BITS_NUMS256W +#define G2_TABLE_NUMS256W + +#endif + + +#if CURVE_SECURITY_NUMS256W == 128 +#define AESKEY_NUMS256W 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NUMS256W SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS256W == 192 +#define AESKEY_NUMS256W 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NUMS256W SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS256W == 256 +#define AESKEY_NUMS256W 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NUMS256W SHA512 /**< Hash type */ +#endif + + +namespace NUMS256W_BIG = B256_56; +namespace NUMS256W_FP = F256PMW; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS384E.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS384E.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS384E.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS384E.h index db14475..b089b3e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS384E.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS384E.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NUMS384E_H -#define CONFIG_CURVE_NUMS384E_H - -#include"core.h" -#include"config_field_F384PM.h" - -// ECP stuff - -#define CURVETYPE_NUMS384E EDWARDS -#define CURVE_A_NUMS384E 1 -#define PAIRING_FRIENDLY_NUMS384E NOT_PF -#define CURVE_SECURITY_NUMS384E 192 -#define HTC_ISO_NUMS384E 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NUMS384E - -#if PAIRING_FRIENDLY_NUMS384E != NOT_PF - -#define HTC_ISO_G2_NUMS384E 0 - -#define USE_GLV_NUMS384E /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NUMS384E /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NUMS384E /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NUMS384E -#define SIGN_OF_X_NUMS384E - -#define ATE_BITS_NUMS384E -#define G2_TABLE_NUMS384E - -#endif - - -#if CURVE_SECURITY_NUMS384E == 128 -#define AESKEY_NUMS384E 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NUMS384E SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS384E == 192 -#define AESKEY_NUMS384E 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NUMS384E SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS384E == 256 -#define AESKEY_NUMS384E 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NUMS384E SHA512 /**< Hash type */ -#endif - - -namespace NUMS384E_BIG = B384_58; -namespace NUMS384E_FP = F384PM; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NUMS384E_H +#define CONFIG_CURVE_NUMS384E_H + +#include"core.h" +#include"config_field_F384PM.h" + +// ECP stuff + +#define CURVETYPE_NUMS384E EDWARDS +#define CURVE_A_NUMS384E 1 +#define PAIRING_FRIENDLY_NUMS384E NOT_PF +#define CURVE_SECURITY_NUMS384E 192 +#define HTC_ISO_NUMS384E 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NUMS384E + +#if PAIRING_FRIENDLY_NUMS384E != NOT_PF + +#define HTC_ISO_G2_NUMS384E 0 + +#define USE_GLV_NUMS384E /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NUMS384E /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NUMS384E /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NUMS384E +#define SIGN_OF_X_NUMS384E + +#define ATE_BITS_NUMS384E +#define G2_TABLE_NUMS384E + +#endif + + +#if CURVE_SECURITY_NUMS384E == 128 +#define AESKEY_NUMS384E 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NUMS384E SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS384E == 192 +#define AESKEY_NUMS384E 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NUMS384E SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS384E == 256 +#define AESKEY_NUMS384E 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NUMS384E SHA512 /**< Hash type */ +#endif + + +namespace NUMS384E_BIG = B384_58; +namespace NUMS384E_FP = F384PM; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS384W.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS384W.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS384W.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS384W.h index 83ea507..9f41c39 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS384W.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS384W.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NUMS384W_H -#define CONFIG_CURVE_NUMS384W_H - -#include"core.h" -#include"config_field_F384PM.h" - -// ECP stuff - -#define CURVETYPE_NUMS384W WEIERSTRASS -#define CURVE_A_NUMS384W -3 -#define PAIRING_FRIENDLY_NUMS384W NOT_PF -#define CURVE_SECURITY_NUMS384W 192 -#define HTC_ISO_NUMS384W 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NUMS384W - -#if PAIRING_FRIENDLY_NUMS384W != NOT_PF - -#define HTC_ISO_G2_NUMS384W 0 - -#define USE_GLV_NUMS384W /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NUMS384W /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NUMS384W /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NUMS384W -#define SIGN_OF_X_NUMS384W - -#define ATE_BITS_NUMS384W -#define G2_TABLE_NUMS384W - -#endif - - -#if CURVE_SECURITY_NUMS384W == 128 -#define AESKEY_NUMS384W 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NUMS384W SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS384W == 192 -#define AESKEY_NUMS384W 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NUMS384W SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS384W == 256 -#define AESKEY_NUMS384W 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NUMS384W SHA512 /**< Hash type */ -#endif - - -namespace NUMS384W_BIG = B384_58; -namespace NUMS384W_FP = F384PM; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NUMS384W_H +#define CONFIG_CURVE_NUMS384W_H + +#include"core.h" +#include"config_field_F384PM.h" + +// ECP stuff + +#define CURVETYPE_NUMS384W WEIERSTRASS +#define CURVE_A_NUMS384W -3 +#define PAIRING_FRIENDLY_NUMS384W NOT_PF +#define CURVE_SECURITY_NUMS384W 192 +#define HTC_ISO_NUMS384W 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NUMS384W + +#if PAIRING_FRIENDLY_NUMS384W != NOT_PF + +#define HTC_ISO_G2_NUMS384W 0 + +#define USE_GLV_NUMS384W /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NUMS384W /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NUMS384W /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NUMS384W +#define SIGN_OF_X_NUMS384W + +#define ATE_BITS_NUMS384W +#define G2_TABLE_NUMS384W + +#endif + + +#if CURVE_SECURITY_NUMS384W == 128 +#define AESKEY_NUMS384W 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NUMS384W SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS384W == 192 +#define AESKEY_NUMS384W 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NUMS384W SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS384W == 256 +#define AESKEY_NUMS384W 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NUMS384W SHA512 /**< Hash type */ +#endif + + +namespace NUMS384W_BIG = B384_58; +namespace NUMS384W_FP = F384PM; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS512E.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS512E.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS512E.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS512E.h index 6cc80c8..beacb50 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS512E.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS512E.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NUMS512E_H -#define CONFIG_CURVE_NUMS512E_H - -#include"core.h" -#include"config_field_F512PM.h" - -// ECP stuff - -#define CURVETYPE_NUMS512E EDWARDS -#define CURVE_A_NUMS512E 1 -#define PAIRING_FRIENDLY_NUMS512E NOT_PF -#define CURVE_SECURITY_NUMS512E 256 -#define HTC_ISO_NUMS512E 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NUMS512E - -#if PAIRING_FRIENDLY_NUMS512E != NOT_PF - -#define HTC_ISO_G2_NUMS512E 0 - -#define USE_GLV_NUMS512E /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NUMS512E /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NUMS512E /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NUMS512E -#define SIGN_OF_X_NUMS512E - -#define ATE_BITS_NUMS512E -#define G2_TABLE_NUMS512E - -#endif - - -#if CURVE_SECURITY_NUMS512E == 128 -#define AESKEY_NUMS512E 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NUMS512E SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS512E == 192 -#define AESKEY_NUMS512E 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NUMS512E SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS512E == 256 -#define AESKEY_NUMS512E 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NUMS512E SHA512 /**< Hash type */ -#endif - - -namespace NUMS512E_BIG = B512_60; -namespace NUMS512E_FP = F512PM; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NUMS512E_H +#define CONFIG_CURVE_NUMS512E_H + +#include"core.h" +#include"config_field_F512PM.h" + +// ECP stuff + +#define CURVETYPE_NUMS512E EDWARDS +#define CURVE_A_NUMS512E 1 +#define PAIRING_FRIENDLY_NUMS512E NOT_PF +#define CURVE_SECURITY_NUMS512E 256 +#define HTC_ISO_NUMS512E 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NUMS512E + +#if PAIRING_FRIENDLY_NUMS512E != NOT_PF + +#define HTC_ISO_G2_NUMS512E 0 + +#define USE_GLV_NUMS512E /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NUMS512E /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NUMS512E /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NUMS512E +#define SIGN_OF_X_NUMS512E + +#define ATE_BITS_NUMS512E +#define G2_TABLE_NUMS512E + +#endif + + +#if CURVE_SECURITY_NUMS512E == 128 +#define AESKEY_NUMS512E 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NUMS512E SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS512E == 192 +#define AESKEY_NUMS512E 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NUMS512E SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS512E == 256 +#define AESKEY_NUMS512E 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NUMS512E SHA512 /**< Hash type */ +#endif + + +namespace NUMS512E_BIG = B512_60; +namespace NUMS512E_FP = F512PM; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS512W.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS512W.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS512W.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS512W.h index 6d9d739..160675e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_NUMS512W.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_NUMS512W.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_NUMS512W_H -#define CONFIG_CURVE_NUMS512W_H - -#include"core.h" -#include"config_field_F512PM.h" - -// ECP stuff - -#define CURVETYPE_NUMS512W WEIERSTRASS -#define CURVE_A_NUMS512W -3 -#define PAIRING_FRIENDLY_NUMS512W NOT_PF -#define CURVE_SECURITY_NUMS512W 256 -#define HTC_ISO_NUMS512W 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_NUMS512W - -#if PAIRING_FRIENDLY_NUMS512W != NOT_PF - -#define HTC_ISO_G2_NUMS512W 0 - -#define USE_GLV_NUMS512W /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_NUMS512W /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_NUMS512W /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_NUMS512W -#define SIGN_OF_X_NUMS512W - -#define ATE_BITS_NUMS512W -#define G2_TABLE_NUMS512W - -#endif - - -#if CURVE_SECURITY_NUMS512W == 128 -#define AESKEY_NUMS512W 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_NUMS512W SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS512W == 192 -#define AESKEY_NUMS512W 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_NUMS512W SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_NUMS512W == 256 -#define AESKEY_NUMS512W 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_NUMS512W SHA512 /**< Hash type */ -#endif - - -namespace NUMS512W_BIG = B512_60; -namespace NUMS512W_FP = F512PM; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_NUMS512W_H +#define CONFIG_CURVE_NUMS512W_H + +#include"core.h" +#include"config_field_F512PM.h" + +// ECP stuff + +#define CURVETYPE_NUMS512W WEIERSTRASS +#define CURVE_A_NUMS512W -3 +#define PAIRING_FRIENDLY_NUMS512W NOT_PF +#define CURVE_SECURITY_NUMS512W 256 +#define HTC_ISO_NUMS512W 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_NUMS512W + +#if PAIRING_FRIENDLY_NUMS512W != NOT_PF + +#define HTC_ISO_G2_NUMS512W 0 + +#define USE_GLV_NUMS512W /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_NUMS512W /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_NUMS512W /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_NUMS512W +#define SIGN_OF_X_NUMS512W + +#define ATE_BITS_NUMS512W +#define G2_TABLE_NUMS512W + +#endif + + +#if CURVE_SECURITY_NUMS512W == 128 +#define AESKEY_NUMS512W 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_NUMS512W SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS512W == 192 +#define AESKEY_NUMS512W 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_NUMS512W SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_NUMS512W == 256 +#define AESKEY_NUMS512W 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_NUMS512W SHA512 /**< Hash type */ +#endif + + +namespace NUMS512W_BIG = B512_60; +namespace NUMS512W_FP = F512PM; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SECP160R1.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SECP160R1.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SECP160R1.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SECP160R1.h index 21bdc09..03ebd84 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SECP160R1.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SECP160R1.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_SECP160R1_H -#define CONFIG_CURVE_SECP160R1_H - -#include"core.h" -#include"config_field_SECP160R1.h" - -// ECP stuff - -#define CURVETYPE_SECP160R1 WEIERSTRASS -#define CURVE_A_SECP160R1 -3 -#define PAIRING_FRIENDLY_SECP160R1 NOT_PF -#define CURVE_SECURITY_SECP160R1 128 -#define HTC_ISO_SECP160R1 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_SECP160R1 - -#if PAIRING_FRIENDLY_SECP160R1 != NOT_PF - -#define HTC_ISO_G2_SECP160R1 0 - -#define USE_GLV_SECP160R1 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_SECP160R1 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_SECP160R1 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_SECP160R1 -#define SIGN_OF_X_SECP160R1 - -#define ATE_BITS_SECP160R1 -#define G2_TABLE_SECP160R1 - -#endif - - -#if CURVE_SECURITY_SECP160R1 == 128 -#define AESKEY_SECP160R1 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_SECP160R1 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_SECP160R1 == 192 -#define AESKEY_SECP160R1 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_SECP160R1 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_SECP160R1 == 256 -#define AESKEY_SECP160R1 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_SECP160R1 SHA512 /**< Hash type */ -#endif - - -namespace SECP160R1_BIG = B160_56; -namespace SECP160R1_FP = SECP160R1; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_SECP160R1_H +#define CONFIG_CURVE_SECP160R1_H + +#include"core.h" +#include"config_field_SECP160R1.h" + +// ECP stuff + +#define CURVETYPE_SECP160R1 WEIERSTRASS +#define CURVE_A_SECP160R1 -3 +#define PAIRING_FRIENDLY_SECP160R1 NOT_PF +#define CURVE_SECURITY_SECP160R1 128 +#define HTC_ISO_SECP160R1 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_SECP160R1 + +#if PAIRING_FRIENDLY_SECP160R1 != NOT_PF + +#define HTC_ISO_G2_SECP160R1 0 + +#define USE_GLV_SECP160R1 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_SECP160R1 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_SECP160R1 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_SECP160R1 +#define SIGN_OF_X_SECP160R1 + +#define ATE_BITS_SECP160R1 +#define G2_TABLE_SECP160R1 + +#endif + + +#if CURVE_SECURITY_SECP160R1 == 128 +#define AESKEY_SECP160R1 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_SECP160R1 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_SECP160R1 == 192 +#define AESKEY_SECP160R1 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_SECP160R1 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_SECP160R1 == 256 +#define AESKEY_SECP160R1 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_SECP160R1 SHA512 /**< Hash type */ +#endif + + +namespace SECP160R1_BIG = B160_56; +namespace SECP160R1_FP = SECP160R1; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SECP256K1.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SECP256K1.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SECP256K1.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SECP256K1.h index 01676ab..ce4468a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SECP256K1.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SECP256K1.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_SECP256K1_H -#define CONFIG_CURVE_SECP256K1_H - -#include"core.h" -#include"config_field_SECP256K1.h" - -// ECP stuff - -#define CURVETYPE_SECP256K1 WEIERSTRASS -#define CURVE_A_SECP256K1 0 -#define PAIRING_FRIENDLY_SECP256K1 NOT_PF -#define CURVE_SECURITY_SECP256K1 128 -#define HTC_ISO_SECP256K1 3 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_SECP256K1 - -#if PAIRING_FRIENDLY_SECP256K1 != NOT_PF - -#define HTC_ISO_G2_SECP256K1 0 - -#define USE_GLV_SECP256K1 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_SECP256K1 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_SECP256K1 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_SECP256K1 -#define SIGN_OF_X_SECP256K1 - -#define ATE_BITS_SECP256K1 -#define G2_TABLE_SECP256K1 - -#endif - - -#if CURVE_SECURITY_SECP256K1 == 128 -#define AESKEY_SECP256K1 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_SECP256K1 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_SECP256K1 == 192 -#define AESKEY_SECP256K1 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_SECP256K1 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_SECP256K1 == 256 -#define AESKEY_SECP256K1 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_SECP256K1 SHA512 /**< Hash type */ -#endif - - -namespace SECP256K1_BIG = B256_56; -namespace SECP256K1_FP = SECP256K1; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_SECP256K1_H +#define CONFIG_CURVE_SECP256K1_H + +#include"core.h" +#include"config_field_SECP256K1.h" + +// ECP stuff + +#define CURVETYPE_SECP256K1 WEIERSTRASS +#define CURVE_A_SECP256K1 0 +#define PAIRING_FRIENDLY_SECP256K1 NOT_PF +#define CURVE_SECURITY_SECP256K1 128 +#define HTC_ISO_SECP256K1 3 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_SECP256K1 + +#if PAIRING_FRIENDLY_SECP256K1 != NOT_PF + +#define HTC_ISO_G2_SECP256K1 0 + +#define USE_GLV_SECP256K1 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_SECP256K1 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_SECP256K1 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_SECP256K1 +#define SIGN_OF_X_SECP256K1 + +#define ATE_BITS_SECP256K1 +#define G2_TABLE_SECP256K1 + +#endif + + +#if CURVE_SECURITY_SECP256K1 == 128 +#define AESKEY_SECP256K1 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_SECP256K1 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_SECP256K1 == 192 +#define AESKEY_SECP256K1 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_SECP256K1 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_SECP256K1 == 256 +#define AESKEY_SECP256K1 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_SECP256K1 SHA512 /**< Hash type */ +#endif + + +namespace SECP256K1_BIG = B256_56; +namespace SECP256K1_FP = SECP256K1; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SM2.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SM2.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SM2.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SM2.h index 6207f4f..d193948 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_SM2.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_SM2.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_SM2_H -#define CONFIG_CURVE_SM2_H - -#include"core.h" -#include"config_field_SM2.h" - -// ECP stuff - -#define CURVETYPE_SM2 WEIERSTRASS -#define CURVE_A_SM2 -3 -#define PAIRING_FRIENDLY_SM2 NOT_PF -#define CURVE_SECURITY_SM2 128 -#define HTC_ISO_SM2 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_SM2 - -#if PAIRING_FRIENDLY_SM2 != NOT_PF - -#define HTC_ISO_G2_SM2 0 - -#define USE_GLV_SM2 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_SM2 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_SM2 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_SM2 -#define SIGN_OF_X_SM2 - -#define ATE_BITS_SM2 -#define G2_TABLE_SM2 - -#endif - - -#if CURVE_SECURITY_SM2 == 128 -#define AESKEY_SM2 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_SM2 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_SM2 == 192 -#define AESKEY_SM2 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_SM2 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_SM2 == 256 -#define AESKEY_SM2 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_SM2 SHA512 /**< Hash type */ -#endif - - -namespace SM2_BIG = B256_56; -namespace SM2_FP = SM2; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_SM2_H +#define CONFIG_CURVE_SM2_H + +#include"core.h" +#include"config_field_SM2.h" + +// ECP stuff + +#define CURVETYPE_SM2 WEIERSTRASS +#define CURVE_A_SM2 -3 +#define PAIRING_FRIENDLY_SM2 NOT_PF +#define CURVE_SECURITY_SM2 128 +#define HTC_ISO_SM2 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_SM2 + +#if PAIRING_FRIENDLY_SM2 != NOT_PF + +#define HTC_ISO_G2_SM2 0 + +#define USE_GLV_SM2 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_SM2 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_SM2 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_SM2 +#define SIGN_OF_X_SM2 + +#define ATE_BITS_SM2 +#define G2_TABLE_SM2 + +#endif + + +#if CURVE_SECURITY_SM2 == 128 +#define AESKEY_SM2 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_SM2 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_SM2 == 192 +#define AESKEY_SM2 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_SM2 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_SM2 == 256 +#define AESKEY_SM2 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_SM2 SHA512 /**< Hash type */ +#endif + + +namespace SM2_BIG = B256_56; +namespace SM2_FP = SM2; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_TWEEDLEDEE.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_TWEEDLEDEE.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_TWEEDLEDEE.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_TWEEDLEDEE.h index 329e004..beff313 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_TWEEDLEDEE.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_TWEEDLEDEE.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_TWEEDLEDEE_H -#define CONFIG_CURVE_TWEEDLEDEE_H - -#include"core.h" -#include"config_field_TWEEDLEDEE.h" - -// ECP stuff - -#define CURVETYPE_TWEEDLEDEE WEIERSTRASS -#define CURVE_A_TWEEDLEDEE 0 -#define PAIRING_FRIENDLY_TWEEDLEDEE NOT_PF -#define CURVE_SECURITY_TWEEDLEDEE 128 -#define HTC_ISO_TWEEDLEDEE 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_TWEEDLEDEE - -#if PAIRING_FRIENDLY_TWEEDLEDEE != NOT_PF - -#define HTC_ISO_G2_TWEEDLEDEE 0 - -#define USE_GLV_TWEEDLEDEE /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_TWEEDLEDEE /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_TWEEDLEDEE /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_TWEEDLEDEE -#define SIGN_OF_X_TWEEDLEDEE - -#define ATE_BITS_TWEEDLEDEE -#define G2_TABLE_TWEEDLEDEE - -#endif - - -#if CURVE_SECURITY_TWEEDLEDEE == 128 -#define AESKEY_TWEEDLEDEE 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_TWEEDLEDEE SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_TWEEDLEDEE == 192 -#define AESKEY_TWEEDLEDEE 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_TWEEDLEDEE SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_TWEEDLEDEE == 256 -#define AESKEY_TWEEDLEDEE 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_TWEEDLEDEE SHA512 /**< Hash type */ -#endif - - -namespace TWEEDLEDEE_BIG = B256_56; -namespace TWEEDLEDEE_FP = TWEEDLEDEE; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_TWEEDLEDEE_H +#define CONFIG_CURVE_TWEEDLEDEE_H + +#include"core.h" +#include"config_field_TWEEDLEDEE.h" + +// ECP stuff + +#define CURVETYPE_TWEEDLEDEE WEIERSTRASS +#define CURVE_A_TWEEDLEDEE 0 +#define PAIRING_FRIENDLY_TWEEDLEDEE NOT_PF +#define CURVE_SECURITY_TWEEDLEDEE 128 +#define HTC_ISO_TWEEDLEDEE 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_TWEEDLEDEE + +#if PAIRING_FRIENDLY_TWEEDLEDEE != NOT_PF + +#define HTC_ISO_G2_TWEEDLEDEE 0 + +#define USE_GLV_TWEEDLEDEE /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_TWEEDLEDEE /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_TWEEDLEDEE /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_TWEEDLEDEE +#define SIGN_OF_X_TWEEDLEDEE + +#define ATE_BITS_TWEEDLEDEE +#define G2_TABLE_TWEEDLEDEE + +#endif + + +#if CURVE_SECURITY_TWEEDLEDEE == 128 +#define AESKEY_TWEEDLEDEE 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_TWEEDLEDEE SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_TWEEDLEDEE == 192 +#define AESKEY_TWEEDLEDEE 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_TWEEDLEDEE SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_TWEEDLEDEE == 256 +#define AESKEY_TWEEDLEDEE 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_TWEEDLEDEE SHA512 /**< Hash type */ +#endif + + +namespace TWEEDLEDEE_BIG = B256_56; +namespace TWEEDLEDEE_FP = TWEEDLEDEE; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_TWEEDLEDUM.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_TWEEDLEDUM.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_TWEEDLEDUM.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_TWEEDLEDUM.h index 07fb3d7..84ad8cd 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_TWEEDLEDUM.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_TWEEDLEDUM.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_TWEEDLEDUM_H -#define CONFIG_CURVE_TWEEDLEDUM_H - -#include"core.h" -#include"config_field_TWEEDLEDUM.h" - -// ECP stuff - -#define CURVETYPE_TWEEDLEDUM WEIERSTRASS -#define CURVE_A_TWEEDLEDUM 0 -#define PAIRING_FRIENDLY_TWEEDLEDUM NOT_PF -#define CURVE_SECURITY_TWEEDLEDUM 128 -#define HTC_ISO_TWEEDLEDUM 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_TWEEDLEDUM - -#if PAIRING_FRIENDLY_TWEEDLEDUM != NOT_PF - -#define HTC_ISO_G2_TWEEDLEDUM 0 - -#define USE_GLV_TWEEDLEDUM /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_TWEEDLEDUM /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_TWEEDLEDUM /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_TWEEDLEDUM -#define SIGN_OF_X_TWEEDLEDUM - -#define ATE_BITS_TWEEDLEDUM -#define G2_TABLE_TWEEDLEDUM - -#endif - - -#if CURVE_SECURITY_TWEEDLEDUM == 128 -#define AESKEY_TWEEDLEDUM 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_TWEEDLEDUM SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_TWEEDLEDUM == 192 -#define AESKEY_TWEEDLEDUM 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_TWEEDLEDUM SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_TWEEDLEDUM == 256 -#define AESKEY_TWEEDLEDUM 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_TWEEDLEDUM SHA512 /**< Hash type */ -#endif - - -namespace TWEEDLEDUM_BIG = B256_56; -namespace TWEEDLEDUM_FP = TWEEDLEDUM; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_TWEEDLEDUM_H +#define CONFIG_CURVE_TWEEDLEDUM_H + +#include"core.h" +#include"config_field_TWEEDLEDUM.h" + +// ECP stuff + +#define CURVETYPE_TWEEDLEDUM WEIERSTRASS +#define CURVE_A_TWEEDLEDUM 0 +#define PAIRING_FRIENDLY_TWEEDLEDUM NOT_PF +#define CURVE_SECURITY_TWEEDLEDUM 128 +#define HTC_ISO_TWEEDLEDUM 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_TWEEDLEDUM + +#if PAIRING_FRIENDLY_TWEEDLEDUM != NOT_PF + +#define HTC_ISO_G2_TWEEDLEDUM 0 + +#define USE_GLV_TWEEDLEDUM /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_TWEEDLEDUM /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_TWEEDLEDUM /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_TWEEDLEDUM +#define SIGN_OF_X_TWEEDLEDUM + +#define ATE_BITS_TWEEDLEDUM +#define G2_TABLE_TWEEDLEDUM + +#endif + + +#if CURVE_SECURITY_TWEEDLEDUM == 128 +#define AESKEY_TWEEDLEDUM 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_TWEEDLEDUM SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_TWEEDLEDUM == 192 +#define AESKEY_TWEEDLEDUM 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_TWEEDLEDUM SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_TWEEDLEDUM == 256 +#define AESKEY_TWEEDLEDUM 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_TWEEDLEDUM SHA512 /**< Hash type */ +#endif + + +namespace TWEEDLEDUM_BIG = B256_56; +namespace TWEEDLEDUM_FP = TWEEDLEDUM; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_X448.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_X448.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_X448.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_X448.h index aa8e596..e12aced 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_curve_X448.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_curve_X448.h @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_CURVE_X448_H -#define CONFIG_CURVE_X448_H - -#include"core.h" -#include"config_field_F448.h" - -// ECP stuff - -#define CURVETYPE_X448 MONTGOMERY -#define CURVE_A_X448 156326 -#define PAIRING_FRIENDLY_X448 NOT_PF -#define CURVE_SECURITY_X448 256 -#define HTC_ISO_X448 0 - -// Permit alternate compression method if 3 spare top bits in field representation -// Must be set manually -// #define ALLOW_ALT_COMPRESS_X448 - -#if PAIRING_FRIENDLY_X448 != NOT_PF - -#define HTC_ISO_G2_X448 0 - -#define USE_GLV_X448 /**< Note this method is patented (GLV), so maybe you want to comment this out */ -#define USE_GS_G2_X448 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ -#define USE_GS_GT_X448 /**< Not patented, so probably safe to always use this */ - -#define POSITIVEX 0 -#define NEGATIVEX 1 - -#define SEXTIC_TWIST_X448 -#define SIGN_OF_X_X448 - -#define ATE_BITS_X448 -#define G2_TABLE_X448 - -#endif - - -#if CURVE_SECURITY_X448 == 128 -#define AESKEY_X448 16 /**< Symmetric Key size - 128 bits */ -#define HASH_TYPE_X448 SHA256 /**< Hash type */ -#endif - -#if CURVE_SECURITY_X448 == 192 -#define AESKEY_X448 24 /**< Symmetric Key size - 192 bits */ -#define HASH_TYPE_X448 SHA384 /**< Hash type */ -#endif - -#if CURVE_SECURITY_X448 == 256 -#define AESKEY_X448 32 /**< Symmetric Key size - 256 bits */ -#define HASH_TYPE_X448 SHA512 /**< Hash type */ -#endif - - -namespace X448_BIG = B448_58; -namespace X448_FP = F448; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_CURVE_X448_H +#define CONFIG_CURVE_X448_H + +#include"core.h" +#include"config_field_F448.h" + +// ECP stuff + +#define CURVETYPE_X448 MONTGOMERY +#define CURVE_A_X448 156326 +#define PAIRING_FRIENDLY_X448 NOT_PF +#define CURVE_SECURITY_X448 256 +#define HTC_ISO_X448 0 + +// Permit alternate compression method if 3 spare top bits in field representation +// Must be set manually +// #define ALLOW_ALT_COMPRESS_X448 + +#if PAIRING_FRIENDLY_X448 != NOT_PF + +#define HTC_ISO_G2_X448 0 + +#define USE_GLV_X448 /**< Note this method is patented (GLV), so maybe you want to comment this out */ +#define USE_GS_G2_X448 /**< Well we didn't patent it :) But may be covered by GLV patent :( */ +#define USE_GS_GT_X448 /**< Not patented, so probably safe to always use this */ + +#define POSITIVEX 0 +#define NEGATIVEX 1 + +#define SEXTIC_TWIST_X448 +#define SIGN_OF_X_X448 + +#define ATE_BITS_X448 +#define G2_TABLE_X448 + +#endif + + +#if CURVE_SECURITY_X448 == 128 +#define AESKEY_X448 16 /**< Symmetric Key size - 128 bits */ +#define HASH_TYPE_X448 SHA256 /**< Hash type */ +#endif + +#if CURVE_SECURITY_X448 == 192 +#define AESKEY_X448 24 /**< Symmetric Key size - 192 bits */ +#define HASH_TYPE_X448 SHA384 /**< Hash type */ +#endif + +#if CURVE_SECURITY_X448 == 256 +#define AESKEY_X448 32 /**< Symmetric Key size - 256 bits */ +#define HASH_TYPE_X448 SHA512 /**< Hash type */ +#endif + + +namespace X448_BIG = B448_58; +namespace X448_FP = F448; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_ff.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_ff.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA2048.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA2048.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA2048.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA2048.h index 9295409..69a2143 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA2048.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA2048.h @@ -1,32 +1,32 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_RSA_RSA2048_H -#define CONFIG_RSA_RSA2048_H - -#include "core.h" -#include "config_big_B512_60.h" - -// FF stuff - -#define FFLEN_RSA2048 4 /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */ - -namespace RSA2048_BIG = B512_60; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_RSA_RSA2048_H +#define CONFIG_RSA_RSA2048_H + +#include "core.h" +#include "config_big_B512_60.h" + +// FF stuff + +#define FFLEN_RSA2048 4 /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */ + +namespace RSA2048_BIG = B512_60; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA3072.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA3072.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA3072.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA3072.h index aa73885..5b58063 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA3072.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA3072.h @@ -1,32 +1,32 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_RSA_RSA3072_H -#define CONFIG_RSA_RSA3072_H - -#include "core.h" -#include "config_big_B384_56.h" - -// FF stuff - -#define FFLEN_RSA3072 8 /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */ - -namespace RSA3072_BIG = B384_56; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_RSA_RSA3072_H +#define CONFIG_RSA_RSA3072_H + +#include "core.h" +#include "config_big_B384_56.h" + +// FF stuff + +#define FFLEN_RSA3072 8 /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */ + +namespace RSA3072_BIG = B384_56; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA4096.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA4096.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA4096.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA4096.h index 8b0323c..605cccc 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_ff_RSA4096.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_ff_RSA4096.h @@ -1,32 +1,32 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_RSA_RSA4096_H -#define CONFIG_RSA_RSA4096_H - -#include "core.h" -#include "config_big_B512_60.h" - -// FF stuff - -#define FFLEN_RSA4096 8 /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */ - -namespace RSA4096_BIG = B512_60; - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_RSA_RSA4096_H +#define CONFIG_RSA_RSA4096_H + +#include "core.h" +#include "config_big_B512_60.h" + +// FF stuff + +#define FFLEN_RSA4096 8 /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */ + +namespace RSA4096_BIG = B512_60; + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_field.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/config_field.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_ANSSI.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_ANSSI.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_ANSSI.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_ANSSI.h index e810e76..a12e78a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_ANSSI.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_ANSSI.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_ANSSI_H -#define CONFIG_FIELD_ANSSI_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_ANSSI 256 -#define PM1D2_ANSSI 1 -#define MODTYPE_ANSSI NOT_SPECIAL -#define MAXXES_ANSSI 24 -#define QNRI_ANSSI 0 -#define RIADZ_ANSSI -5 -#define RIADZG2A_ANSSI 0 -#define RIADZG2B_ANSSI 0 -#define TOWER_ANSSI NEGATOWER - -//#define BIG_ENDIAN_SIGN_ANSSI - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_ANSSI_H +#define CONFIG_FIELD_ANSSI_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_ANSSI 256 +#define PM1D2_ANSSI 1 +#define MODTYPE_ANSSI NOT_SPECIAL +#define MAXXES_ANSSI 24 +#define QNRI_ANSSI 0 +#define RIADZ_ANSSI -5 +#define RIADZG2A_ANSSI 0 +#define RIADZG2B_ANSSI 0 +#define TOWER_ANSSI NEGATOWER + +//#define BIG_ENDIAN_SIGN_ANSSI + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12381.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12381.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12381.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12381.h index 53923e3..579fce1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12381.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12381.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS12381_H -#define CONFIG_FIELD_BLS12381_H - -#include"core.h" -#include "config_big_B384_58.h" - -// FP stuff - -#define MBITS_BLS12381 381 -#define PM1D2_BLS12381 1 -#define MODTYPE_BLS12381 NOT_SPECIAL -#define MAXXES_BLS12381 25 -#define QNRI_BLS12381 0 -#define RIADZ_BLS12381 11 -#define RIADZG2A_BLS12381 -2 -#define RIADZG2B_BLS12381 -1 -#define TOWER_BLS12381 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS12381 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS12381_H +#define CONFIG_FIELD_BLS12381_H + +#include"core.h" +#include "config_big_B384_58.h" + +// FP stuff + +#define MBITS_BLS12381 381 +#define PM1D2_BLS12381 1 +#define MODTYPE_BLS12381 NOT_SPECIAL +#define MAXXES_BLS12381 25 +#define QNRI_BLS12381 0 +#define RIADZ_BLS12381 11 +#define RIADZG2A_BLS12381 -2 +#define RIADZG2B_BLS12381 -1 +#define TOWER_BLS12381 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS12381 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12383.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12383.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12383.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12383.h index 48fef18..03cb9c7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12383.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12383.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS12383_H -#define CONFIG_FIELD_BLS12383_H - -#include"core.h" -#include "config_big_B384_58.h" - -// FP stuff - -#define MBITS_BLS12383 383 -#define PM1D2_BLS12383 1 -#define MODTYPE_BLS12383 NOT_SPECIAL -#define MAXXES_BLS12383 23 -#define QNRI_BLS12383 0 -#define RIADZ_BLS12383 1 -#define RIADZG2A_BLS12383 1 -#define RIADZG2B_BLS12383 0 -#define TOWER_BLS12383 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS12383 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS12383_H +#define CONFIG_FIELD_BLS12383_H + +#include"core.h" +#include "config_big_B384_58.h" + +// FP stuff + +#define MBITS_BLS12383 383 +#define PM1D2_BLS12383 1 +#define MODTYPE_BLS12383 NOT_SPECIAL +#define MAXXES_BLS12383 23 +#define QNRI_BLS12383 0 +#define RIADZ_BLS12383 1 +#define RIADZG2A_BLS12383 1 +#define RIADZG2B_BLS12383 0 +#define TOWER_BLS12383 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS12383 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12443.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12443.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12443.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12443.h index 9201da4..03ffae8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12443.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12443.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS12443_H -#define CONFIG_FIELD_BLS12443_H - -#include"core.h" -#include "config_big_B448_60.h" - -// FP stuff - -#define MBITS_BLS12443 443 -#define PM1D2_BLS12443 1 -#define MODTYPE_BLS12443 NOT_SPECIAL -#define MAXXES_BLS12443 30 -#define QNRI_BLS12443 0 -#define RIADZ_BLS12443 -7 -#define RIADZG2A_BLS12443 1 -#define RIADZG2B_BLS12443 1 -#define TOWER_BLS12443 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS12443 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS12443_H +#define CONFIG_FIELD_BLS12443_H + +#include"core.h" +#include "config_big_B448_60.h" + +// FP stuff + +#define MBITS_BLS12443 443 +#define PM1D2_BLS12443 1 +#define MODTYPE_BLS12443 NOT_SPECIAL +#define MAXXES_BLS12443 30 +#define QNRI_BLS12443 0 +#define RIADZ_BLS12443 -7 +#define RIADZG2A_BLS12443 1 +#define RIADZG2B_BLS12443 1 +#define TOWER_BLS12443 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS12443 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12461.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12461.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12461.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12461.h index 08e8713..5377186 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS12461.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS12461.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS12461_H -#define CONFIG_FIELD_BLS12461_H - -#include"core.h" -#include "config_big_B464_60.h" - -// FP stuff - -#define MBITS_BLS12461 461 -#define PM1D2_BLS12461 1 -#define MODTYPE_BLS12461 NOT_SPECIAL -#define MAXXES_BLS12461 19 -#define QNRI_BLS12461 0 -#define RIADZ_BLS12461 1 -#define RIADZG2A_BLS12461 4 -#define RIADZG2B_BLS12461 0 -#define TOWER_BLS12461 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS12461 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS12461_H +#define CONFIG_FIELD_BLS12461_H + +#include"core.h" +#include "config_big_B464_60.h" + +// FP stuff + +#define MBITS_BLS12461 461 +#define PM1D2_BLS12461 1 +#define MODTYPE_BLS12461 NOT_SPECIAL +#define MAXXES_BLS12461 19 +#define QNRI_BLS12461 0 +#define RIADZ_BLS12461 1 +#define RIADZG2A_BLS12461 4 +#define RIADZG2B_BLS12461 0 +#define TOWER_BLS12461 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS12461 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS24479.h index 2feefdc..0d7aeaf 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS24479.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS24479_H -#define CONFIG_FIELD_BLS24479_H - -#include"core.h" -#include "config_big_B480_56.h" - -// FP stuff - -#define MBITS_BLS24479 479 -#define PM1D2_BLS24479 1 -#define MODTYPE_BLS24479 NOT_SPECIAL -#define MAXXES_BLS24479 25 -#define QNRI_BLS24479 0 -#define RIADZ_BLS24479 1 -#define RIADZG2A_BLS24479 4 -#define RIADZG2B_BLS24479 0 -#define TOWER_BLS24479 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS24479 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS24479_H +#define CONFIG_FIELD_BLS24479_H + +#include"core.h" +#include "config_big_B480_56.h" + +// FP stuff + +#define MBITS_BLS24479 479 +#define PM1D2_BLS24479 1 +#define MODTYPE_BLS24479 NOT_SPECIAL +#define MAXXES_BLS24479 25 +#define QNRI_BLS24479 0 +#define RIADZ_BLS24479 1 +#define RIADZG2A_BLS24479 4 +#define RIADZG2B_BLS24479 0 +#define TOWER_BLS24479 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS24479 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48286.h index c7c8b56..c34c09d 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48286.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS48286_H -#define CONFIG_FIELD_BLS48286_H - -#include"core.h" -#include "config_big_B288_60.h" - -// FP stuff - -#define MBITS_BLS48286 286 -#define PM1D2_BLS48286 1 -#define MODTYPE_BLS48286 NOT_SPECIAL -#define MAXXES_BLS48286 14 -#define QNRI_BLS48286 0 -#define RIADZ_BLS48286 1 -#define RIADZG2A_BLS48286 1 -#define RIADZG2B_BLS48286 0 -#define TOWER_BLS48286 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS48286 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS48286_H +#define CONFIG_FIELD_BLS48286_H + +#include"core.h" +#include "config_big_B288_60.h" + +// FP stuff + +#define MBITS_BLS48286 286 +#define PM1D2_BLS48286 1 +#define MODTYPE_BLS48286 NOT_SPECIAL +#define MAXXES_BLS48286 14 +#define QNRI_BLS48286 0 +#define RIADZ_BLS48286 1 +#define RIADZG2A_BLS48286 1 +#define RIADZG2B_BLS48286 0 +#define TOWER_BLS48286 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS48286 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48556.h index 5837180..d5705c1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48556.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS48556_H -#define CONFIG_FIELD_BLS48556_H - -#include"core.h" -#include "config_big_B560_58.h" - -// FP stuff - -#define MBITS_BLS48556 556 -#define PM1D2_BLS48556 1 -#define MODTYPE_BLS48556 NOT_SPECIAL -#define MAXXES_BLS48556 24 -#define QNRI_BLS48556 0 -#define RIADZ_BLS48556 -1 -#define RIADZG2A_BLS48556 2 -#define RIADZG2B_BLS48556 0 -#define TOWER_BLS48556 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BLS48556 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS48556_H +#define CONFIG_FIELD_BLS48556_H + +#include"core.h" +#include "config_big_B560_58.h" + +// FP stuff + +#define MBITS_BLS48556 556 +#define PM1D2_BLS48556 1 +#define MODTYPE_BLS48556 NOT_SPECIAL +#define MAXXES_BLS48556 24 +#define QNRI_BLS48556 0 +#define RIADZ_BLS48556 -1 +#define RIADZG2A_BLS48556 2 +#define RIADZG2B_BLS48556 0 +#define TOWER_BLS48556 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BLS48556 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48581.h index 9250ec0..20ad904 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BLS48581.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BLS48581_H -#define CONFIG_FIELD_BLS48581_H - -#include"core.h" -#include "config_big_B584_60.h" - -// FP stuff - -#define MBITS_BLS48581 581 -#define PM1D2_BLS48581 1 -#define MODTYPE_BLS48581 NOT_SPECIAL -#define MAXXES_BLS48581 19 -#define QNRI_BLS48581 0 -#define RIADZ_BLS48581 2 -#define RIADZG2A_BLS48581 2 -#define RIADZG2B_BLS48581 0 -#define TOWER_BLS48581 POSITOWER - -//#define BIG_ENDIAN_SIGN_BLS48581 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BLS48581_H +#define CONFIG_FIELD_BLS48581_H + +#include"core.h" +#include "config_big_B584_60.h" + +// FP stuff + +#define MBITS_BLS48581 581 +#define PM1D2_BLS48581 1 +#define MODTYPE_BLS48581 NOT_SPECIAL +#define MAXXES_BLS48581 19 +#define QNRI_BLS48581 0 +#define RIADZ_BLS48581 2 +#define RIADZG2A_BLS48581 2 +#define RIADZG2B_BLS48581 0 +#define TOWER_BLS48581 POSITOWER + +//#define BIG_ENDIAN_SIGN_BLS48581 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN158.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN158.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN158.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN158.h index 8ca6c82..024b195 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN158.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN158.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BN158_H -#define CONFIG_FIELD_BN158_H - -#include"core.h" -#include "config_big_B160_56.h" - -// FP stuff - -#define MBITS_BN158 158 -#define PM1D2_BN158 1 -#define MODTYPE_BN158 NOT_SPECIAL -#define MAXXES_BN158 10 -#define QNRI_BN158 0 -#define RIADZ_BN158 1 -#define RIADZG2A_BN158 1 -#define RIADZG2B_BN158 0 -#define TOWER_BN158 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BN158 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BN158_H +#define CONFIG_FIELD_BN158_H + +#include"core.h" +#include "config_big_B160_56.h" + +// FP stuff + +#define MBITS_BN158 158 +#define PM1D2_BN158 1 +#define MODTYPE_BN158 NOT_SPECIAL +#define MAXXES_BN158 10 +#define QNRI_BN158 0 +#define RIADZ_BN158 1 +#define RIADZG2A_BN158 1 +#define RIADZG2B_BN158 0 +#define TOWER_BN158 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BN158 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN254.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN254.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN254.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN254.h index 6f1849c..187ae79 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN254.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN254.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BN254_H -#define CONFIG_FIELD_BN254_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_BN254 254 -#define PM1D2_BN254 1 -#define MODTYPE_BN254 NOT_SPECIAL -#define MAXXES_BN254 26 -#define QNRI_BN254 0 -#define RIADZ_BN254 -1 -#define RIADZG2A_BN254 -1 -#define RIADZG2B_BN254 0 -#define TOWER_BN254 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BN254 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BN254_H +#define CONFIG_FIELD_BN254_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_BN254 254 +#define PM1D2_BN254 1 +#define MODTYPE_BN254 NOT_SPECIAL +#define MAXXES_BN254 26 +#define QNRI_BN254 0 +#define RIADZ_BN254 -1 +#define RIADZG2A_BN254 -1 +#define RIADZG2B_BN254 0 +#define TOWER_BN254 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BN254 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN254CX.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN254CX.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN254CX.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN254CX.h index 5a65df1..b3b3e26 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN254CX.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN254CX.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BN254CX_H -#define CONFIG_FIELD_BN254CX_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_BN254CX 254 -#define PM1D2_BN254CX 1 -#define MODTYPE_BN254CX NOT_SPECIAL -#define MAXXES_BN254CX 26 -#define QNRI_BN254CX 0 -#define RIADZ_BN254CX -1 -#define RIADZG2A_BN254CX -1 -#define RIADZG2B_BN254CX 0 -#define TOWER_BN254CX NEGATOWER - -//#define BIG_ENDIAN_SIGN_BN254CX - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BN254CX_H +#define CONFIG_FIELD_BN254CX_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_BN254CX 254 +#define PM1D2_BN254CX 1 +#define MODTYPE_BN254CX NOT_SPECIAL +#define MAXXES_BN254CX 26 +#define QNRI_BN254CX 0 +#define RIADZ_BN254CX -1 +#define RIADZG2A_BN254CX -1 +#define RIADZG2B_BN254CX 0 +#define TOWER_BN254CX NEGATOWER + +//#define BIG_ENDIAN_SIGN_BN254CX + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN462.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN462.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN462.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN462.h index 8210e2f..1690105 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BN462.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BN462.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BN462_H -#define CONFIG_FIELD_BN462_H - -#include"core.h" -#include "config_big_B464_60.h" - -// FP stuff - -#define MBITS_BN462 462 -#define PM1D2_BN462 1 -#define MODTYPE_BN462 NOT_SPECIAL -#define MAXXES_BN462 18 -#define QNRI_BN462 1 -#define RIADZ_BN462 1 -#define RIADZG2A_BN462 1 -#define RIADZG2B_BN462 0 -#define TOWER_BN462 NEGATOWER - -//#define BIG_ENDIAN_SIGN_BN462 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BN462_H +#define CONFIG_FIELD_BN462_H + +#include"core.h" +#include "config_big_B464_60.h" + +// FP stuff + +#define MBITS_BN462 462 +#define PM1D2_BN462 1 +#define MODTYPE_BN462 NOT_SPECIAL +#define MAXXES_BN462 18 +#define QNRI_BN462 1 +#define RIADZ_BN462 1 +#define RIADZG2A_BN462 1 +#define RIADZG2B_BN462 0 +#define TOWER_BN462 NEGATOWER + +//#define BIG_ENDIAN_SIGN_BN462 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BRAINPOOL.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BRAINPOOL.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BRAINPOOL.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BRAINPOOL.h index 3747fb2..be6cb12 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_BRAINPOOL.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_BRAINPOOL.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_BRAINPOOL_H -#define CONFIG_FIELD_BRAINPOOL_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_BRAINPOOL 256 -#define PM1D2_BRAINPOOL 1 -#define MODTYPE_BRAINPOOL NOT_SPECIAL -#define MAXXES_BRAINPOOL 24 -#define QNRI_BRAINPOOL 0 -#define RIADZ_BRAINPOOL -3 -#define RIADZG2A_BRAINPOOL 0 -#define RIADZG2B_BRAINPOOL 0 -#define TOWER_BRAINPOOL NEGATOWER - -//#define BIG_ENDIAN_SIGN_BRAINPOOL - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_BRAINPOOL_H +#define CONFIG_FIELD_BRAINPOOL_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_BRAINPOOL 256 +#define PM1D2_BRAINPOOL 1 +#define MODTYPE_BRAINPOOL NOT_SPECIAL +#define MAXXES_BRAINPOOL 24 +#define QNRI_BRAINPOOL 0 +#define RIADZ_BRAINPOOL -3 +#define RIADZG2A_BRAINPOOL 0 +#define RIADZG2B_BRAINPOOL 0 +#define TOWER_BRAINPOOL NEGATOWER + +//#define BIG_ENDIAN_SIGN_BRAINPOOL + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C1174.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C1174.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C1174.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C1174.h index c7386c8..79f81eb 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C1174.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C1174.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_C1174_H -#define CONFIG_FIELD_C1174_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_C1174 251 -#define PM1D2_C1174 1 -#define MODTYPE_C1174 PSEUDO_MERSENNE -#define MAXXES_C1174 29 -#define QNRI_C1174 0 -#define RIADZ_C1174 0 -#define RIADZG2A_C1174 0 -#define RIADZG2B_C1174 0 -#define TOWER_C1174 NEGATOWER - -//#define BIG_ENDIAN_SIGN_C1174 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_C1174_H +#define CONFIG_FIELD_C1174_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_C1174 251 +#define PM1D2_C1174 1 +#define MODTYPE_C1174 PSEUDO_MERSENNE +#define MAXXES_C1174 29 +#define QNRI_C1174 0 +#define RIADZ_C1174 0 +#define RIADZG2A_C1174 0 +#define RIADZG2B_C1174 0 +#define TOWER_C1174 NEGATOWER + +//#define BIG_ENDIAN_SIGN_C1174 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C1665.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C1665.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C1665.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C1665.h index 3759646..8a1b1c4 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C1665.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C1665.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_C1665_H -#define CONFIG_FIELD_C1665_H - -#include"core.h" -#include "config_big_B168_60.h" - -// FP stuff - -#define MBITS_C1665 166 -#define PM1D2_C1665 1 -#define MODTYPE_C1665 PSEUDO_MERSENNE -#define MAXXES_C1665 14 -#define QNRI_C1665 0 -#define RIADZ_C1665 0 -#define RIADZG2A_C1665 0 -#define RIADZG2B_C1665 0 -#define TOWER_C1665 NEGATOWER - -//#define BIG_ENDIAN_SIGN_C1665 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_C1665_H +#define CONFIG_FIELD_C1665_H + +#include"core.h" +#include "config_big_B168_60.h" + +// FP stuff + +#define MBITS_C1665 166 +#define PM1D2_C1665 1 +#define MODTYPE_C1665 PSEUDO_MERSENNE +#define MAXXES_C1665 14 +#define QNRI_C1665 0 +#define RIADZ_C1665 0 +#define RIADZG2A_C1665 0 +#define RIADZG2B_C1665 0 +#define TOWER_C1665 NEGATOWER + +//#define BIG_ENDIAN_SIGN_C1665 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C41417.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C41417.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C41417.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C41417.h index 4424809..55391bd 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_C41417.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_C41417.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_C41417_H -#define CONFIG_FIELD_C41417_H - -#include"core.h" -#include "config_big_B416_60.h" - -// FP stuff - -#define MBITS_C41417 414 -#define PM1D2_C41417 1 -#define MODTYPE_C41417 PSEUDO_MERSENNE -#define MAXXES_C41417 6 -#define QNRI_C41417 0 -#define RIADZ_C41417 1 -#define RIADZG2A_C41417 0 -#define RIADZG2B_C41417 0 -#define TOWER_C41417 NEGATOWER - -//#define BIG_ENDIAN_SIGN_C41417 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_C41417_H +#define CONFIG_FIELD_C41417_H + +#include"core.h" +#include "config_big_B416_60.h" + +// FP stuff + +#define MBITS_C41417 414 +#define PM1D2_C41417 1 +#define MODTYPE_C41417 PSEUDO_MERSENNE +#define MAXXES_C41417 6 +#define QNRI_C41417 0 +#define RIADZ_C41417 1 +#define RIADZG2A_C41417 0 +#define RIADZG2B_C41417 0 +#define TOWER_C41417 NEGATOWER + +//#define BIG_ENDIAN_SIGN_C41417 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F25519.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F25519.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F25519.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F25519.h index 0546ad7..37c0fe4 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F25519.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F25519.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_F25519_H -#define CONFIG_FIELD_F25519_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_F25519 255 -#define PM1D2_F25519 2 -#define MODTYPE_F25519 PSEUDO_MERSENNE -#define MAXXES_F25519 25 -#define QNRI_F25519 0 -#define RIADZ_F25519 2 -#define RIADZG2A_F25519 0 -#define RIADZG2B_F25519 0 -#define TOWER_F25519 NEGATOWER - -//#define BIG_ENDIAN_SIGN_F25519 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_F25519_H +#define CONFIG_FIELD_F25519_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_F25519 255 +#define PM1D2_F25519 2 +#define MODTYPE_F25519 PSEUDO_MERSENNE +#define MAXXES_F25519 25 +#define QNRI_F25519 0 +#define RIADZ_F25519 2 +#define RIADZG2A_F25519 0 +#define RIADZG2B_F25519 0 +#define TOWER_F25519 NEGATOWER + +//#define BIG_ENDIAN_SIGN_F25519 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F256PME.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F256PME.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F256PME.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F256PME.h index 721f005..1b1296e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F256PME.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F256PME.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_F256PME_H -#define CONFIG_FIELD_F256PME_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_F256PME 256 -#define PM1D2_F256PME 1 -#define MODTYPE_F256PME PSEUDO_MERSENNE -#define MAXXES_F256PME 24 -#define QNRI_F256PME 0 -#define RIADZ_F256PME 0 -#define RIADZG2A_F256PME 0 -#define RIADZG2B_F256PME 0 -#define TOWER_F256PME NEGATOWER - -//#define BIG_ENDIAN_SIGN_F256PME - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_F256PME_H +#define CONFIG_FIELD_F256PME_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_F256PME 256 +#define PM1D2_F256PME 1 +#define MODTYPE_F256PME PSEUDO_MERSENNE +#define MAXXES_F256PME 24 +#define QNRI_F256PME 0 +#define RIADZ_F256PME 0 +#define RIADZG2A_F256PME 0 +#define RIADZG2B_F256PME 0 +#define TOWER_F256PME NEGATOWER + +//#define BIG_ENDIAN_SIGN_F256PME + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F256PMW.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F256PMW.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F256PMW.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F256PMW.h index 16e7daa..8f0a5f8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F256PMW.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F256PMW.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_F256PMW_H -#define CONFIG_FIELD_F256PMW_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_F256PMW 256 -#define PM1D2_F256PMW 1 -#define MODTYPE_F256PMW PSEUDO_MERSENNE -#define MAXXES_F256PMW 24 -#define QNRI_F256PMW 0 -#define RIADZ_F256PMW 7 -#define RIADZG2A_F256PMW 0 -#define RIADZG2B_F256PMW 0 -#define TOWER_F256PMW NEGATOWER - -//#define BIG_ENDIAN_SIGN_F256PMW - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_F256PMW_H +#define CONFIG_FIELD_F256PMW_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_F256PMW 256 +#define PM1D2_F256PMW 1 +#define MODTYPE_F256PMW PSEUDO_MERSENNE +#define MAXXES_F256PMW 24 +#define QNRI_F256PMW 0 +#define RIADZ_F256PMW 7 +#define RIADZG2A_F256PMW 0 +#define RIADZG2B_F256PMW 0 +#define TOWER_F256PMW NEGATOWER + +//#define BIG_ENDIAN_SIGN_F256PMW + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F384PM.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F384PM.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F384PM.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F384PM.h index 014d251..176caf5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F384PM.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F384PM.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_F384PM_H -#define CONFIG_FIELD_F384PM_H - -#include"core.h" -#include "config_big_B384_58.h" - -// FP stuff - -#define MBITS_F384PM 384 -#define PM1D2_F384PM 1 -#define MODTYPE_F384PM PSEUDO_MERSENNE -#define MAXXES_F384PM 22 -#define QNRI_F384PM 0 -#define RIADZ_F384PM 0 -#define RIADZG2A_F384PM 0 -#define RIADZG2B_F384PM 0 -#define TOWER_F384PM NEGATOWER - -//#define BIG_ENDIAN_SIGN_F384PM - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_F384PM_H +#define CONFIG_FIELD_F384PM_H + +#include"core.h" +#include "config_big_B384_58.h" + +// FP stuff + +#define MBITS_F384PM 384 +#define PM1D2_F384PM 1 +#define MODTYPE_F384PM PSEUDO_MERSENNE +#define MAXXES_F384PM 22 +#define QNRI_F384PM 0 +#define RIADZ_F384PM 0 +#define RIADZG2A_F384PM 0 +#define RIADZG2B_F384PM 0 +#define TOWER_F384PM NEGATOWER + +//#define BIG_ENDIAN_SIGN_F384PM + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F448.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F448.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F448.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F448.h index bd806f0..39b770e 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F448.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F448.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_F448_H -#define CONFIG_FIELD_F448_H - -#include"core.h" -#include "config_big_B448_58.h" - -// FP stuff - -#define MBITS_F448 448 -#define PM1D2_F448 1 -#define MODTYPE_F448 GENERALISED_MERSENNE -#define MAXXES_F448 16 -#define QNRI_F448 0 -#define RIADZ_F448 0 -#define RIADZG2A_F448 0 -#define RIADZG2B_F448 0 -#define TOWER_F448 NEGATOWER - -//#define BIG_ENDIAN_SIGN_F448 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_F448_H +#define CONFIG_FIELD_F448_H + +#include"core.h" +#include "config_big_B448_58.h" + +// FP stuff + +#define MBITS_F448 448 +#define PM1D2_F448 1 +#define MODTYPE_F448 GENERALISED_MERSENNE +#define MAXXES_F448 16 +#define QNRI_F448 0 +#define RIADZ_F448 0 +#define RIADZG2A_F448 0 +#define RIADZG2B_F448 0 +#define TOWER_F448 NEGATOWER + +//#define BIG_ENDIAN_SIGN_F448 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F512PM.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F512PM.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F512PM.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F512PM.h index b39db70..81dfdc2 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_F512PM.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_F512PM.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_F512PM_H -#define CONFIG_FIELD_F512PM_H - -#include"core.h" -#include "config_big_B512_60.h" - -// FP stuff - -#define MBITS_F512PM 512 -#define PM1D2_F512PM 1 -#define MODTYPE_F512PM PSEUDO_MERSENNE -#define MAXXES_F512PM 28 -#define QNRI_F512PM 0 -#define RIADZ_F512PM 0 -#define RIADZG2A_F512PM 0 -#define RIADZG2B_F512PM 0 -#define TOWER_F512PM NEGATOWER - -//#define BIG_ENDIAN_SIGN_F512PM - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_F512PM_H +#define CONFIG_FIELD_F512PM_H + +#include"core.h" +#include "config_big_B512_60.h" + +// FP stuff + +#define MBITS_F512PM 512 +#define PM1D2_F512PM 1 +#define MODTYPE_F512PM PSEUDO_MERSENNE +#define MAXXES_F512PM 28 +#define QNRI_F512PM 0 +#define RIADZ_F512PM 0 +#define RIADZG2A_F512PM 0 +#define RIADZG2B_F512PM 0 +#define TOWER_F512PM NEGATOWER + +//#define BIG_ENDIAN_SIGN_F512PM + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_FP256BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_FP256BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_FP256BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_FP256BN.h index 45a6bb5..ab5d02a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_FP256BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_FP256BN.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_FP256BN_H -#define CONFIG_FIELD_FP256BN_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_FP256BN 256 -#define PM1D2_FP256BN 1 -#define MODTYPE_FP256BN NOT_SPECIAL -#define MAXXES_FP256BN 24 -#define QNRI_FP256BN 0 -#define RIADZ_FP256BN 1 -#define RIADZG2A_FP256BN 1 -#define RIADZG2B_FP256BN 0 -#define TOWER_FP256BN NEGATOWER - -//#define BIG_ENDIAN_SIGN_FP256BN - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_FP256BN_H +#define CONFIG_FIELD_FP256BN_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_FP256BN 256 +#define PM1D2_FP256BN 1 +#define MODTYPE_FP256BN NOT_SPECIAL +#define MAXXES_FP256BN 24 +#define QNRI_FP256BN 0 +#define RIADZ_FP256BN 1 +#define RIADZG2A_FP256BN 1 +#define RIADZG2B_FP256BN 0 +#define TOWER_FP256BN NEGATOWER + +//#define BIG_ENDIAN_SIGN_FP256BN + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_FP512BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_FP512BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_FP512BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_FP512BN.h index 33b9c78..18c488f 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_FP512BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_FP512BN.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_FP512BN_H -#define CONFIG_FIELD_FP512BN_H - -#include"core.h" -#include "config_big_B512_60.h" - -// FP stuff - -#define MBITS_FP512BN 512 -#define PM1D2_FP512BN 1 -#define MODTYPE_FP512BN NOT_SPECIAL -#define MAXXES_FP512BN 28 -#define QNRI_FP512BN 0 -#define RIADZ_FP512BN 1 -#define RIADZG2A_FP512BN 1 -#define RIADZG2B_FP512BN 0 -#define TOWER_FP512BN NEGATOWER - -//#define BIG_ENDIAN_SIGN_FP512BN - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_FP512BN_H +#define CONFIG_FIELD_FP512BN_H + +#include"core.h" +#include "config_big_B512_60.h" + +// FP stuff + +#define MBITS_FP512BN 512 +#define PM1D2_FP512BN 1 +#define MODTYPE_FP512BN NOT_SPECIAL +#define MAXXES_FP512BN 28 +#define QNRI_FP512BN 0 +#define RIADZ_FP512BN 1 +#define RIADZG2A_FP512BN 1 +#define RIADZG2B_FP512BN 0 +#define TOWER_FP512BN NEGATOWER + +//#define BIG_ENDIAN_SIGN_FP512BN + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_HIFIVE.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_HIFIVE.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_HIFIVE.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_HIFIVE.h index b5ed2e7..85ddf5a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_HIFIVE.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_HIFIVE.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_HIFIVE_H -#define CONFIG_FIELD_HIFIVE_H - -#include"core.h" -#include "config_big_B336_60.h" - -// FP stuff - -#define MBITS_HIFIVE 336 -#define PM1D2_HIFIVE 2 -#define MODTYPE_HIFIVE PSEUDO_MERSENNE -#define MAXXES_HIFIVE 24 -#define QNRI_HIFIVE 0 -#define RIADZ_HIFIVE 1 -#define RIADZG2A_HIFIVE 0 -#define RIADZG2B_HIFIVE 0 -#define TOWER_HIFIVE NEGATOWER - -//#define BIG_ENDIAN_SIGN_HIFIVE - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_HIFIVE_H +#define CONFIG_FIELD_HIFIVE_H + +#include"core.h" +#include "config_big_B336_60.h" + +// FP stuff + +#define MBITS_HIFIVE 336 +#define PM1D2_HIFIVE 2 +#define MODTYPE_HIFIVE PSEUDO_MERSENNE +#define MAXXES_HIFIVE 24 +#define QNRI_HIFIVE 0 +#define RIADZ_HIFIVE 1 +#define RIADZG2A_HIFIVE 0 +#define RIADZG2B_HIFIVE 0 +#define TOWER_HIFIVE NEGATOWER + +//#define BIG_ENDIAN_SIGN_HIFIVE + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_JUBJUB.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_JUBJUB.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_JUBJUB.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_JUBJUB.h index e6a1450..215298f 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_JUBJUB.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_JUBJUB.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_JUBJUB_H -#define CONFIG_FIELD_JUBJUB_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_JUBJUB 255 -#define PM1D2_JUBJUB 32 -#define MODTYPE_JUBJUB NOT_SPECIAL -#define MAXXES_JUBJUB 25 -#define QNRI_JUBJUB 5 -#define RIADZ_JUBJUB 1 -#define RIADZG2A_JUBJUB 0 -#define RIADZG2B_JUBJUB 0 -#define TOWER_JUBJUB NEGATOWER - -//#define BIG_ENDIAN_SIGN_JUBJUB - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_JUBJUB_H +#define CONFIG_FIELD_JUBJUB_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_JUBJUB 255 +#define PM1D2_JUBJUB 32 +#define MODTYPE_JUBJUB NOT_SPECIAL +#define MAXXES_JUBJUB 25 +#define QNRI_JUBJUB 5 +#define RIADZ_JUBJUB 1 +#define RIADZG2A_JUBJUB 0 +#define RIADZG2B_JUBJUB 0 +#define TOWER_JUBJUB NEGATOWER + +//#define BIG_ENDIAN_SIGN_JUBJUB + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_MDC.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_MDC.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_MDC.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_MDC.h index 995ae7f..2e4e77d 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_MDC.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_MDC.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_MDC_H -#define CONFIG_FIELD_MDC_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_MDC 256 -#define PM1D2_MDC 1 -#define MODTYPE_MDC NOT_SPECIAL -#define MAXXES_MDC 24 -#define QNRI_MDC 0 -#define RIADZ_MDC 0 -#define RIADZG2A_MDC 0 -#define RIADZG2B_MDC 0 -#define TOWER_MDC NEGATOWER - -//#define BIG_ENDIAN_SIGN_MDC - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_MDC_H +#define CONFIG_FIELD_MDC_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_MDC 256 +#define PM1D2_MDC 1 +#define MODTYPE_MDC NOT_SPECIAL +#define MAXXES_MDC 24 +#define QNRI_MDC 0 +#define RIADZ_MDC 0 +#define RIADZG2A_MDC 0 +#define RIADZG2B_MDC 0 +#define TOWER_MDC NEGATOWER + +//#define BIG_ENDIAN_SIGN_MDC + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST256.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST256.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST256.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST256.h index 0923d5d..dc4676b 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST256.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST256.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_NIST256_H -#define CONFIG_FIELD_NIST256_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_NIST256 256 -#define PM1D2_NIST256 1 -#define MODTYPE_NIST256 NOT_SPECIAL -#define MAXXES_NIST256 24 -#define QNRI_NIST256 0 -#define RIADZ_NIST256 -10 -#define RIADZG2A_NIST256 0 -#define RIADZG2B_NIST256 0 -#define TOWER_NIST256 NEGATOWER - -//#define BIG_ENDIAN_SIGN_NIST256 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_NIST256_H +#define CONFIG_FIELD_NIST256_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_NIST256 256 +#define PM1D2_NIST256 1 +#define MODTYPE_NIST256 NOT_SPECIAL +#define MAXXES_NIST256 24 +#define QNRI_NIST256 0 +#define RIADZ_NIST256 -10 +#define RIADZG2A_NIST256 0 +#define RIADZG2B_NIST256 0 +#define TOWER_NIST256 NEGATOWER + +//#define BIG_ENDIAN_SIGN_NIST256 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST384.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST384.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST384.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST384.h index d3c7219..50dfbb7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST384.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST384.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_NIST384_H -#define CONFIG_FIELD_NIST384_H - -#include"core.h" -#include "config_big_B384_56.h" - -// FP stuff - -#define MBITS_NIST384 384 -#define PM1D2_NIST384 1 -#define MODTYPE_NIST384 NOT_SPECIAL -#define MAXXES_NIST384 8 -#define QNRI_NIST384 0 -#define RIADZ_NIST384 -12 -#define RIADZG2A_NIST384 0 -#define RIADZG2B_NIST384 0 -#define TOWER_NIST384 NEGATOWER - -//#define BIG_ENDIAN_SIGN_NIST384 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_NIST384_H +#define CONFIG_FIELD_NIST384_H + +#include"core.h" +#include "config_big_B384_56.h" + +// FP stuff + +#define MBITS_NIST384 384 +#define PM1D2_NIST384 1 +#define MODTYPE_NIST384 NOT_SPECIAL +#define MAXXES_NIST384 8 +#define QNRI_NIST384 0 +#define RIADZ_NIST384 -12 +#define RIADZG2A_NIST384 0 +#define RIADZG2B_NIST384 0 +#define TOWER_NIST384 NEGATOWER + +//#define BIG_ENDIAN_SIGN_NIST384 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST521.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST521.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST521.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST521.h index b89d9ac..eab05bc 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_NIST521.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_NIST521.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_NIST521_H -#define CONFIG_FIELD_NIST521_H - -#include"core.h" -#include "config_big_B528_60.h" - -// FP stuff - -#define MBITS_NIST521 521 -#define PM1D2_NIST521 1 -#define MODTYPE_NIST521 PSEUDO_MERSENNE -#define MAXXES_NIST521 19 -#define QNRI_NIST521 0 -#define RIADZ_NIST521 -4 -#define RIADZG2A_NIST521 0 -#define RIADZG2B_NIST521 0 -#define TOWER_NIST521 NEGATOWER - -//#define BIG_ENDIAN_SIGN_NIST521 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_NIST521_H +#define CONFIG_FIELD_NIST521_H + +#include"core.h" +#include "config_big_B528_60.h" + +// FP stuff + +#define MBITS_NIST521 521 +#define PM1D2_NIST521 1 +#define MODTYPE_NIST521 PSEUDO_MERSENNE +#define MAXXES_NIST521 19 +#define QNRI_NIST521 0 +#define RIADZ_NIST521 -4 +#define RIADZG2A_NIST521 0 +#define RIADZG2B_NIST521 0 +#define TOWER_NIST521 NEGATOWER + +//#define BIG_ENDIAN_SIGN_NIST521 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SECP160R1.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SECP160R1.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SECP160R1.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SECP160R1.h index e32db36..144a7fc 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SECP160R1.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SECP160R1.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_SECP160R1_H -#define CONFIG_FIELD_SECP160R1_H - -#include"core.h" -#include "config_big_B160_56.h" - -// FP stuff - -#define MBITS_SECP160R1 160 -#define PM1D2_SECP160R1 1 -#define MODTYPE_SECP160R1 NOT_SPECIAL -#define MAXXES_SECP160R1 8 -#define QNRI_SECP160R1 0 -#define RIADZ_SECP160R1 3 -#define RIADZG2A_SECP160R1 0 -#define RIADZG2B_SECP160R1 0 -#define TOWER_SECP160R1 NEGATOWER - -//#define BIG_ENDIAN_SIGN_SECP160R1 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_SECP160R1_H +#define CONFIG_FIELD_SECP160R1_H + +#include"core.h" +#include "config_big_B160_56.h" + +// FP stuff + +#define MBITS_SECP160R1 160 +#define PM1D2_SECP160R1 1 +#define MODTYPE_SECP160R1 NOT_SPECIAL +#define MAXXES_SECP160R1 8 +#define QNRI_SECP160R1 0 +#define RIADZ_SECP160R1 3 +#define RIADZG2A_SECP160R1 0 +#define RIADZG2B_SECP160R1 0 +#define TOWER_SECP160R1 NEGATOWER + +//#define BIG_ENDIAN_SIGN_SECP160R1 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SECP256K1.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SECP256K1.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SECP256K1.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SECP256K1.h index 5efff7a..dfdb516 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SECP256K1.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SECP256K1.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_SECP256K1_H -#define CONFIG_FIELD_SECP256K1_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_SECP256K1 256 -#define PM1D2_SECP256K1 1 -#define MODTYPE_SECP256K1 NOT_SPECIAL -#define MAXXES_SECP256K1 24 -#define QNRI_SECP256K1 0 -#define RIADZ_SECP256K1 -11 -#define RIADZG2A_SECP256K1 0 -#define RIADZG2B_SECP256K1 0 -#define TOWER_SECP256K1 NEGATOWER - -//#define BIG_ENDIAN_SIGN_SECP256K1 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_SECP256K1_H +#define CONFIG_FIELD_SECP256K1_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_SECP256K1 256 +#define PM1D2_SECP256K1 1 +#define MODTYPE_SECP256K1 NOT_SPECIAL +#define MAXXES_SECP256K1 24 +#define QNRI_SECP256K1 0 +#define RIADZ_SECP256K1 -11 +#define RIADZG2A_SECP256K1 0 +#define RIADZG2B_SECP256K1 0 +#define TOWER_SECP256K1 NEGATOWER + +//#define BIG_ENDIAN_SIGN_SECP256K1 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SM2.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SM2.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SM2.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SM2.h index 951875f..ff92883 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_SM2.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_SM2.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_SM2_H -#define CONFIG_FIELD_SM2_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_SM2 256 -#define PM1D2_SM2 1 -#define MODTYPE_SM2 NOT_SPECIAL -#define MAXXES_SM2 24 -#define QNRI_SM2 0 -#define RIADZ_SM2 -9 -#define RIADZG2A_SM2 0 -#define RIADZG2B_SM2 0 -#define TOWER_SM2 NEGATOWER - -//#define BIG_ENDIAN_SIGN_SM2 - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_SM2_H +#define CONFIG_FIELD_SM2_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_SM2 256 +#define PM1D2_SM2 1 +#define MODTYPE_SM2 NOT_SPECIAL +#define MAXXES_SM2 24 +#define QNRI_SM2 0 +#define RIADZ_SM2 -9 +#define RIADZG2A_SM2 0 +#define RIADZG2B_SM2 0 +#define TOWER_SM2 NEGATOWER + +//#define BIG_ENDIAN_SIGN_SM2 + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_TWEEDLEDEE.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_TWEEDLEDEE.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_TWEEDLEDEE.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_TWEEDLEDEE.h index a29cb68..55d7fd8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_TWEEDLEDEE.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_TWEEDLEDEE.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_TWEEDLEDEE_H -#define CONFIG_FIELD_TWEEDLEDEE_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_TWEEDLEDEE 255 -#define PM1D2_TWEEDLEDEE 34 -#define MODTYPE_TWEEDLEDEE NOT_SPECIAL -#define MAXXES_TWEEDLEDEE 25 -#define QNRI_TWEEDLEDEE 5 -#define RIADZ_TWEEDLEDEE 1 -#define RIADZG2A_TWEEDLEDEE 0 -#define RIADZG2B_TWEEDLEDEE 0 -#define TOWER_TWEEDLEDEE NEGATOWER - -//#define BIG_ENDIAN_SIGN_TWEEDLEDEE - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_TWEEDLEDEE_H +#define CONFIG_FIELD_TWEEDLEDEE_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_TWEEDLEDEE 255 +#define PM1D2_TWEEDLEDEE 34 +#define MODTYPE_TWEEDLEDEE NOT_SPECIAL +#define MAXXES_TWEEDLEDEE 25 +#define QNRI_TWEEDLEDEE 5 +#define RIADZ_TWEEDLEDEE 1 +#define RIADZG2A_TWEEDLEDEE 0 +#define RIADZG2B_TWEEDLEDEE 0 +#define TOWER_TWEEDLEDEE NEGATOWER + +//#define BIG_ENDIAN_SIGN_TWEEDLEDEE + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_TWEEDLEDUM.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_TWEEDLEDUM.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_TWEEDLEDUM.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_TWEEDLEDUM.h index 68a6689..5f47ddc 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/config_field_TWEEDLEDUM.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/config_field_TWEEDLEDUM.h @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CONFIG_FIELD_TWEEDLEDUM_H -#define CONFIG_FIELD_TWEEDLEDUM_H - -#include"core.h" -#include "config_big_B256_56.h" - -// FP stuff - -#define MBITS_TWEEDLEDUM 255 -#define PM1D2_TWEEDLEDUM 33 -#define MODTYPE_TWEEDLEDUM NOT_SPECIAL -#define MAXXES_TWEEDLEDUM 25 -#define QNRI_TWEEDLEDUM 5 -#define RIADZ_TWEEDLEDUM 1 -#define RIADZG2A_TWEEDLEDUM 0 -#define RIADZG2B_TWEEDLEDUM 0 -#define TOWER_TWEEDLEDUM NEGATOWER - -//#define BIG_ENDIAN_SIGN_TWEEDLEDUM - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CONFIG_FIELD_TWEEDLEDUM_H +#define CONFIG_FIELD_TWEEDLEDUM_H + +#include"core.h" +#include "config_big_B256_56.h" + +// FP stuff + +#define MBITS_TWEEDLEDUM 255 +#define PM1D2_TWEEDLEDUM 33 +#define MODTYPE_TWEEDLEDUM NOT_SPECIAL +#define MAXXES_TWEEDLEDUM 25 +#define QNRI_TWEEDLEDUM 5 +#define RIADZ_TWEEDLEDUM 1 +#define RIADZG2A_TWEEDLEDUM 0 +#define RIADZG2B_TWEEDLEDUM 0 +#define TOWER_TWEEDLEDUM NEGATOWER + +//#define BIG_ENDIAN_SIGN_TWEEDLEDUM + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/core.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/core.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/core.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/core.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/dilithium.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/dilithium.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/dilithium.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/dilithium.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/ecdh.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ecdh.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/ecdh.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ecdh.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh_ANSSI.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ecdh_ANSSI.h similarity index 97% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh_ANSSI.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ecdh_ANSSI.h index 53c64d9..bcc0a86 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ecdh_ANSSI.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ecdh_ANSSI.h @@ -1,161 +1,161 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file ecdh.h - * @author Mike Scott and Kealan McCusker - * @date 2nd June 2015 - * @brief ECDH Header file for implementation of standard EC protocols - * - * declares functions - * - */ - -#ifndef ECDH_ANSSI_H -#define ECDH_ANSSI_H - -#include "ecp_ANSSI.h" -//#include "ecdh_support.h" - -using namespace core; - - -/*** START OF USER CONFIGURABLE SECTION - ***/ - -/*** START OF USER CONFIGURABLE SECTION - ***/ - - -/*** END OF USER CONFIGURABLE SECTION ***/ - -#define EGS_ANSSI MODBYTES_B256_56 /**< ECC Group Size in bytes */ -#define EFS_ANSSI MODBYTES_B256_56 /**< ECC Field Size in bytes */ - -#define ECDH_OK 0 /**< Function completed without error */ -/*#define ECDH_DOMAIN_ERROR -1*/ -#define ECDH_INVALID_PUBLIC_KEY -2 /**< Public Key is Invalid */ -#define ECDH_ERROR -3 /**< ECDH Internal Error */ -//#define ECDH_INVALID -4 /**< ECDH Internal Error */ -/*#define ECDH_DOMAIN_NOT_FOUND -5 -#define ECDH_OUT_OF_MEMORY -6 -#define ECDH_DIV_BY_ZERO -7 -#define ECDH_BAD_ASSUMPTION -8*/ - - -namespace ANSSI { - -/** @brief Test if group element in correct range - * - @param s is a random number - @return 1 if 0>(P_TBITS_RSA2048))+1) -#define P_FEXCESS_RSA2048 ((chunk)1<<(BASEBITS_B512_60*NLEN_B512_60-P_MBITS_RSA2048-1)) - - -namespace RSA2048 { - -/* Finite Field Prototypes */ -/** @brief Copy one FF element of given length to another - * - @param x FF instance to be copied to, on exit = y - @param y FF instance to be copied from - @param n size of FF in BIGs - - */ -extern void FF_copy(B512_60::BIG *x, B512_60::BIG *y, int n); -/** @brief Initialize an FF element of given length from a 32-bit integer m - * - @param x FF instance to be copied to, on exit = m - @param m integer - @param n size of FF in BIGs - */ -extern void FF_init(B512_60::BIG *x, sign32 m, int n); -/** @brief Set FF element of given size to zero - * - @param x FF instance to be set to zero - @param n size of FF in BIGs - */ -extern void FF_zero(B512_60::BIG *x, int n); -/** @brief Tests for FF element equal to zero - * - @param x FF number to be tested - @param n size of FF in BIGs - @return 1 if zero, else returns 0 - */ -extern int FF_iszilch(B512_60::BIG *x, int n); -/** @brief return parity of an FF, that is the least significant bit - * - @param x FF number - @return 0 or 1 - */ -extern int FF_parity(B512_60::BIG *x); -/** @brief return least significant m bits of an FF - * - @param x FF number - @param m number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int FF_lastbits(B512_60::BIG *x, int m); -/** @brief Set FF element of given size to unity - * - @param x FF instance to be set to unity - @param n size of FF in BIGs - */ -extern void FF_one(B512_60::BIG *x, int n); -/** @brief Compares two FF numbers. Inputs must be normalised externally - * - @param x first FF number to be compared - @param y second FF number to be compared - @param n size of FF in BIGs - @return -1 is xy - */ -extern int FF_comp(B512_60::BIG *x, B512_60::BIG *y, int n); -/** @brief addition of two FFs - * - @param x FF instance, on exit = y+z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_add(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief subtraction of two FFs - * - @param x FF instance, on exit = y-z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_sub(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief increment an FF by an integer,and normalise - * - @param x FF instance, on exit = x+m - @param m an integer to be added to x - @param n size of FF in BIGs - */ -extern void FF_inc(B512_60::BIG *x, int m, int n); -/** @brief Decrement an FF by an integer,and normalise - * - @param x FF instance, on exit = x-m - @param m an integer to be subtracted from x - @param n size of FF in BIGs - */ -extern void FF_dec(B512_60::BIG *x, int m, int n); -/** @brief Normalises the components of an FF - * - @param x FF instance to be normalised - @param n size of FF in BIGs - */ -extern void FF_norm(B512_60::BIG *x, int n); -/** @brief Shift left an FF by 1 bit - * - @param x FF instance to be shifted left - @param n size of FF in BIGs - */ -extern void FF_shl(B512_60::BIG *x, int n); -/** @brief Shift right an FF by 1 bit - * - @param x FF instance to be shifted right - @param n size of FF in BIGs - */ -extern void FF_shr(B512_60::BIG *x, int n); -/** @brief Formats and outputs an FF to the console - * - @param x FF instance to be printed - @param n size of FF in BIGs - */ -extern void FF_output(B512_60::BIG *x, int n); -/** @brief Formats and outputs an FF to the console, in raw form - * - @param x FF instance to be printed - @param n size of FF in BIGs - */ -extern void FF_rawoutput(B512_60::BIG *x, int n); -/** @brief Formats and outputs an FF instance to an octet string - * - Converts an FF to big-endian base 256 form. - @param S output octet string - @param x FF instance to be converted to an octet string - @param n size of FF in BIGs - */ -extern void FF_toOctet(octet *S, B512_60::BIG *x, int n); -/** @brief Populates an FF instance from an octet string - * - Creates FF from big-endian base 256 form. - @param x FF instance to be created from an octet string - @param S input octet string - @param n size of FF in BIGs - */ -extern void FF_fromOctet(B512_60::BIG *x, octet *S, int n); -/** @brief Multiplication of two FFs - * - Uses Karatsuba method internally - @param x FF instance, on exit = y*z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_mul(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief Reduce FF mod a modulus - * - This is slow - @param x FF instance to be reduced mod m - on exit = x mod m - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_mod(B512_60::BIG *x, B512_60::BIG *m, int n); -/** @brief Square an FF - * - Uses Karatsuba method internally - @param x FF instance, on exit = y^2 - @param y FF instance to be squared - @param n size of FF in BIGs - */ -extern void FF_sqr(B512_60::BIG *x, B512_60::BIG *y, int n); -/** @brief Reduces a double-length FF with respect to a given modulus - * - This is slow - @param x FF instance, on exit = y mod z - @param y FF instance, of double length 2*n - @param z FF modulus - @param n size of FF in BIGs - */ -extern void FF_dmod(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief Invert an FF mod a prime modulus - * - @param x FF instance, on exit = 1/y mod z - @param y FF instance - @param z FF prime modulus - @param n size of FF in BIGs - */ -extern void FF_invmodp(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief Create an FF from a random number generator - * - @param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1 - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - */ -extern void FF_random(B512_60::BIG *x, csprng *R, int n); -/** @brief Create a random FF less than a given modulus from a random number generator - * - @param x FF instance, on exit x is a random number < y - @param y FF instance, the modulus - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - */ -extern void FF_randomnum(B512_60::BIG *x, B512_60::BIG *y, csprng *R, int n); -/** @brief Calculate r=x^e mod m, side channel resistant - * - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e FF exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_skpow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG * e, B512_60::BIG *m, int n); -/** @brief Calculate r=x^e mod m, side channel resistant - * - For short BIG exponent - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e BIG exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_skspow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *m, int n); -/** @brief Calculate r=x^e mod m - * - For very short integer exponent - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e integer exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_power(B512_60::BIG *r, B512_60::BIG *x, int e, B512_60::BIG *m, int n); -/** @brief Calculate r=x^e mod m - * - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e FF exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_pow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG *e, B512_60::BIG *m, int n); -/** @brief Test if an FF has factor in common with integer s - * - @param x FF instance to be tested - @param s the supplied integer - @param n size of FF in BIGs - @return 1 if gcd(x,s)!=1, else return 0 - */ -extern int FF_cfactor(B512_60::BIG *x, sign32 s, int n); -/** @brief Test if an FF is prime - * - Uses Miller-Rabin Method - @param x FF instance to be tested - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - @return 1 if x is (almost certainly) prime, else return 0 - */ -extern int FF_prime(B512_60::BIG *x, csprng *R, int n); -/** @brief Calculate r=x^e.y^f mod m - * - @param r FF instance, on exit = x^e.y^f mod p - @param x FF instance - @param e BIG exponent - @param y FF instance - @param f BIG exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_pow2(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *y, B512_60::BIG f, B512_60::BIG *m, int n); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FF_RSA2048_H +#define FF_RSA2048_H + +#include "big_B512_60.h" +#include "config_ff_RSA2048.h" + +using namespace core; + +#define HFLEN_RSA2048 (FFLEN_RSA2048/2) /**< Useful for half-size RSA private key operations */ +#define P_MBITS_RSA2048 (MODBYTES_B512_60*8) +#define P_TBITS_RSA2048 (P_MBITS_RSA2048%BASEBITS_B512_60) +#define P_EXCESS_RSA2048(a) (((a[NLEN_B512_60-1])>>(P_TBITS_RSA2048))+1) +#define P_FEXCESS_RSA2048 ((chunk)1<<(BASEBITS_B512_60*NLEN_B512_60-P_MBITS_RSA2048-1)) + + +namespace RSA2048 { + +/* Finite Field Prototypes */ +/** @brief Copy one FF element of given length to another + * + @param x FF instance to be copied to, on exit = y + @param y FF instance to be copied from + @param n size of FF in BIGs + + */ +extern void FF_copy(B512_60::BIG *x, B512_60::BIG *y, int n); +/** @brief Initialize an FF element of given length from a 32-bit integer m + * + @param x FF instance to be copied to, on exit = m + @param m integer + @param n size of FF in BIGs + */ +extern void FF_init(B512_60::BIG *x, sign32 m, int n); +/** @brief Set FF element of given size to zero + * + @param x FF instance to be set to zero + @param n size of FF in BIGs + */ +extern void FF_zero(B512_60::BIG *x, int n); +/** @brief Tests for FF element equal to zero + * + @param x FF number to be tested + @param n size of FF in BIGs + @return 1 if zero, else returns 0 + */ +extern int FF_iszilch(B512_60::BIG *x, int n); +/** @brief return parity of an FF, that is the least significant bit + * + @param x FF number + @return 0 or 1 + */ +extern int FF_parity(B512_60::BIG *x); +/** @brief return least significant m bits of an FF + * + @param x FF number + @param m number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int FF_lastbits(B512_60::BIG *x, int m); +/** @brief Set FF element of given size to unity + * + @param x FF instance to be set to unity + @param n size of FF in BIGs + */ +extern void FF_one(B512_60::BIG *x, int n); +/** @brief Compares two FF numbers. Inputs must be normalised externally + * + @param x first FF number to be compared + @param y second FF number to be compared + @param n size of FF in BIGs + @return -1 is xy + */ +extern int FF_comp(B512_60::BIG *x, B512_60::BIG *y, int n); +/** @brief addition of two FFs + * + @param x FF instance, on exit = y+z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_add(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief subtraction of two FFs + * + @param x FF instance, on exit = y-z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_sub(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief increment an FF by an integer,and normalise + * + @param x FF instance, on exit = x+m + @param m an integer to be added to x + @param n size of FF in BIGs + */ +extern void FF_inc(B512_60::BIG *x, int m, int n); +/** @brief Decrement an FF by an integer,and normalise + * + @param x FF instance, on exit = x-m + @param m an integer to be subtracted from x + @param n size of FF in BIGs + */ +extern void FF_dec(B512_60::BIG *x, int m, int n); +/** @brief Normalises the components of an FF + * + @param x FF instance to be normalised + @param n size of FF in BIGs + */ +extern void FF_norm(B512_60::BIG *x, int n); +/** @brief Shift left an FF by 1 bit + * + @param x FF instance to be shifted left + @param n size of FF in BIGs + */ +extern void FF_shl(B512_60::BIG *x, int n); +/** @brief Shift right an FF by 1 bit + * + @param x FF instance to be shifted right + @param n size of FF in BIGs + */ +extern void FF_shr(B512_60::BIG *x, int n); +/** @brief Formats and outputs an FF to the console + * + @param x FF instance to be printed + @param n size of FF in BIGs + */ +extern void FF_output(B512_60::BIG *x, int n); +/** @brief Formats and outputs an FF to the console, in raw form + * + @param x FF instance to be printed + @param n size of FF in BIGs + */ +extern void FF_rawoutput(B512_60::BIG *x, int n); +/** @brief Formats and outputs an FF instance to an octet string + * + Converts an FF to big-endian base 256 form. + @param S output octet string + @param x FF instance to be converted to an octet string + @param n size of FF in BIGs + */ +extern void FF_toOctet(octet *S, B512_60::BIG *x, int n); +/** @brief Populates an FF instance from an octet string + * + Creates FF from big-endian base 256 form. + @param x FF instance to be created from an octet string + @param S input octet string + @param n size of FF in BIGs + */ +extern void FF_fromOctet(B512_60::BIG *x, octet *S, int n); +/** @brief Multiplication of two FFs + * + Uses Karatsuba method internally + @param x FF instance, on exit = y*z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_mul(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief Reduce FF mod a modulus + * + This is slow + @param x FF instance to be reduced mod m - on exit = x mod m + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_mod(B512_60::BIG *x, B512_60::BIG *m, int n); +/** @brief Square an FF + * + Uses Karatsuba method internally + @param x FF instance, on exit = y^2 + @param y FF instance to be squared + @param n size of FF in BIGs + */ +extern void FF_sqr(B512_60::BIG *x, B512_60::BIG *y, int n); +/** @brief Reduces a double-length FF with respect to a given modulus + * + This is slow + @param x FF instance, on exit = y mod z + @param y FF instance, of double length 2*n + @param z FF modulus + @param n size of FF in BIGs + */ +extern void FF_dmod(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief Invert an FF mod a prime modulus + * + @param x FF instance, on exit = 1/y mod z + @param y FF instance + @param z FF prime modulus + @param n size of FF in BIGs + */ +extern void FF_invmodp(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief Create an FF from a random number generator + * + @param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1 + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + */ +extern void FF_random(B512_60::BIG *x, csprng *R, int n); +/** @brief Create a random FF less than a given modulus from a random number generator + * + @param x FF instance, on exit x is a random number < y + @param y FF instance, the modulus + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + */ +extern void FF_randomnum(B512_60::BIG *x, B512_60::BIG *y, csprng *R, int n); +/** @brief Calculate r=x^e mod m, side channel resistant + * + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e FF exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_skpow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG * e, B512_60::BIG *m, int n); +/** @brief Calculate r=x^e mod m, side channel resistant + * + For short BIG exponent + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e BIG exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_skspow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *m, int n); +/** @brief Calculate r=x^e mod m + * + For very short integer exponent + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e integer exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_power(B512_60::BIG *r, B512_60::BIG *x, int e, B512_60::BIG *m, int n); +/** @brief Calculate r=x^e mod m + * + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e FF exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_pow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG *e, B512_60::BIG *m, int n); +/** @brief Test if an FF has factor in common with integer s + * + @param x FF instance to be tested + @param s the supplied integer + @param n size of FF in BIGs + @return 1 if gcd(x,s)!=1, else return 0 + */ +extern int FF_cfactor(B512_60::BIG *x, sign32 s, int n); +/** @brief Test if an FF is prime + * + Uses Miller-Rabin Method + @param x FF instance to be tested + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + @return 1 if x is (almost certainly) prime, else return 0 + */ +extern int FF_prime(B512_60::BIG *x, csprng *R, int n); +/** @brief Calculate r=x^e.y^f mod m + * + @param r FF instance, on exit = x^e.y^f mod p + @param x FF instance + @param e BIG exponent + @param y FF instance + @param f BIG exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_pow2(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *y, B512_60::BIG f, B512_60::BIG *m, int n); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff_RSA3072.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ff_RSA3072.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff_RSA3072.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ff_RSA3072.h index 82554cf..d806bc6 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff_RSA3072.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ff_RSA3072.h @@ -1,295 +1,295 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FF_RSA3072_H -#define FF_RSA3072_H - -#include "big_B384_56.h" -#include "config_ff_RSA3072.h" - -using namespace core; - -#define HFLEN_RSA3072 (FFLEN_RSA3072/2) /**< Useful for half-size RSA private key operations */ -#define P_MBITS_RSA3072 (MODBYTES_B384_56*8) -#define P_TBITS_RSA3072 (P_MBITS_RSA3072%BASEBITS_B384_56) -#define P_EXCESS_RSA3072(a) (((a[NLEN_B384_56-1])>>(P_TBITS_RSA3072))+1) -#define P_FEXCESS_RSA3072 ((chunk)1<<(BASEBITS_B384_56*NLEN_B384_56-P_MBITS_RSA3072-1)) - - -namespace RSA3072 { - -/* Finite Field Prototypes */ -/** @brief Copy one FF element of given length to another - * - @param x FF instance to be copied to, on exit = y - @param y FF instance to be copied from - @param n size of FF in BIGs - - */ -extern void FF_copy(B384_56::BIG *x, B384_56::BIG *y, int n); -/** @brief Initialize an FF element of given length from a 32-bit integer m - * - @param x FF instance to be copied to, on exit = m - @param m integer - @param n size of FF in BIGs - */ -extern void FF_init(B384_56::BIG *x, sign32 m, int n); -/** @brief Set FF element of given size to zero - * - @param x FF instance to be set to zero - @param n size of FF in BIGs - */ -extern void FF_zero(B384_56::BIG *x, int n); -/** @brief Tests for FF element equal to zero - * - @param x FF number to be tested - @param n size of FF in BIGs - @return 1 if zero, else returns 0 - */ -extern int FF_iszilch(B384_56::BIG *x, int n); -/** @brief return parity of an FF, that is the least significant bit - * - @param x FF number - @return 0 or 1 - */ -extern int FF_parity(B384_56::BIG *x); -/** @brief return least significant m bits of an FF - * - @param x FF number - @param m number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int FF_lastbits(B384_56::BIG *x, int m); -/** @brief Set FF element of given size to unity - * - @param x FF instance to be set to unity - @param n size of FF in BIGs - */ -extern void FF_one(B384_56::BIG *x, int n); -/** @brief Compares two FF numbers. Inputs must be normalised externally - * - @param x first FF number to be compared - @param y second FF number to be compared - @param n size of FF in BIGs - @return -1 is xy - */ -extern int FF_comp(B384_56::BIG *x, B384_56::BIG *y, int n); -/** @brief addition of two FFs - * - @param x FF instance, on exit = y+z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_add(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); -/** @brief subtraction of two FFs - * - @param x FF instance, on exit = y-z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_sub(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); -/** @brief increment an FF by an integer,and normalise - * - @param x FF instance, on exit = x+m - @param m an integer to be added to x - @param n size of FF in BIGs - */ -extern void FF_inc(B384_56::BIG *x, int m, int n); -/** @brief Decrement an FF by an integer,and normalise - * - @param x FF instance, on exit = x-m - @param m an integer to be subtracted from x - @param n size of FF in BIGs - */ -extern void FF_dec(B384_56::BIG *x, int m, int n); -/** @brief Normalises the components of an FF - * - @param x FF instance to be normalised - @param n size of FF in BIGs - */ -extern void FF_norm(B384_56::BIG *x, int n); -/** @brief Shift left an FF by 1 bit - * - @param x FF instance to be shifted left - @param n size of FF in BIGs - */ -extern void FF_shl(B384_56::BIG *x, int n); -/** @brief Shift right an FF by 1 bit - * - @param x FF instance to be shifted right - @param n size of FF in BIGs - */ -extern void FF_shr(B384_56::BIG *x, int n); -/** @brief Formats and outputs an FF to the console - * - @param x FF instance to be printed - @param n size of FF in BIGs - */ -extern void FF_output(B384_56::BIG *x, int n); -/** @brief Formats and outputs an FF to the console, in raw form - * - @param x FF instance to be printed - @param n size of FF in BIGs - */ -extern void FF_rawoutput(B384_56::BIG *x, int n); -/** @brief Formats and outputs an FF instance to an octet string - * - Converts an FF to big-endian base 256 form. - @param S output octet string - @param x FF instance to be converted to an octet string - @param n size of FF in BIGs - */ -extern void FF_toOctet(octet *S, B384_56::BIG *x, int n); -/** @brief Populates an FF instance from an octet string - * - Creates FF from big-endian base 256 form. - @param x FF instance to be created from an octet string - @param S input octet string - @param n size of FF in BIGs - */ -extern void FF_fromOctet(B384_56::BIG *x, octet *S, int n); -/** @brief Multiplication of two FFs - * - Uses Karatsuba method internally - @param x FF instance, on exit = y*z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_mul(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); -/** @brief Reduce FF mod a modulus - * - This is slow - @param x FF instance to be reduced mod m - on exit = x mod m - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_mod(B384_56::BIG *x, B384_56::BIG *m, int n); -/** @brief Square an FF - * - Uses Karatsuba method internally - @param x FF instance, on exit = y^2 - @param y FF instance to be squared - @param n size of FF in BIGs - */ -extern void FF_sqr(B384_56::BIG *x, B384_56::BIG *y, int n); -/** @brief Reduces a double-length FF with respect to a given modulus - * - This is slow - @param x FF instance, on exit = y mod z - @param y FF instance, of double length 2*n - @param z FF modulus - @param n size of FF in BIGs - */ -extern void FF_dmod(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); -/** @brief Invert an FF mod a prime modulus - * - @param x FF instance, on exit = 1/y mod z - @param y FF instance - @param z FF prime modulus - @param n size of FF in BIGs - */ -extern void FF_invmodp(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); -/** @brief Create an FF from a random number generator - * - @param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1 - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - */ -extern void FF_random(B384_56::BIG *x, csprng *R, int n); -/** @brief Create a random FF less than a given modulus from a random number generator - * - @param x FF instance, on exit x is a random number < y - @param y FF instance, the modulus - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - */ -extern void FF_randomnum(B384_56::BIG *x, B384_56::BIG *y, csprng *R, int n); -/** @brief Calculate r=x^e mod m, side channel resistant - * - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e FF exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_skpow(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG * e, B384_56::BIG *m, int n); -/** @brief Calculate r=x^e mod m, side channel resistant - * - For short BIG exponent - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e BIG exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_skspow(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG e, B384_56::BIG *m, int n); -/** @brief Calculate r=x^e mod m - * - For very short integer exponent - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e integer exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_power(B384_56::BIG *r, B384_56::BIG *x, int e, B384_56::BIG *m, int n); -/** @brief Calculate r=x^e mod m - * - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e FF exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_pow(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG *e, B384_56::BIG *m, int n); -/** @brief Test if an FF has factor in common with integer s - * - @param x FF instance to be tested - @param s the supplied integer - @param n size of FF in BIGs - @return 1 if gcd(x,s)!=1, else return 0 - */ -extern int FF_cfactor(B384_56::BIG *x, sign32 s, int n); -/** @brief Test if an FF is prime - * - Uses Miller-Rabin Method - @param x FF instance to be tested - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - @return 1 if x is (almost certainly) prime, else return 0 - */ -extern int FF_prime(B384_56::BIG *x, csprng *R, int n); -/** @brief Calculate r=x^e.y^f mod m - * - @param r FF instance, on exit = x^e.y^f mod p - @param x FF instance - @param e BIG exponent - @param y FF instance - @param f BIG exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_pow2(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG e, B384_56::BIG *y, B384_56::BIG f, B384_56::BIG *m, int n); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FF_RSA3072_H +#define FF_RSA3072_H + +#include "big_B384_56.h" +#include "config_ff_RSA3072.h" + +using namespace core; + +#define HFLEN_RSA3072 (FFLEN_RSA3072/2) /**< Useful for half-size RSA private key operations */ +#define P_MBITS_RSA3072 (MODBYTES_B384_56*8) +#define P_TBITS_RSA3072 (P_MBITS_RSA3072%BASEBITS_B384_56) +#define P_EXCESS_RSA3072(a) (((a[NLEN_B384_56-1])>>(P_TBITS_RSA3072))+1) +#define P_FEXCESS_RSA3072 ((chunk)1<<(BASEBITS_B384_56*NLEN_B384_56-P_MBITS_RSA3072-1)) + + +namespace RSA3072 { + +/* Finite Field Prototypes */ +/** @brief Copy one FF element of given length to another + * + @param x FF instance to be copied to, on exit = y + @param y FF instance to be copied from + @param n size of FF in BIGs + + */ +extern void FF_copy(B384_56::BIG *x, B384_56::BIG *y, int n); +/** @brief Initialize an FF element of given length from a 32-bit integer m + * + @param x FF instance to be copied to, on exit = m + @param m integer + @param n size of FF in BIGs + */ +extern void FF_init(B384_56::BIG *x, sign32 m, int n); +/** @brief Set FF element of given size to zero + * + @param x FF instance to be set to zero + @param n size of FF in BIGs + */ +extern void FF_zero(B384_56::BIG *x, int n); +/** @brief Tests for FF element equal to zero + * + @param x FF number to be tested + @param n size of FF in BIGs + @return 1 if zero, else returns 0 + */ +extern int FF_iszilch(B384_56::BIG *x, int n); +/** @brief return parity of an FF, that is the least significant bit + * + @param x FF number + @return 0 or 1 + */ +extern int FF_parity(B384_56::BIG *x); +/** @brief return least significant m bits of an FF + * + @param x FF number + @param m number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int FF_lastbits(B384_56::BIG *x, int m); +/** @brief Set FF element of given size to unity + * + @param x FF instance to be set to unity + @param n size of FF in BIGs + */ +extern void FF_one(B384_56::BIG *x, int n); +/** @brief Compares two FF numbers. Inputs must be normalised externally + * + @param x first FF number to be compared + @param y second FF number to be compared + @param n size of FF in BIGs + @return -1 is xy + */ +extern int FF_comp(B384_56::BIG *x, B384_56::BIG *y, int n); +/** @brief addition of two FFs + * + @param x FF instance, on exit = y+z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_add(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); +/** @brief subtraction of two FFs + * + @param x FF instance, on exit = y-z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_sub(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); +/** @brief increment an FF by an integer,and normalise + * + @param x FF instance, on exit = x+m + @param m an integer to be added to x + @param n size of FF in BIGs + */ +extern void FF_inc(B384_56::BIG *x, int m, int n); +/** @brief Decrement an FF by an integer,and normalise + * + @param x FF instance, on exit = x-m + @param m an integer to be subtracted from x + @param n size of FF in BIGs + */ +extern void FF_dec(B384_56::BIG *x, int m, int n); +/** @brief Normalises the components of an FF + * + @param x FF instance to be normalised + @param n size of FF in BIGs + */ +extern void FF_norm(B384_56::BIG *x, int n); +/** @brief Shift left an FF by 1 bit + * + @param x FF instance to be shifted left + @param n size of FF in BIGs + */ +extern void FF_shl(B384_56::BIG *x, int n); +/** @brief Shift right an FF by 1 bit + * + @param x FF instance to be shifted right + @param n size of FF in BIGs + */ +extern void FF_shr(B384_56::BIG *x, int n); +/** @brief Formats and outputs an FF to the console + * + @param x FF instance to be printed + @param n size of FF in BIGs + */ +extern void FF_output(B384_56::BIG *x, int n); +/** @brief Formats and outputs an FF to the console, in raw form + * + @param x FF instance to be printed + @param n size of FF in BIGs + */ +extern void FF_rawoutput(B384_56::BIG *x, int n); +/** @brief Formats and outputs an FF instance to an octet string + * + Converts an FF to big-endian base 256 form. + @param S output octet string + @param x FF instance to be converted to an octet string + @param n size of FF in BIGs + */ +extern void FF_toOctet(octet *S, B384_56::BIG *x, int n); +/** @brief Populates an FF instance from an octet string + * + Creates FF from big-endian base 256 form. + @param x FF instance to be created from an octet string + @param S input octet string + @param n size of FF in BIGs + */ +extern void FF_fromOctet(B384_56::BIG *x, octet *S, int n); +/** @brief Multiplication of two FFs + * + Uses Karatsuba method internally + @param x FF instance, on exit = y*z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_mul(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); +/** @brief Reduce FF mod a modulus + * + This is slow + @param x FF instance to be reduced mod m - on exit = x mod m + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_mod(B384_56::BIG *x, B384_56::BIG *m, int n); +/** @brief Square an FF + * + Uses Karatsuba method internally + @param x FF instance, on exit = y^2 + @param y FF instance to be squared + @param n size of FF in BIGs + */ +extern void FF_sqr(B384_56::BIG *x, B384_56::BIG *y, int n); +/** @brief Reduces a double-length FF with respect to a given modulus + * + This is slow + @param x FF instance, on exit = y mod z + @param y FF instance, of double length 2*n + @param z FF modulus + @param n size of FF in BIGs + */ +extern void FF_dmod(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); +/** @brief Invert an FF mod a prime modulus + * + @param x FF instance, on exit = 1/y mod z + @param y FF instance + @param z FF prime modulus + @param n size of FF in BIGs + */ +extern void FF_invmodp(B384_56::BIG *x, B384_56::BIG *y, B384_56::BIG *z, int n); +/** @brief Create an FF from a random number generator + * + @param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1 + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + */ +extern void FF_random(B384_56::BIG *x, csprng *R, int n); +/** @brief Create a random FF less than a given modulus from a random number generator + * + @param x FF instance, on exit x is a random number < y + @param y FF instance, the modulus + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + */ +extern void FF_randomnum(B384_56::BIG *x, B384_56::BIG *y, csprng *R, int n); +/** @brief Calculate r=x^e mod m, side channel resistant + * + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e FF exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_skpow(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG * e, B384_56::BIG *m, int n); +/** @brief Calculate r=x^e mod m, side channel resistant + * + For short BIG exponent + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e BIG exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_skspow(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG e, B384_56::BIG *m, int n); +/** @brief Calculate r=x^e mod m + * + For very short integer exponent + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e integer exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_power(B384_56::BIG *r, B384_56::BIG *x, int e, B384_56::BIG *m, int n); +/** @brief Calculate r=x^e mod m + * + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e FF exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_pow(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG *e, B384_56::BIG *m, int n); +/** @brief Test if an FF has factor in common with integer s + * + @param x FF instance to be tested + @param s the supplied integer + @param n size of FF in BIGs + @return 1 if gcd(x,s)!=1, else return 0 + */ +extern int FF_cfactor(B384_56::BIG *x, sign32 s, int n); +/** @brief Test if an FF is prime + * + Uses Miller-Rabin Method + @param x FF instance to be tested + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + @return 1 if x is (almost certainly) prime, else return 0 + */ +extern int FF_prime(B384_56::BIG *x, csprng *R, int n); +/** @brief Calculate r=x^e.y^f mod m + * + @param r FF instance, on exit = x^e.y^f mod p + @param x FF instance + @param e BIG exponent + @param y FF instance + @param f BIG exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_pow2(B384_56::BIG *r, B384_56::BIG *x, B384_56::BIG e, B384_56::BIG *y, B384_56::BIG f, B384_56::BIG *m, int n); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff_RSA4096.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ff_RSA4096.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff_RSA4096.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ff_RSA4096.h index 91b37ae..4c49058 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/ff_RSA4096.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/ff_RSA4096.h @@ -1,295 +1,295 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FF_RSA4096_H -#define FF_RSA4096_H - -#include "big_B512_60.h" -#include "config_ff_RSA4096.h" - -using namespace core; - -#define HFLEN_RSA4096 (FFLEN_RSA4096/2) /**< Useful for half-size RSA private key operations */ -#define P_MBITS_RSA4096 (MODBYTES_B512_60*8) -#define P_TBITS_RSA4096 (P_MBITS_RSA4096%BASEBITS_B512_60) -#define P_EXCESS_RSA4096(a) (((a[NLEN_B512_60-1])>>(P_TBITS_RSA4096))+1) -#define P_FEXCESS_RSA4096 ((chunk)1<<(BASEBITS_B512_60*NLEN_B512_60-P_MBITS_RSA4096-1)) - - -namespace RSA4096 { - -/* Finite Field Prototypes */ -/** @brief Copy one FF element of given length to another - * - @param x FF instance to be copied to, on exit = y - @param y FF instance to be copied from - @param n size of FF in BIGs - - */ -extern void FF_copy(B512_60::BIG *x, B512_60::BIG *y, int n); -/** @brief Initialize an FF element of given length from a 32-bit integer m - * - @param x FF instance to be copied to, on exit = m - @param m integer - @param n size of FF in BIGs - */ -extern void FF_init(B512_60::BIG *x, sign32 m, int n); -/** @brief Set FF element of given size to zero - * - @param x FF instance to be set to zero - @param n size of FF in BIGs - */ -extern void FF_zero(B512_60::BIG *x, int n); -/** @brief Tests for FF element equal to zero - * - @param x FF number to be tested - @param n size of FF in BIGs - @return 1 if zero, else returns 0 - */ -extern int FF_iszilch(B512_60::BIG *x, int n); -/** @brief return parity of an FF, that is the least significant bit - * - @param x FF number - @return 0 or 1 - */ -extern int FF_parity(B512_60::BIG *x); -/** @brief return least significant m bits of an FF - * - @param x FF number - @param m number of bits to return. Assumed to be less than BASEBITS. - @return least significant n bits as an integer - */ -extern int FF_lastbits(B512_60::BIG *x, int m); -/** @brief Set FF element of given size to unity - * - @param x FF instance to be set to unity - @param n size of FF in BIGs - */ -extern void FF_one(B512_60::BIG *x, int n); -/** @brief Compares two FF numbers. Inputs must be normalised externally - * - @param x first FF number to be compared - @param y second FF number to be compared - @param n size of FF in BIGs - @return -1 is xy - */ -extern int FF_comp(B512_60::BIG *x, B512_60::BIG *y, int n); -/** @brief addition of two FFs - * - @param x FF instance, on exit = y+z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_add(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief subtraction of two FFs - * - @param x FF instance, on exit = y-z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_sub(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief increment an FF by an integer,and normalise - * - @param x FF instance, on exit = x+m - @param m an integer to be added to x - @param n size of FF in BIGs - */ -extern void FF_inc(B512_60::BIG *x, int m, int n); -/** @brief Decrement an FF by an integer,and normalise - * - @param x FF instance, on exit = x-m - @param m an integer to be subtracted from x - @param n size of FF in BIGs - */ -extern void FF_dec(B512_60::BIG *x, int m, int n); -/** @brief Normalises the components of an FF - * - @param x FF instance to be normalised - @param n size of FF in BIGs - */ -extern void FF_norm(B512_60::BIG *x, int n); -/** @brief Shift left an FF by 1 bit - * - @param x FF instance to be shifted left - @param n size of FF in BIGs - */ -extern void FF_shl(B512_60::BIG *x, int n); -/** @brief Shift right an FF by 1 bit - * - @param x FF instance to be shifted right - @param n size of FF in BIGs - */ -extern void FF_shr(B512_60::BIG *x, int n); -/** @brief Formats and outputs an FF to the console - * - @param x FF instance to be printed - @param n size of FF in BIGs - */ -extern void FF_output(B512_60::BIG *x, int n); -/** @brief Formats and outputs an FF to the console, in raw form - * - @param x FF instance to be printed - @param n size of FF in BIGs - */ -extern void FF_rawoutput(B512_60::BIG *x, int n); -/** @brief Formats and outputs an FF instance to an octet string - * - Converts an FF to big-endian base 256 form. - @param S output octet string - @param x FF instance to be converted to an octet string - @param n size of FF in BIGs - */ -extern void FF_toOctet(octet *S, B512_60::BIG *x, int n); -/** @brief Populates an FF instance from an octet string - * - Creates FF from big-endian base 256 form. - @param x FF instance to be created from an octet string - @param S input octet string - @param n size of FF in BIGs - */ -extern void FF_fromOctet(B512_60::BIG *x, octet *S, int n); -/** @brief Multiplication of two FFs - * - Uses Karatsuba method internally - @param x FF instance, on exit = y*z - @param y FF instance - @param z FF instance - @param n size of FF in BIGs - */ -extern void FF_mul(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief Reduce FF mod a modulus - * - This is slow - @param x FF instance to be reduced mod m - on exit = x mod m - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_mod(B512_60::BIG *x, B512_60::BIG *m, int n); -/** @brief Square an FF - * - Uses Karatsuba method internally - @param x FF instance, on exit = y^2 - @param y FF instance to be squared - @param n size of FF in BIGs - */ -extern void FF_sqr(B512_60::BIG *x, B512_60::BIG *y, int n); -/** @brief Reduces a double-length FF with respect to a given modulus - * - This is slow - @param x FF instance, on exit = y mod z - @param y FF instance, of double length 2*n - @param z FF modulus - @param n size of FF in BIGs - */ -extern void FF_dmod(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief Invert an FF mod a prime modulus - * - @param x FF instance, on exit = 1/y mod z - @param y FF instance - @param z FF prime modulus - @param n size of FF in BIGs - */ -extern void FF_invmodp(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); -/** @brief Create an FF from a random number generator - * - @param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1 - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - */ -extern void FF_random(B512_60::BIG *x, csprng *R, int n); -/** @brief Create a random FF less than a given modulus from a random number generator - * - @param x FF instance, on exit x is a random number < y - @param y FF instance, the modulus - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - */ -extern void FF_randomnum(B512_60::BIG *x, B512_60::BIG *y, csprng *R, int n); -/** @brief Calculate r=x^e mod m, side channel resistant - * - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e FF exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_skpow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG * e, B512_60::BIG *m, int n); -/** @brief Calculate r=x^e mod m, side channel resistant - * - For short BIG exponent - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e BIG exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_skspow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *m, int n); -/** @brief Calculate r=x^e mod m - * - For very short integer exponent - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e integer exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_power(B512_60::BIG *r, B512_60::BIG *x, int e, B512_60::BIG *m, int n); -/** @brief Calculate r=x^e mod m - * - @param r FF instance, on exit = x^e mod p - @param x FF instance - @param e FF exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_pow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG *e, B512_60::BIG *m, int n); -/** @brief Test if an FF has factor in common with integer s - * - @param x FF instance to be tested - @param s the supplied integer - @param n size of FF in BIGs - @return 1 if gcd(x,s)!=1, else return 0 - */ -extern int FF_cfactor(B512_60::BIG *x, sign32 s, int n); -/** @brief Test if an FF is prime - * - Uses Miller-Rabin Method - @param x FF instance to be tested - @param R an instance of a Cryptographically Secure Random Number Generator - @param n size of FF in BIGs - @return 1 if x is (almost certainly) prime, else return 0 - */ -extern int FF_prime(B512_60::BIG *x, csprng *R, int n); -/** @brief Calculate r=x^e.y^f mod m - * - @param r FF instance, on exit = x^e.y^f mod p - @param x FF instance - @param e BIG exponent - @param y FF instance - @param f BIG exponent - @param m FF modulus - @param n size of FF in BIGs - */ -extern void FF_pow2(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *y, B512_60::BIG f, B512_60::BIG *m, int n); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FF_RSA4096_H +#define FF_RSA4096_H + +#include "big_B512_60.h" +#include "config_ff_RSA4096.h" + +using namespace core; + +#define HFLEN_RSA4096 (FFLEN_RSA4096/2) /**< Useful for half-size RSA private key operations */ +#define P_MBITS_RSA4096 (MODBYTES_B512_60*8) +#define P_TBITS_RSA4096 (P_MBITS_RSA4096%BASEBITS_B512_60) +#define P_EXCESS_RSA4096(a) (((a[NLEN_B512_60-1])>>(P_TBITS_RSA4096))+1) +#define P_FEXCESS_RSA4096 ((chunk)1<<(BASEBITS_B512_60*NLEN_B512_60-P_MBITS_RSA4096-1)) + + +namespace RSA4096 { + +/* Finite Field Prototypes */ +/** @brief Copy one FF element of given length to another + * + @param x FF instance to be copied to, on exit = y + @param y FF instance to be copied from + @param n size of FF in BIGs + + */ +extern void FF_copy(B512_60::BIG *x, B512_60::BIG *y, int n); +/** @brief Initialize an FF element of given length from a 32-bit integer m + * + @param x FF instance to be copied to, on exit = m + @param m integer + @param n size of FF in BIGs + */ +extern void FF_init(B512_60::BIG *x, sign32 m, int n); +/** @brief Set FF element of given size to zero + * + @param x FF instance to be set to zero + @param n size of FF in BIGs + */ +extern void FF_zero(B512_60::BIG *x, int n); +/** @brief Tests for FF element equal to zero + * + @param x FF number to be tested + @param n size of FF in BIGs + @return 1 if zero, else returns 0 + */ +extern int FF_iszilch(B512_60::BIG *x, int n); +/** @brief return parity of an FF, that is the least significant bit + * + @param x FF number + @return 0 or 1 + */ +extern int FF_parity(B512_60::BIG *x); +/** @brief return least significant m bits of an FF + * + @param x FF number + @param m number of bits to return. Assumed to be less than BASEBITS. + @return least significant n bits as an integer + */ +extern int FF_lastbits(B512_60::BIG *x, int m); +/** @brief Set FF element of given size to unity + * + @param x FF instance to be set to unity + @param n size of FF in BIGs + */ +extern void FF_one(B512_60::BIG *x, int n); +/** @brief Compares two FF numbers. Inputs must be normalised externally + * + @param x first FF number to be compared + @param y second FF number to be compared + @param n size of FF in BIGs + @return -1 is xy + */ +extern int FF_comp(B512_60::BIG *x, B512_60::BIG *y, int n); +/** @brief addition of two FFs + * + @param x FF instance, on exit = y+z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_add(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief subtraction of two FFs + * + @param x FF instance, on exit = y-z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_sub(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief increment an FF by an integer,and normalise + * + @param x FF instance, on exit = x+m + @param m an integer to be added to x + @param n size of FF in BIGs + */ +extern void FF_inc(B512_60::BIG *x, int m, int n); +/** @brief Decrement an FF by an integer,and normalise + * + @param x FF instance, on exit = x-m + @param m an integer to be subtracted from x + @param n size of FF in BIGs + */ +extern void FF_dec(B512_60::BIG *x, int m, int n); +/** @brief Normalises the components of an FF + * + @param x FF instance to be normalised + @param n size of FF in BIGs + */ +extern void FF_norm(B512_60::BIG *x, int n); +/** @brief Shift left an FF by 1 bit + * + @param x FF instance to be shifted left + @param n size of FF in BIGs + */ +extern void FF_shl(B512_60::BIG *x, int n); +/** @brief Shift right an FF by 1 bit + * + @param x FF instance to be shifted right + @param n size of FF in BIGs + */ +extern void FF_shr(B512_60::BIG *x, int n); +/** @brief Formats and outputs an FF to the console + * + @param x FF instance to be printed + @param n size of FF in BIGs + */ +extern void FF_output(B512_60::BIG *x, int n); +/** @brief Formats and outputs an FF to the console, in raw form + * + @param x FF instance to be printed + @param n size of FF in BIGs + */ +extern void FF_rawoutput(B512_60::BIG *x, int n); +/** @brief Formats and outputs an FF instance to an octet string + * + Converts an FF to big-endian base 256 form. + @param S output octet string + @param x FF instance to be converted to an octet string + @param n size of FF in BIGs + */ +extern void FF_toOctet(octet *S, B512_60::BIG *x, int n); +/** @brief Populates an FF instance from an octet string + * + Creates FF from big-endian base 256 form. + @param x FF instance to be created from an octet string + @param S input octet string + @param n size of FF in BIGs + */ +extern void FF_fromOctet(B512_60::BIG *x, octet *S, int n); +/** @brief Multiplication of two FFs + * + Uses Karatsuba method internally + @param x FF instance, on exit = y*z + @param y FF instance + @param z FF instance + @param n size of FF in BIGs + */ +extern void FF_mul(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief Reduce FF mod a modulus + * + This is slow + @param x FF instance to be reduced mod m - on exit = x mod m + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_mod(B512_60::BIG *x, B512_60::BIG *m, int n); +/** @brief Square an FF + * + Uses Karatsuba method internally + @param x FF instance, on exit = y^2 + @param y FF instance to be squared + @param n size of FF in BIGs + */ +extern void FF_sqr(B512_60::BIG *x, B512_60::BIG *y, int n); +/** @brief Reduces a double-length FF with respect to a given modulus + * + This is slow + @param x FF instance, on exit = y mod z + @param y FF instance, of double length 2*n + @param z FF modulus + @param n size of FF in BIGs + */ +extern void FF_dmod(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief Invert an FF mod a prime modulus + * + @param x FF instance, on exit = 1/y mod z + @param y FF instance + @param z FF prime modulus + @param n size of FF in BIGs + */ +extern void FF_invmodp(B512_60::BIG *x, B512_60::BIG *y, B512_60::BIG *z, int n); +/** @brief Create an FF from a random number generator + * + @param x FF instance, on exit x is a random number of length n BIGs with most significant bit a 1 + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + */ +extern void FF_random(B512_60::BIG *x, csprng *R, int n); +/** @brief Create a random FF less than a given modulus from a random number generator + * + @param x FF instance, on exit x is a random number < y + @param y FF instance, the modulus + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + */ +extern void FF_randomnum(B512_60::BIG *x, B512_60::BIG *y, csprng *R, int n); +/** @brief Calculate r=x^e mod m, side channel resistant + * + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e FF exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_skpow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG * e, B512_60::BIG *m, int n); +/** @brief Calculate r=x^e mod m, side channel resistant + * + For short BIG exponent + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e BIG exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_skspow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *m, int n); +/** @brief Calculate r=x^e mod m + * + For very short integer exponent + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e integer exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_power(B512_60::BIG *r, B512_60::BIG *x, int e, B512_60::BIG *m, int n); +/** @brief Calculate r=x^e mod m + * + @param r FF instance, on exit = x^e mod p + @param x FF instance + @param e FF exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_pow(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG *e, B512_60::BIG *m, int n); +/** @brief Test if an FF has factor in common with integer s + * + @param x FF instance to be tested + @param s the supplied integer + @param n size of FF in BIGs + @return 1 if gcd(x,s)!=1, else return 0 + */ +extern int FF_cfactor(B512_60::BIG *x, sign32 s, int n); +/** @brief Test if an FF is prime + * + Uses Miller-Rabin Method + @param x FF instance to be tested + @param R an instance of a Cryptographically Secure Random Number Generator + @param n size of FF in BIGs + @return 1 if x is (almost certainly) prime, else return 0 + */ +extern int FF_prime(B512_60::BIG *x, csprng *R, int n); +/** @brief Calculate r=x^e.y^f mod m + * + @param r FF instance, on exit = x^e.y^f mod p + @param x FF instance + @param e BIG exponent + @param y FF instance + @param f BIG exponent + @param m FF modulus + @param n size of FF in BIGs + */ +extern void FF_pow2(B512_60::BIG *r, B512_60::BIG *x, B512_60::BIG e, B512_60::BIG *y, B512_60::BIG f, B512_60::BIG *m, int n); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp12.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp12.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12381.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12381.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12381.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12381.h index 9e5135a..36bd83d 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12381.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12381.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BLS12381_H -#define FP12_BLS12381_H - -#include "fp4_BLS12381.h" - -using namespace core; - -namespace BLS12381 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B384_58::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B384_58::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B384_58::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B384_58::BIG e, B384_58::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B384_58::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BLS12381_H +#define FP12_BLS12381_H + +#include "fp4_BLS12381.h" + +using namespace core; + +namespace BLS12381 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B384_58::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B384_58::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B384_58::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B384_58::BIG e, B384_58::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B384_58::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12383.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12383.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12383.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12383.h index 5fd942b..be0a1d6 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12383.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12383.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BLS12383_H -#define FP12_BLS12383_H - -#include "fp4_BLS12383.h" - -using namespace core; - -namespace BLS12383 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B384_58::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B384_58::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B384_58::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B384_58::BIG e, B384_58::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B384_58::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BLS12383_H +#define FP12_BLS12383_H + +#include "fp4_BLS12383.h" + +using namespace core; + +namespace BLS12383 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B384_58::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B384_58::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B384_58::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B384_58::BIG e, B384_58::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B384_58::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12443.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12443.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12443.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12443.h index d2b98bd..a441462 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12443.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12443.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BLS12443_H -#define FP12_BLS12443_H - -#include "fp4_BLS12443.h" - -using namespace core; - -namespace BLS12443 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B448_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B448_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B448_60::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B448_60::BIG e, B448_60::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B448_60::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BLS12443_H +#define FP12_BLS12443_H + +#include "fp4_BLS12443.h" + +using namespace core; + +namespace BLS12443 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B448_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B448_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B448_60::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B448_60::BIG e, B448_60::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B448_60::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12461.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12461.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12461.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12461.h index 7717d3f..76901af 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BLS12461.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BLS12461.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BLS12461_H -#define FP12_BLS12461_H - -#include "fp4_BLS12461.h" - -using namespace core; - -namespace BLS12461 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B464_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B464_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B464_60::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B464_60::BIG e, B464_60::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B464_60::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BLS12461_H +#define FP12_BLS12461_H + +#include "fp4_BLS12461.h" + +using namespace core; + +namespace BLS12461 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B464_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B464_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B464_60::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B464_60::BIG e, B464_60::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B464_60::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN158.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN158.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN158.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN158.h index aa89990..1a68a7a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN158.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN158.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BN158_H -#define FP12_BN158_H - -#include "fp4_BN158.h" - -using namespace core; - -namespace BN158 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B160_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B160_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B160_56::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B160_56::BIG e, B160_56::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B160_56::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BN158_H +#define FP12_BN158_H + +#include "fp4_BN158.h" + +using namespace core; + +namespace BN158 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B160_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B160_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B160_56::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B160_56::BIG e, B160_56::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B160_56::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN254.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN254.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN254.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN254.h index 15a03d8..9d34371 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN254.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN254.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BN254_H -#define FP12_BN254_H - -#include "fp4_BN254.h" - -using namespace core; - -namespace BN254 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B256_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B256_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B256_56::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B256_56::BIG e, B256_56::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B256_56::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BN254_H +#define FP12_BN254_H + +#include "fp4_BN254.h" + +using namespace core; + +namespace BN254 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B256_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B256_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B256_56::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B256_56::BIG e, B256_56::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B256_56::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN254CX.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN254CX.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN254CX.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN254CX.h index f795f5b..bcdb4b8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN254CX.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN254CX.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BN254CX_H -#define FP12_BN254CX_H - -#include "fp4_BN254CX.h" - -using namespace core; - -namespace BN254CX { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B256_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B256_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B256_56::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B256_56::BIG e, B256_56::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B256_56::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BN254CX_H +#define FP12_BN254CX_H + +#include "fp4_BN254CX.h" + +using namespace core; + +namespace BN254CX { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B256_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B256_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B256_56::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B256_56::BIG e, B256_56::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B256_56::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN462.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN462.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN462.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN462.h index 4130fc6..2fcd719 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_BN462.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_BN462.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_BN462_H -#define FP12_BN462_H - -#include "fp4_BN462.h" - -using namespace core; - -namespace BN462 { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B464_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B464_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B464_60::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B464_60::BIG e, B464_60::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B464_60::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_BN462_H +#define FP12_BN462_H + +#include "fp4_BN462.h" + +using namespace core; + +namespace BN462 { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B464_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B464_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B464_60::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B464_60::BIG e, B464_60::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B464_60::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_FP256BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_FP256BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_FP256BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_FP256BN.h index 621f981..7fb19c8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_FP256BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_FP256BN.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_FP256BN_H -#define FP12_FP256BN_H - -#include "fp4_FP256BN.h" - -using namespace core; - -namespace FP256BN { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B256_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B256_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B256_56::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B256_56::BIG e, B256_56::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B256_56::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_FP256BN_H +#define FP12_FP256BN_H + +#include "fp4_FP256BN.h" + +using namespace core; + +namespace FP256BN { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B256_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B256_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B256_56::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B256_56::BIG e, B256_56::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B256_56::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_FP512BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_FP512BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_FP512BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_FP512BN.h index 30c0522..2fc1921 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp12_FP512BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp12_FP512BN.h @@ -1,230 +1,230 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP12_FP512BN_H -#define FP12_FP512BN_H - -#include "fp4_FP512BN.h" - -using namespace core; - -namespace FP512BN { -/** - @brief FP12 Structure - towered over three FP4 -*/ - -typedef struct -{ - FP4 a; /**< first part of FP12 */ - FP4 b; /**< second part of FP12 */ - FP4 c; /**< third part of FP12 */ - int type; -} FP12; - -extern const B512_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B512_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP12 prototypes */ -/** @brief Tests for FP12 equal to zero - * - @param x FP12 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP12_iszilch(FP12 *x); -/** @brief Tests for FP12 equal to unity - * - @param x FP12 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP12_isunity(FP12 *x); -/** @brief Copy FP12 to another FP12 - * - @param x FP12 instance, on exit = y - @param y FP12 instance to be copied - */ -extern void FP12_copy(FP12 *x, FP12 *y); -/** @brief Set FP12 to unity - * - @param x FP12 instance to be set to one - */ -extern void FP12_one(FP12 *x); - -/** @brief Set FP12 to zero - * - @param x FP12 instance to be set to zero - */ -extern void FP12_zero(FP12 *x); - -/** @brief Tests for equality of two FP12s - * - @param x FP12 instance to be compared - @param y FP12 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP12_equals(FP12 *x, FP12 *y); -/** @brief Conjugation of FP12 - * - If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP12 instance, on exit = conj(y) - @param y FP12 instance - */ -extern void FP12_conj(FP12 *x, FP12 *y); -/** @brief Initialise FP12 from single FP4 - * - Sets first FP4 component of an FP12, other components set to zero - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP4 - */ -extern void FP12_from_FP4(FP12 *x, FP4 *a); -/** @brief Initialise FP12 from three FP4s - * - @param x FP12 instance to be initialised - @param a FP4 to form first part of FP12 - @param b FP4 to form second part of FP12 - @param c FP4 to form third part of FP12 - */ -extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); -/** @brief Fast Squaring of an FP12 in "unitary" form - * - @param x FP12 instance, on exit = y^2 - @param y FP4 instance, must be unitary - */ -extern void FP12_usqr(FP12 *x, FP12 *y); -/** @brief Squaring an FP12 - * - @param x FP12 instance, on exit = y^2 - @param y FP12 instance - */ -extern void FP12_sqr(FP12 *x, FP12 *y); -/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_smul(FP12 *x, FP12 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, of special form - */ -extern void FP12_ssmul(FP12 *x, FP12 *y); - - -/** @brief Full unconditional Multiplication of two FP12s - * - @param x FP12 instance, on exit = x*y - @param y FP12 instance, the multiplier - */ -extern void FP12_mul(FP12 *x, FP12 *y); - -/** @brief Inverting an FP12 - * - @param x FP12 instance, on exit = 1/y - @param y FP12 instance - @param t D_TYPE or M_TYPE twist - */ -extern void FP12_inv(FP12 *x, FP12 *y); -/** @brief Raises an FP12 to the power of a BIG - * - @param r FP12 instance, on exit = y^b - @param x FP12 instance - @param b BIG number - */ -extern void FP12_pow(FP12 *r, FP12 *x, B512_60::BIG b); -/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant - * - @param x FP12 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP12_pinpow(FP12 *x, int i, int b); - -/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 - * - @param c FP4 instance, on exit = x^(e mod r) as FP4 - @param x FP12 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP12_compow(FP4 *c, FP12 *x, B512_60::BIG e, B512_60::BIG r); - -/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant - * - @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] - @param x FP12 array with 4 FP12s - @param b BIG array of 4 exponents - */ -extern void FP12_pow4(FP12 *r, FP12 *x, B512_60::BIG *b); -/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius - * - @param x FP12 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP12_frob(FP12 *x, FP2 *f); -/** @brief Reduces all components of possibly unreduced FP12 mod Modulus - * - @param x FP12 instance, on exit reduced mod Modulus - */ -extern void FP12_reduce(FP12 *x); -/** @brief Normalises the components of an FP12 - * - @param x FP12 instance to be normalised - */ -extern void FP12_norm(FP12 *x); -/** @brief Formats and outputs an FP12 to the console - * - @param x FP12 instance to be printed - */ -extern void FP12_output(FP12 *x); -/** @brief Formats and outputs an FP12 instance to an octet string - * - Serializes the components of an FP12 to big-endian base 256 form. - @param S output octet string - @param x FP12 instance to be converted to an octet string - */ -extern void FP12_toOctet(octet *S, FP12 *x); -/** @brief Creates an FP12 instance from an octet string - * - De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. - @param x FP12 instance to be created from an octet string - @param S input octet string - - */ -extern void FP12_fromOctet(FP12 *x, octet *S); -/** @brief Calculate the trace of an FP12 - * - @param t FP4 trace of x, on exit = tr(x) - @param x FP12 instance - - */ -extern void FP12_trace(FP4 *t, FP12 *x); - -/** @brief Conditional copy of FP12 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP12 instance, set to y if s!=0 - @param y another FP12 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP12_cmove(FP12 *x, FP12 *y, int s); - - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP12_FP512BN_H +#define FP12_FP512BN_H + +#include "fp4_FP512BN.h" + +using namespace core; + +namespace FP512BN { +/** + @brief FP12 Structure - towered over three FP4 +*/ + +typedef struct +{ + FP4 a; /**< first part of FP12 */ + FP4 b; /**< second part of FP12 */ + FP4 c; /**< third part of FP12 */ + int type; +} FP12; + +extern const B512_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B512_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP12 prototypes */ +/** @brief Tests for FP12 equal to zero + * + @param x FP12 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP12_iszilch(FP12 *x); +/** @brief Tests for FP12 equal to unity + * + @param x FP12 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP12_isunity(FP12 *x); +/** @brief Copy FP12 to another FP12 + * + @param x FP12 instance, on exit = y + @param y FP12 instance to be copied + */ +extern void FP12_copy(FP12 *x, FP12 *y); +/** @brief Set FP12 to unity + * + @param x FP12 instance to be set to one + */ +extern void FP12_one(FP12 *x); + +/** @brief Set FP12 to zero + * + @param x FP12 instance to be set to zero + */ +extern void FP12_zero(FP12 *x); + +/** @brief Tests for equality of two FP12s + * + @param x FP12 instance to be compared + @param y FP12 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP12_equals(FP12 *x, FP12 *y); +/** @brief Conjugation of FP12 + * + If y=(a,b,c) (where a,b,c are its three FP4 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP12 instance, on exit = conj(y) + @param y FP12 instance + */ +extern void FP12_conj(FP12 *x, FP12 *y); +/** @brief Initialise FP12 from single FP4 + * + Sets first FP4 component of an FP12, other components set to zero + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP4 + */ +extern void FP12_from_FP4(FP12 *x, FP4 *a); +/** @brief Initialise FP12 from three FP4s + * + @param x FP12 instance to be initialised + @param a FP4 to form first part of FP12 + @param b FP4 to form second part of FP12 + @param c FP4 to form third part of FP12 + */ +extern void FP12_from_FP4s(FP12 *x, FP4 *a, FP4* b, FP4 *c); +/** @brief Fast Squaring of an FP12 in "unitary" form + * + @param x FP12 instance, on exit = y^2 + @param y FP4 instance, must be unitary + */ +extern void FP12_usqr(FP12 *x, FP12 *y); +/** @brief Squaring an FP12 + * + @param x FP12 instance, on exit = y^2 + @param y FP12 instance + */ +extern void FP12_sqr(FP12 *x, FP12 *y); +/** @brief Fast multiplication of two sparse FP12s that arises from ATE pairing line functions + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_smul(FP12 *x, FP12 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, of special form + */ +extern void FP12_ssmul(FP12 *x, FP12 *y); + + +/** @brief Full unconditional Multiplication of two FP12s + * + @param x FP12 instance, on exit = x*y + @param y FP12 instance, the multiplier + */ +extern void FP12_mul(FP12 *x, FP12 *y); + +/** @brief Inverting an FP12 + * + @param x FP12 instance, on exit = 1/y + @param y FP12 instance + @param t D_TYPE or M_TYPE twist + */ +extern void FP12_inv(FP12 *x, FP12 *y); +/** @brief Raises an FP12 to the power of a BIG + * + @param r FP12 instance, on exit = y^b + @param x FP12 instance + @param b BIG number + */ +extern void FP12_pow(FP12 *r, FP12 *x, B512_60::BIG b); +/** @brief Raises an FP12 instance x to a small integer power, side-channel resistant + * + @param x FP12 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP12_pinpow(FP12 *x, int i, int b); + +/** @brief Raises an FP12 instance x to a BIG power, compressed to FP4 + * + @param c FP4 instance, on exit = x^(e mod r) as FP4 + @param x FP12 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP12_compow(FP4 *c, FP12 *x, B512_60::BIG e, B512_60::BIG r); + +/** @brief Calculate x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3], side-channel resistant + * + @param r FP12 instance, on exit = x[0]^b[0].x[1]^b[1].x[2]^b[2].x[3]^b[3] + @param x FP12 array with 4 FP12s + @param b BIG array of 4 exponents + */ +extern void FP12_pow4(FP12 *r, FP12 *x, B512_60::BIG *b); +/** @brief Raises an FP12 to the power of the internal modulus p, using the Frobenius + * + @param x FP12 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP12_frob(FP12 *x, FP2 *f); +/** @brief Reduces all components of possibly unreduced FP12 mod Modulus + * + @param x FP12 instance, on exit reduced mod Modulus + */ +extern void FP12_reduce(FP12 *x); +/** @brief Normalises the components of an FP12 + * + @param x FP12 instance to be normalised + */ +extern void FP12_norm(FP12 *x); +/** @brief Formats and outputs an FP12 to the console + * + @param x FP12 instance to be printed + */ +extern void FP12_output(FP12 *x); +/** @brief Formats and outputs an FP12 instance to an octet string + * + Serializes the components of an FP12 to big-endian base 256 form. + @param S output octet string + @param x FP12 instance to be converted to an octet string + */ +extern void FP12_toOctet(octet *S, FP12 *x); +/** @brief Creates an FP12 instance from an octet string + * + De-serializes the components of an FP12 to create an FP12 from big-endian base 256 components. + @param x FP12 instance to be created from an octet string + @param S input octet string + + */ +extern void FP12_fromOctet(FP12 *x, octet *S); +/** @brief Calculate the trace of an FP12 + * + @param t FP4 trace of x, on exit = tr(x) + @param x FP12 instance + + */ +extern void FP12_trace(FP4 *t, FP12 *x); + +/** @brief Conditional copy of FP12 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP12 instance, set to y if s!=0 + @param y another FP12 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP12_cmove(FP12 *x, FP12 *y, int s); + + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp16.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp16.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48286.h index 36a9cb9..13fcccb 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48286.h @@ -1,308 +1,308 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP16_BLS48286_H -#define FP16_BLS48286_H - -#include "fp8_BLS48286.h" -#include "config_curve_BLS48286.h" - -using namespace core; - -namespace BLS48286 { - -/** - @brief FP16 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP8 a; /**< real part of FP16 */ - FP8 b; /**< imaginary part of FP16 */ -} FP16; - - -/* FP16 prototypes */ -/** @brief Tests for FP16 equal to zero - * - @param x FP16 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP16_iszilch(FP16 *x); -/** @brief Tests for FP16 equal to unity - * - @param x FP16 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP16_isunity(FP16 *x); -/** @brief Tests for equality of two FP16s - * - @param x FP16 instance to be compared - @param y FP16 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP16_equals(FP16 *x, FP16 *y); - -/** @brief Serialize in FP16 - * - @param b buffer for output - @param x FP16 number to be serialized - */ -extern void FP16_toBytes(char *b,FP16 *x); -/** @brief Serialize out FP16 - * - @param x FP16 number to be serialized - @param b buffer for input - */ -extern void FP16_fromBytes(FP16 *x,char *b); - -/** @brief Tests for FP16 having only a real part and no imaginary part - * - @param x FP16 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP16_isreal(FP16 *x); -/** @brief Initialise FP16 from two FP8s - * - @param x FP16 instance to be initialised - @param a FP8 to form real part of FP16 - @param b FP8 to form imaginary part of FP16 - */ -extern void FP16_from_FP8s(FP16 *x, FP8 *a, FP8 *b); -/** @brief Initialise FP16 from single FP8 - * - Imaginary part is set to zero - @param x FP16 instance to be initialised - @param a FP8 to form real part of FP16 - */ -extern void FP16_from_FP8(FP16 *x, FP8 *a); - -/** @brief Initialise FP16 from single FP8 - * - real part is set to zero - @param x FP16 instance to be initialised - @param a FP8 to form imaginary part of FP16 - */ -extern void FP16_from_FP8H(FP16 *x, FP8 *a); - - -/** @brief Copy FP16 to another FP16 - * - @param x FP16 instance, on exit = y - @param y FP16 instance to be copied - */ -extern void FP16_copy(FP16 *x, FP16 *y); -/** @brief Set FP16 to zero - * - @param x FP16 instance to be set to zero - */ -extern void FP16_zero(FP16 *x); -/** @brief Set FP16 to unity - * - @param x FP16 instance to be set to one - */ -extern void FP16_one(FP16 *x); -/** @brief Negation of FP16 - * - @param x FP16 instance, on exit = -y - @param y FP16 instance - */ -extern void FP16_neg(FP16 *x, FP16 *y); -/** @brief Conjugation of FP16 - * - If y=(a,b) on exit x=(a,-b) - @param x FP16 instance, on exit = conj(y) - @param y FP16 instance - */ -extern void FP16_conj(FP16 *x, FP16 *y); -/** @brief Negative conjugation of FP16 - * - If y=(a,b) on exit x=(-a,b) - @param x FP16 instance, on exit = -conj(y) - @param y FP16 instance - */ -extern void FP16_nconj(FP16 *x, FP16 *y); -/** @brief addition of two FP16s - * - @param x FP16 instance, on exit = y+z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_add(FP16 *x, FP16 *y, FP16 *z); -/** @brief subtraction of two FP16s - * - @param x FP16 instance, on exit = y-z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_sub(FP16 *x, FP16 *y, FP16 *z); -/** @brief Multiplication of an FP16 by an FP8 - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP4 multiplier - */ -extern void FP16_pmul(FP16 *x, FP16 *y, FP8 *a); - -/** @brief Multiplication of an FP16 by an FP2 - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP2 multiplier - */ -extern void FP16_qmul(FP16 *x, FP16 *y, FP2 *a); - - -/** @brief Multiplication of an FP16 by an FP - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP multiplier - */ -extern void FP16_tmul(FP16 *x, FP16 *y, FP *a); - - - -/** @brief Multiplication of an FP16 by a small integer - * - @param x FP16 instance, on exit = y*i - @param y FP16 instance - @param i an integer - */ -extern void FP16_imul(FP16 *x, FP16 *y, int i); -/** @brief Squaring an FP16 - * - @param x FP16 instance, on exit = y^2 - @param y FP16 instance - */ -extern void FP16_sqr(FP16 *x, FP16 *y); -/** @brief Multiplication of two FP16s - * - @param x FP16 instance, on exit = y*z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_mul(FP16 *x, FP16 *y, FP16 *z); -/** @brief Inverting an FP16 - * - @param x FP16 instance, on exit = 1/y - @param y FP16 instance - */ -extern void FP16_inv(FP16 *x, FP16 *y); -/** @brief Formats and outputs an FP16 to the console - * - @param x FP16 instance to be printed - */ -extern void FP16_output(FP16 *x); -/** @brief Formats and outputs an FP16 to the console in raw form (for debugging) - * - @param x FP16 instance to be printed - */ -extern void FP16_rawoutput(FP16 *x); -/** @brief multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP16_times_i(FP16 *x); -/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^2*x - */ -extern void FP16_times_i2(FP16 *x); - -/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^4*x - */ -extern void FP16_times_i4(FP16 *x); - - -/** @brief Normalises the components of an FP16 - * - @param x FP16 instance to be normalised - */ -extern void FP16_norm(FP16 *x); -/** @brief Reduces all components of possibly unreduced FP16 mod Modulus - * - @param x FP16 instance, on exit reduced mod Modulus - */ -extern void FP16_reduce(FP16 *x); -/** @brief Raises an FP16 to the power of a BIG - * - @param x FP16 instance, on exit = y^b - @param y FP16 instance - @param b BIG number - */ -extern void FP16_pow(FP16 *x, FP16 *y, B288_60::BIG b); -/** @brief Raises an FP16 to the power of the internal modulus p, using the Frobenius - * - @param x FP16 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP16_frob(FP16 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP16 instance, on exit = w*x-conj(x)*y+z - @param w FP16 instance - @param x FP16 instance - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP16 instance, on exit = x^2-2*conj(x) - @param x FP16 instance - */ -extern void FP16_xtr_D(FP16 *r, FP16 *x); -/** @brief Calculates FP16 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP16 instance, on exit = trace(w^b) - @param x FP16 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP16_xtr_pow(FP16 *r, FP16 *x, B288_60::BIG b); -/** @brief Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP16 instance, on exit = trace(c^a.d^b) - @param c FP16 instance, trace of an FP12 - @param d FP16 instance, trace of an FP12 - @param e FP16 instance, trace of an FP12 - @param f FP16 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP16_xtr_pow2(FP16 *r, FP16 *c, FP16 *d, FP16 *e, FP16 *f, B288_60::BIG a, B288_60::BIG b); - -/** @brief Conditional copy of FP16 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP16 instance, set to y if s!=0 - @param y another FP16 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP16_cmove(FP16 *x, FP16 *y, int s); - -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP16_BLS48286_H +#define FP16_BLS48286_H + +#include "fp8_BLS48286.h" +#include "config_curve_BLS48286.h" + +using namespace core; + +namespace BLS48286 { + +/** + @brief FP16 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP8 a; /**< real part of FP16 */ + FP8 b; /**< imaginary part of FP16 */ +} FP16; + + +/* FP16 prototypes */ +/** @brief Tests for FP16 equal to zero + * + @param x FP16 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP16_iszilch(FP16 *x); +/** @brief Tests for FP16 equal to unity + * + @param x FP16 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP16_isunity(FP16 *x); +/** @brief Tests for equality of two FP16s + * + @param x FP16 instance to be compared + @param y FP16 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP16_equals(FP16 *x, FP16 *y); + +/** @brief Serialize in FP16 + * + @param b buffer for output + @param x FP16 number to be serialized + */ +extern void FP16_toBytes(char *b,FP16 *x); +/** @brief Serialize out FP16 + * + @param x FP16 number to be serialized + @param b buffer for input + */ +extern void FP16_fromBytes(FP16 *x,char *b); + +/** @brief Tests for FP16 having only a real part and no imaginary part + * + @param x FP16 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP16_isreal(FP16 *x); +/** @brief Initialise FP16 from two FP8s + * + @param x FP16 instance to be initialised + @param a FP8 to form real part of FP16 + @param b FP8 to form imaginary part of FP16 + */ +extern void FP16_from_FP8s(FP16 *x, FP8 *a, FP8 *b); +/** @brief Initialise FP16 from single FP8 + * + Imaginary part is set to zero + @param x FP16 instance to be initialised + @param a FP8 to form real part of FP16 + */ +extern void FP16_from_FP8(FP16 *x, FP8 *a); + +/** @brief Initialise FP16 from single FP8 + * + real part is set to zero + @param x FP16 instance to be initialised + @param a FP8 to form imaginary part of FP16 + */ +extern void FP16_from_FP8H(FP16 *x, FP8 *a); + + +/** @brief Copy FP16 to another FP16 + * + @param x FP16 instance, on exit = y + @param y FP16 instance to be copied + */ +extern void FP16_copy(FP16 *x, FP16 *y); +/** @brief Set FP16 to zero + * + @param x FP16 instance to be set to zero + */ +extern void FP16_zero(FP16 *x); +/** @brief Set FP16 to unity + * + @param x FP16 instance to be set to one + */ +extern void FP16_one(FP16 *x); +/** @brief Negation of FP16 + * + @param x FP16 instance, on exit = -y + @param y FP16 instance + */ +extern void FP16_neg(FP16 *x, FP16 *y); +/** @brief Conjugation of FP16 + * + If y=(a,b) on exit x=(a,-b) + @param x FP16 instance, on exit = conj(y) + @param y FP16 instance + */ +extern void FP16_conj(FP16 *x, FP16 *y); +/** @brief Negative conjugation of FP16 + * + If y=(a,b) on exit x=(-a,b) + @param x FP16 instance, on exit = -conj(y) + @param y FP16 instance + */ +extern void FP16_nconj(FP16 *x, FP16 *y); +/** @brief addition of two FP16s + * + @param x FP16 instance, on exit = y+z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_add(FP16 *x, FP16 *y, FP16 *z); +/** @brief subtraction of two FP16s + * + @param x FP16 instance, on exit = y-z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_sub(FP16 *x, FP16 *y, FP16 *z); +/** @brief Multiplication of an FP16 by an FP8 + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP4 multiplier + */ +extern void FP16_pmul(FP16 *x, FP16 *y, FP8 *a); + +/** @brief Multiplication of an FP16 by an FP2 + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP2 multiplier + */ +extern void FP16_qmul(FP16 *x, FP16 *y, FP2 *a); + + +/** @brief Multiplication of an FP16 by an FP + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP multiplier + */ +extern void FP16_tmul(FP16 *x, FP16 *y, FP *a); + + + +/** @brief Multiplication of an FP16 by a small integer + * + @param x FP16 instance, on exit = y*i + @param y FP16 instance + @param i an integer + */ +extern void FP16_imul(FP16 *x, FP16 *y, int i); +/** @brief Squaring an FP16 + * + @param x FP16 instance, on exit = y^2 + @param y FP16 instance + */ +extern void FP16_sqr(FP16 *x, FP16 *y); +/** @brief Multiplication of two FP16s + * + @param x FP16 instance, on exit = y*z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_mul(FP16 *x, FP16 *y, FP16 *z); +/** @brief Inverting an FP16 + * + @param x FP16 instance, on exit = 1/y + @param y FP16 instance + */ +extern void FP16_inv(FP16 *x, FP16 *y); +/** @brief Formats and outputs an FP16 to the console + * + @param x FP16 instance to be printed + */ +extern void FP16_output(FP16 *x); +/** @brief Formats and outputs an FP16 to the console in raw form (for debugging) + * + @param x FP16 instance to be printed + */ +extern void FP16_rawoutput(FP16 *x); +/** @brief multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP16_times_i(FP16 *x); +/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^2*x + */ +extern void FP16_times_i2(FP16 *x); + +/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^4*x + */ +extern void FP16_times_i4(FP16 *x); + + +/** @brief Normalises the components of an FP16 + * + @param x FP16 instance to be normalised + */ +extern void FP16_norm(FP16 *x); +/** @brief Reduces all components of possibly unreduced FP16 mod Modulus + * + @param x FP16 instance, on exit reduced mod Modulus + */ +extern void FP16_reduce(FP16 *x); +/** @brief Raises an FP16 to the power of a BIG + * + @param x FP16 instance, on exit = y^b + @param y FP16 instance + @param b BIG number + */ +extern void FP16_pow(FP16 *x, FP16 *y, B288_60::BIG b); +/** @brief Raises an FP16 to the power of the internal modulus p, using the Frobenius + * + @param x FP16 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP16_frob(FP16 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP16 instance, on exit = w*x-conj(x)*y+z + @param w FP16 instance + @param x FP16 instance + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP16 instance, on exit = x^2-2*conj(x) + @param x FP16 instance + */ +extern void FP16_xtr_D(FP16 *r, FP16 *x); +/** @brief Calculates FP16 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP16 instance, on exit = trace(w^b) + @param x FP16 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP16_xtr_pow(FP16 *r, FP16 *x, B288_60::BIG b); +/** @brief Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP16 instance, on exit = trace(c^a.d^b) + @param c FP16 instance, trace of an FP12 + @param d FP16 instance, trace of an FP12 + @param e FP16 instance, trace of an FP12 + @param f FP16 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP16_xtr_pow2(FP16 *r, FP16 *c, FP16 *d, FP16 *e, FP16 *f, B288_60::BIG a, B288_60::BIG b); + +/** @brief Conditional copy of FP16 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP16 instance, set to y if s!=0 + @param y another FP16 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP16_cmove(FP16 *x, FP16 *y, int s); + +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48556.h index e3811dc..7fde212 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48556.h @@ -1,308 +1,308 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP16_BLS48556_H -#define FP16_BLS48556_H - -#include "fp8_BLS48556.h" -#include "config_curve_BLS48556.h" - -using namespace core; - -namespace BLS48556 { - -/** - @brief FP16 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP8 a; /**< real part of FP16 */ - FP8 b; /**< imaginary part of FP16 */ -} FP16; - - -/* FP16 prototypes */ -/** @brief Tests for FP16 equal to zero - * - @param x FP16 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP16_iszilch(FP16 *x); -/** @brief Tests for FP16 equal to unity - * - @param x FP16 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP16_isunity(FP16 *x); -/** @brief Tests for equality of two FP16s - * - @param x FP16 instance to be compared - @param y FP16 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP16_equals(FP16 *x, FP16 *y); - -/** @brief Serialize in FP16 - * - @param b buffer for output - @param x FP16 number to be serialized - */ -extern void FP16_toBytes(char *b,FP16 *x); -/** @brief Serialize out FP16 - * - @param x FP16 number to be serialized - @param b buffer for input - */ -extern void FP16_fromBytes(FP16 *x,char *b); - -/** @brief Tests for FP16 having only a real part and no imaginary part - * - @param x FP16 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP16_isreal(FP16 *x); -/** @brief Initialise FP16 from two FP8s - * - @param x FP16 instance to be initialised - @param a FP8 to form real part of FP16 - @param b FP8 to form imaginary part of FP16 - */ -extern void FP16_from_FP8s(FP16 *x, FP8 *a, FP8 *b); -/** @brief Initialise FP16 from single FP8 - * - Imaginary part is set to zero - @param x FP16 instance to be initialised - @param a FP8 to form real part of FP16 - */ -extern void FP16_from_FP8(FP16 *x, FP8 *a); - -/** @brief Initialise FP16 from single FP8 - * - real part is set to zero - @param x FP16 instance to be initialised - @param a FP8 to form imaginary part of FP16 - */ -extern void FP16_from_FP8H(FP16 *x, FP8 *a); - - -/** @brief Copy FP16 to another FP16 - * - @param x FP16 instance, on exit = y - @param y FP16 instance to be copied - */ -extern void FP16_copy(FP16 *x, FP16 *y); -/** @brief Set FP16 to zero - * - @param x FP16 instance to be set to zero - */ -extern void FP16_zero(FP16 *x); -/** @brief Set FP16 to unity - * - @param x FP16 instance to be set to one - */ -extern void FP16_one(FP16 *x); -/** @brief Negation of FP16 - * - @param x FP16 instance, on exit = -y - @param y FP16 instance - */ -extern void FP16_neg(FP16 *x, FP16 *y); -/** @brief Conjugation of FP16 - * - If y=(a,b) on exit x=(a,-b) - @param x FP16 instance, on exit = conj(y) - @param y FP16 instance - */ -extern void FP16_conj(FP16 *x, FP16 *y); -/** @brief Negative conjugation of FP16 - * - If y=(a,b) on exit x=(-a,b) - @param x FP16 instance, on exit = -conj(y) - @param y FP16 instance - */ -extern void FP16_nconj(FP16 *x, FP16 *y); -/** @brief addition of two FP16s - * - @param x FP16 instance, on exit = y+z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_add(FP16 *x, FP16 *y, FP16 *z); -/** @brief subtraction of two FP16s - * - @param x FP16 instance, on exit = y-z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_sub(FP16 *x, FP16 *y, FP16 *z); -/** @brief Multiplication of an FP16 by an FP8 - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP4 multiplier - */ -extern void FP16_pmul(FP16 *x, FP16 *y, FP8 *a); - -/** @brief Multiplication of an FP16 by an FP2 - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP2 multiplier - */ -extern void FP16_qmul(FP16 *x, FP16 *y, FP2 *a); - - -/** @brief Multiplication of an FP16 by an FP - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP multiplier - */ -extern void FP16_tmul(FP16 *x, FP16 *y, FP *a); - - - -/** @brief Multiplication of an FP16 by a small integer - * - @param x FP16 instance, on exit = y*i - @param y FP16 instance - @param i an integer - */ -extern void FP16_imul(FP16 *x, FP16 *y, int i); -/** @brief Squaring an FP16 - * - @param x FP16 instance, on exit = y^2 - @param y FP16 instance - */ -extern void FP16_sqr(FP16 *x, FP16 *y); -/** @brief Multiplication of two FP16s - * - @param x FP16 instance, on exit = y*z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_mul(FP16 *x, FP16 *y, FP16 *z); -/** @brief Inverting an FP16 - * - @param x FP16 instance, on exit = 1/y - @param y FP16 instance - */ -extern void FP16_inv(FP16 *x, FP16 *y); -/** @brief Formats and outputs an FP16 to the console - * - @param x FP16 instance to be printed - */ -extern void FP16_output(FP16 *x); -/** @brief Formats and outputs an FP16 to the console in raw form (for debugging) - * - @param x FP16 instance to be printed - */ -extern void FP16_rawoutput(FP16 *x); -/** @brief multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP16_times_i(FP16 *x); -/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^2*x - */ -extern void FP16_times_i2(FP16 *x); - -/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^4*x - */ -extern void FP16_times_i4(FP16 *x); - - -/** @brief Normalises the components of an FP16 - * - @param x FP16 instance to be normalised - */ -extern void FP16_norm(FP16 *x); -/** @brief Reduces all components of possibly unreduced FP16 mod Modulus - * - @param x FP16 instance, on exit reduced mod Modulus - */ -extern void FP16_reduce(FP16 *x); -/** @brief Raises an FP16 to the power of a BIG - * - @param x FP16 instance, on exit = y^b - @param y FP16 instance - @param b BIG number - */ -extern void FP16_pow(FP16 *x, FP16 *y, B560_58::BIG b); -/** @brief Raises an FP16 to the power of the internal modulus p, using the Frobenius - * - @param x FP16 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP16_frob(FP16 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP16 instance, on exit = w*x-conj(x)*y+z - @param w FP16 instance - @param x FP16 instance - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP16 instance, on exit = x^2-2*conj(x) - @param x FP16 instance - */ -extern void FP16_xtr_D(FP16 *r, FP16 *x); -/** @brief Calculates FP16 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP16 instance, on exit = trace(w^b) - @param x FP16 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP16_xtr_pow(FP16 *r, FP16 *x, B560_58::BIG b); -/** @brief Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP16 instance, on exit = trace(c^a.d^b) - @param c FP16 instance, trace of an FP12 - @param d FP16 instance, trace of an FP12 - @param e FP16 instance, trace of an FP12 - @param f FP16 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP16_xtr_pow2(FP16 *r, FP16 *c, FP16 *d, FP16 *e, FP16 *f, B560_58::BIG a, B560_58::BIG b); - -/** @brief Conditional copy of FP16 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP16 instance, set to y if s!=0 - @param y another FP16 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP16_cmove(FP16 *x, FP16 *y, int s); - -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP16_BLS48556_H +#define FP16_BLS48556_H + +#include "fp8_BLS48556.h" +#include "config_curve_BLS48556.h" + +using namespace core; + +namespace BLS48556 { + +/** + @brief FP16 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP8 a; /**< real part of FP16 */ + FP8 b; /**< imaginary part of FP16 */ +} FP16; + + +/* FP16 prototypes */ +/** @brief Tests for FP16 equal to zero + * + @param x FP16 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP16_iszilch(FP16 *x); +/** @brief Tests for FP16 equal to unity + * + @param x FP16 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP16_isunity(FP16 *x); +/** @brief Tests for equality of two FP16s + * + @param x FP16 instance to be compared + @param y FP16 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP16_equals(FP16 *x, FP16 *y); + +/** @brief Serialize in FP16 + * + @param b buffer for output + @param x FP16 number to be serialized + */ +extern void FP16_toBytes(char *b,FP16 *x); +/** @brief Serialize out FP16 + * + @param x FP16 number to be serialized + @param b buffer for input + */ +extern void FP16_fromBytes(FP16 *x,char *b); + +/** @brief Tests for FP16 having only a real part and no imaginary part + * + @param x FP16 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP16_isreal(FP16 *x); +/** @brief Initialise FP16 from two FP8s + * + @param x FP16 instance to be initialised + @param a FP8 to form real part of FP16 + @param b FP8 to form imaginary part of FP16 + */ +extern void FP16_from_FP8s(FP16 *x, FP8 *a, FP8 *b); +/** @brief Initialise FP16 from single FP8 + * + Imaginary part is set to zero + @param x FP16 instance to be initialised + @param a FP8 to form real part of FP16 + */ +extern void FP16_from_FP8(FP16 *x, FP8 *a); + +/** @brief Initialise FP16 from single FP8 + * + real part is set to zero + @param x FP16 instance to be initialised + @param a FP8 to form imaginary part of FP16 + */ +extern void FP16_from_FP8H(FP16 *x, FP8 *a); + + +/** @brief Copy FP16 to another FP16 + * + @param x FP16 instance, on exit = y + @param y FP16 instance to be copied + */ +extern void FP16_copy(FP16 *x, FP16 *y); +/** @brief Set FP16 to zero + * + @param x FP16 instance to be set to zero + */ +extern void FP16_zero(FP16 *x); +/** @brief Set FP16 to unity + * + @param x FP16 instance to be set to one + */ +extern void FP16_one(FP16 *x); +/** @brief Negation of FP16 + * + @param x FP16 instance, on exit = -y + @param y FP16 instance + */ +extern void FP16_neg(FP16 *x, FP16 *y); +/** @brief Conjugation of FP16 + * + If y=(a,b) on exit x=(a,-b) + @param x FP16 instance, on exit = conj(y) + @param y FP16 instance + */ +extern void FP16_conj(FP16 *x, FP16 *y); +/** @brief Negative conjugation of FP16 + * + If y=(a,b) on exit x=(-a,b) + @param x FP16 instance, on exit = -conj(y) + @param y FP16 instance + */ +extern void FP16_nconj(FP16 *x, FP16 *y); +/** @brief addition of two FP16s + * + @param x FP16 instance, on exit = y+z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_add(FP16 *x, FP16 *y, FP16 *z); +/** @brief subtraction of two FP16s + * + @param x FP16 instance, on exit = y-z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_sub(FP16 *x, FP16 *y, FP16 *z); +/** @brief Multiplication of an FP16 by an FP8 + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP4 multiplier + */ +extern void FP16_pmul(FP16 *x, FP16 *y, FP8 *a); + +/** @brief Multiplication of an FP16 by an FP2 + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP2 multiplier + */ +extern void FP16_qmul(FP16 *x, FP16 *y, FP2 *a); + + +/** @brief Multiplication of an FP16 by an FP + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP multiplier + */ +extern void FP16_tmul(FP16 *x, FP16 *y, FP *a); + + + +/** @brief Multiplication of an FP16 by a small integer + * + @param x FP16 instance, on exit = y*i + @param y FP16 instance + @param i an integer + */ +extern void FP16_imul(FP16 *x, FP16 *y, int i); +/** @brief Squaring an FP16 + * + @param x FP16 instance, on exit = y^2 + @param y FP16 instance + */ +extern void FP16_sqr(FP16 *x, FP16 *y); +/** @brief Multiplication of two FP16s + * + @param x FP16 instance, on exit = y*z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_mul(FP16 *x, FP16 *y, FP16 *z); +/** @brief Inverting an FP16 + * + @param x FP16 instance, on exit = 1/y + @param y FP16 instance + */ +extern void FP16_inv(FP16 *x, FP16 *y); +/** @brief Formats and outputs an FP16 to the console + * + @param x FP16 instance to be printed + */ +extern void FP16_output(FP16 *x); +/** @brief Formats and outputs an FP16 to the console in raw form (for debugging) + * + @param x FP16 instance to be printed + */ +extern void FP16_rawoutput(FP16 *x); +/** @brief multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP16_times_i(FP16 *x); +/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^2*x + */ +extern void FP16_times_i2(FP16 *x); + +/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^4*x + */ +extern void FP16_times_i4(FP16 *x); + + +/** @brief Normalises the components of an FP16 + * + @param x FP16 instance to be normalised + */ +extern void FP16_norm(FP16 *x); +/** @brief Reduces all components of possibly unreduced FP16 mod Modulus + * + @param x FP16 instance, on exit reduced mod Modulus + */ +extern void FP16_reduce(FP16 *x); +/** @brief Raises an FP16 to the power of a BIG + * + @param x FP16 instance, on exit = y^b + @param y FP16 instance + @param b BIG number + */ +extern void FP16_pow(FP16 *x, FP16 *y, B560_58::BIG b); +/** @brief Raises an FP16 to the power of the internal modulus p, using the Frobenius + * + @param x FP16 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP16_frob(FP16 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP16 instance, on exit = w*x-conj(x)*y+z + @param w FP16 instance + @param x FP16 instance + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP16 instance, on exit = x^2-2*conj(x) + @param x FP16 instance + */ +extern void FP16_xtr_D(FP16 *r, FP16 *x); +/** @brief Calculates FP16 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP16 instance, on exit = trace(w^b) + @param x FP16 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP16_xtr_pow(FP16 *r, FP16 *x, B560_58::BIG b); +/** @brief Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP16 instance, on exit = trace(c^a.d^b) + @param c FP16 instance, trace of an FP12 + @param d FP16 instance, trace of an FP12 + @param e FP16 instance, trace of an FP12 + @param f FP16 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP16_xtr_pow2(FP16 *r, FP16 *c, FP16 *d, FP16 *e, FP16 *f, B560_58::BIG a, B560_58::BIG b); + +/** @brief Conditional copy of FP16 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP16 instance, set to y if s!=0 + @param y another FP16 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP16_cmove(FP16 *x, FP16 *y, int s); + +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48581.h index d0e7754..dbad664 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp16_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp16_BLS48581.h @@ -1,308 +1,308 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP16_BLS48581_H -#define FP16_BLS48581_H - -#include "fp8_BLS48581.h" -#include "config_curve_BLS48581.h" - -using namespace core; - -namespace BLS48581 { - -/** - @brief FP16 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP8 a; /**< real part of FP16 */ - FP8 b; /**< imaginary part of FP16 */ -} FP16; - - -/* FP16 prototypes */ -/** @brief Tests for FP16 equal to zero - * - @param x FP16 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP16_iszilch(FP16 *x); -/** @brief Tests for FP16 equal to unity - * - @param x FP16 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP16_isunity(FP16 *x); -/** @brief Tests for equality of two FP16s - * - @param x FP16 instance to be compared - @param y FP16 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP16_equals(FP16 *x, FP16 *y); - -/** @brief Serialize in FP16 - * - @param b buffer for output - @param x FP16 number to be serialized - */ -extern void FP16_toBytes(char *b,FP16 *x); -/** @brief Serialize out FP16 - * - @param x FP16 number to be serialized - @param b buffer for input - */ -extern void FP16_fromBytes(FP16 *x,char *b); - -/** @brief Tests for FP16 having only a real part and no imaginary part - * - @param x FP16 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP16_isreal(FP16 *x); -/** @brief Initialise FP16 from two FP8s - * - @param x FP16 instance to be initialised - @param a FP8 to form real part of FP16 - @param b FP8 to form imaginary part of FP16 - */ -extern void FP16_from_FP8s(FP16 *x, FP8 *a, FP8 *b); -/** @brief Initialise FP16 from single FP8 - * - Imaginary part is set to zero - @param x FP16 instance to be initialised - @param a FP8 to form real part of FP16 - */ -extern void FP16_from_FP8(FP16 *x, FP8 *a); - -/** @brief Initialise FP16 from single FP8 - * - real part is set to zero - @param x FP16 instance to be initialised - @param a FP8 to form imaginary part of FP16 - */ -extern void FP16_from_FP8H(FP16 *x, FP8 *a); - - -/** @brief Copy FP16 to another FP16 - * - @param x FP16 instance, on exit = y - @param y FP16 instance to be copied - */ -extern void FP16_copy(FP16 *x, FP16 *y); -/** @brief Set FP16 to zero - * - @param x FP16 instance to be set to zero - */ -extern void FP16_zero(FP16 *x); -/** @brief Set FP16 to unity - * - @param x FP16 instance to be set to one - */ -extern void FP16_one(FP16 *x); -/** @brief Negation of FP16 - * - @param x FP16 instance, on exit = -y - @param y FP16 instance - */ -extern void FP16_neg(FP16 *x, FP16 *y); -/** @brief Conjugation of FP16 - * - If y=(a,b) on exit x=(a,-b) - @param x FP16 instance, on exit = conj(y) - @param y FP16 instance - */ -extern void FP16_conj(FP16 *x, FP16 *y); -/** @brief Negative conjugation of FP16 - * - If y=(a,b) on exit x=(-a,b) - @param x FP16 instance, on exit = -conj(y) - @param y FP16 instance - */ -extern void FP16_nconj(FP16 *x, FP16 *y); -/** @brief addition of two FP16s - * - @param x FP16 instance, on exit = y+z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_add(FP16 *x, FP16 *y, FP16 *z); -/** @brief subtraction of two FP16s - * - @param x FP16 instance, on exit = y-z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_sub(FP16 *x, FP16 *y, FP16 *z); -/** @brief Multiplication of an FP16 by an FP8 - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP4 multiplier - */ -extern void FP16_pmul(FP16 *x, FP16 *y, FP8 *a); - -/** @brief Multiplication of an FP16 by an FP2 - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP2 multiplier - */ -extern void FP16_qmul(FP16 *x, FP16 *y, FP2 *a); - - -/** @brief Multiplication of an FP16 by an FP - * - @param x FP16 instance, on exit = y*a - @param y FP16 instance - @param a FP multiplier - */ -extern void FP16_tmul(FP16 *x, FP16 *y, FP *a); - - - -/** @brief Multiplication of an FP16 by a small integer - * - @param x FP16 instance, on exit = y*i - @param y FP16 instance - @param i an integer - */ -extern void FP16_imul(FP16 *x, FP16 *y, int i); -/** @brief Squaring an FP16 - * - @param x FP16 instance, on exit = y^2 - @param y FP16 instance - */ -extern void FP16_sqr(FP16 *x, FP16 *y); -/** @brief Multiplication of two FP16s - * - @param x FP16 instance, on exit = y*z - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_mul(FP16 *x, FP16 *y, FP16 *z); -/** @brief Inverting an FP16 - * - @param x FP16 instance, on exit = 1/y - @param y FP16 instance - */ -extern void FP16_inv(FP16 *x, FP16 *y); -/** @brief Formats and outputs an FP16 to the console - * - @param x FP16 instance to be printed - */ -extern void FP16_output(FP16 *x); -/** @brief Formats and outputs an FP16 to the console in raw form (for debugging) - * - @param x FP16 instance to be printed - */ -extern void FP16_rawoutput(FP16 *x); -/** @brief multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP16_times_i(FP16 *x); -/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^2*x - */ -extern void FP16_times_i2(FP16 *x); - -/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^4*x - */ -extern void FP16_times_i4(FP16 *x); - - -/** @brief Normalises the components of an FP16 - * - @param x FP16 instance to be normalised - */ -extern void FP16_norm(FP16 *x); -/** @brief Reduces all components of possibly unreduced FP16 mod Modulus - * - @param x FP16 instance, on exit reduced mod Modulus - */ -extern void FP16_reduce(FP16 *x); -/** @brief Raises an FP16 to the power of a BIG - * - @param x FP16 instance, on exit = y^b - @param y FP16 instance - @param b BIG number - */ -extern void FP16_pow(FP16 *x, FP16 *y, B584_60::BIG b); -/** @brief Raises an FP16 to the power of the internal modulus p, using the Frobenius - * - @param x FP16 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP16_frob(FP16 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP16 instance, on exit = w*x-conj(x)*y+z - @param w FP16 instance - @param x FP16 instance - @param y FP16 instance - @param z FP16 instance - */ -extern void FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP16 instance, on exit = x^2-2*conj(x) - @param x FP16 instance - */ -extern void FP16_xtr_D(FP16 *r, FP16 *x); -/** @brief Calculates FP16 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP16 instance, on exit = trace(w^b) - @param x FP16 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP16_xtr_pow(FP16 *r, FP16 *x, B584_60::BIG b); -/** @brief Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP16 instance, on exit = trace(c^a.d^b) - @param c FP16 instance, trace of an FP12 - @param d FP16 instance, trace of an FP12 - @param e FP16 instance, trace of an FP12 - @param f FP16 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP16_xtr_pow2(FP16 *r, FP16 *c, FP16 *d, FP16 *e, FP16 *f, B584_60::BIG a, B584_60::BIG b); - -/** @brief Conditional copy of FP16 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP16 instance, set to y if s!=0 - @param y another FP16 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP16_cmove(FP16 *x, FP16 *y, int s); - -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP16_BLS48581_H +#define FP16_BLS48581_H + +#include "fp8_BLS48581.h" +#include "config_curve_BLS48581.h" + +using namespace core; + +namespace BLS48581 { + +/** + @brief FP16 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP8 a; /**< real part of FP16 */ + FP8 b; /**< imaginary part of FP16 */ +} FP16; + + +/* FP16 prototypes */ +/** @brief Tests for FP16 equal to zero + * + @param x FP16 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP16_iszilch(FP16 *x); +/** @brief Tests for FP16 equal to unity + * + @param x FP16 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP16_isunity(FP16 *x); +/** @brief Tests for equality of two FP16s + * + @param x FP16 instance to be compared + @param y FP16 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP16_equals(FP16 *x, FP16 *y); + +/** @brief Serialize in FP16 + * + @param b buffer for output + @param x FP16 number to be serialized + */ +extern void FP16_toBytes(char *b,FP16 *x); +/** @brief Serialize out FP16 + * + @param x FP16 number to be serialized + @param b buffer for input + */ +extern void FP16_fromBytes(FP16 *x,char *b); + +/** @brief Tests for FP16 having only a real part and no imaginary part + * + @param x FP16 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP16_isreal(FP16 *x); +/** @brief Initialise FP16 from two FP8s + * + @param x FP16 instance to be initialised + @param a FP8 to form real part of FP16 + @param b FP8 to form imaginary part of FP16 + */ +extern void FP16_from_FP8s(FP16 *x, FP8 *a, FP8 *b); +/** @brief Initialise FP16 from single FP8 + * + Imaginary part is set to zero + @param x FP16 instance to be initialised + @param a FP8 to form real part of FP16 + */ +extern void FP16_from_FP8(FP16 *x, FP8 *a); + +/** @brief Initialise FP16 from single FP8 + * + real part is set to zero + @param x FP16 instance to be initialised + @param a FP8 to form imaginary part of FP16 + */ +extern void FP16_from_FP8H(FP16 *x, FP8 *a); + + +/** @brief Copy FP16 to another FP16 + * + @param x FP16 instance, on exit = y + @param y FP16 instance to be copied + */ +extern void FP16_copy(FP16 *x, FP16 *y); +/** @brief Set FP16 to zero + * + @param x FP16 instance to be set to zero + */ +extern void FP16_zero(FP16 *x); +/** @brief Set FP16 to unity + * + @param x FP16 instance to be set to one + */ +extern void FP16_one(FP16 *x); +/** @brief Negation of FP16 + * + @param x FP16 instance, on exit = -y + @param y FP16 instance + */ +extern void FP16_neg(FP16 *x, FP16 *y); +/** @brief Conjugation of FP16 + * + If y=(a,b) on exit x=(a,-b) + @param x FP16 instance, on exit = conj(y) + @param y FP16 instance + */ +extern void FP16_conj(FP16 *x, FP16 *y); +/** @brief Negative conjugation of FP16 + * + If y=(a,b) on exit x=(-a,b) + @param x FP16 instance, on exit = -conj(y) + @param y FP16 instance + */ +extern void FP16_nconj(FP16 *x, FP16 *y); +/** @brief addition of two FP16s + * + @param x FP16 instance, on exit = y+z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_add(FP16 *x, FP16 *y, FP16 *z); +/** @brief subtraction of two FP16s + * + @param x FP16 instance, on exit = y-z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_sub(FP16 *x, FP16 *y, FP16 *z); +/** @brief Multiplication of an FP16 by an FP8 + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP4 multiplier + */ +extern void FP16_pmul(FP16 *x, FP16 *y, FP8 *a); + +/** @brief Multiplication of an FP16 by an FP2 + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP2 multiplier + */ +extern void FP16_qmul(FP16 *x, FP16 *y, FP2 *a); + + +/** @brief Multiplication of an FP16 by an FP + * + @param x FP16 instance, on exit = y*a + @param y FP16 instance + @param a FP multiplier + */ +extern void FP16_tmul(FP16 *x, FP16 *y, FP *a); + + + +/** @brief Multiplication of an FP16 by a small integer + * + @param x FP16 instance, on exit = y*i + @param y FP16 instance + @param i an integer + */ +extern void FP16_imul(FP16 *x, FP16 *y, int i); +/** @brief Squaring an FP16 + * + @param x FP16 instance, on exit = y^2 + @param y FP16 instance + */ +extern void FP16_sqr(FP16 *x, FP16 *y); +/** @brief Multiplication of two FP16s + * + @param x FP16 instance, on exit = y*z + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_mul(FP16 *x, FP16 *y, FP16 *z); +/** @brief Inverting an FP16 + * + @param x FP16 instance, on exit = 1/y + @param y FP16 instance + */ +extern void FP16_inv(FP16 *x, FP16 *y); +/** @brief Formats and outputs an FP16 to the console + * + @param x FP16 instance to be printed + */ +extern void FP16_output(FP16 *x); +/** @brief Formats and outputs an FP16 to the console in raw form (for debugging) + * + @param x FP16 instance to be printed + */ +extern void FP16_rawoutput(FP16 *x); +/** @brief multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP16_times_i(FP16 *x); +/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^2*x + */ +extern void FP16_times_i2(FP16 *x); + +/** @brief multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP16 instance, on exit = sqrt(1+sqrt(-1))^4*x + */ +extern void FP16_times_i4(FP16 *x); + + +/** @brief Normalises the components of an FP16 + * + @param x FP16 instance to be normalised + */ +extern void FP16_norm(FP16 *x); +/** @brief Reduces all components of possibly unreduced FP16 mod Modulus + * + @param x FP16 instance, on exit reduced mod Modulus + */ +extern void FP16_reduce(FP16 *x); +/** @brief Raises an FP16 to the power of a BIG + * + @param x FP16 instance, on exit = y^b + @param y FP16 instance + @param b BIG number + */ +extern void FP16_pow(FP16 *x, FP16 *y, B584_60::BIG b); +/** @brief Raises an FP16 to the power of the internal modulus p, using the Frobenius + * + @param x FP16 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP16_frob(FP16 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP16 instance, on exit = w*x-conj(x)*y+z + @param w FP16 instance + @param x FP16 instance + @param y FP16 instance + @param z FP16 instance + */ +extern void FP16_xtr_A(FP16 *r, FP16 *w, FP16 *x, FP16 *y, FP16 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP16 instance, on exit = x^2-2*conj(x) + @param x FP16 instance + */ +extern void FP16_xtr_D(FP16 *r, FP16 *x); +/** @brief Calculates FP16 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP16 instance, on exit = trace(w^b) + @param x FP16 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP16_xtr_pow(FP16 *r, FP16 *x, B584_60::BIG b); +/** @brief Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP16 instance, on exit = trace(c^a.d^b) + @param c FP16 instance, trace of an FP12 + @param d FP16 instance, trace of an FP12 + @param e FP16 instance, trace of an FP12 + @param f FP16 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP16_xtr_pow2(FP16 *r, FP16 *c, FP16 *d, FP16 *e, FP16 *f, B584_60::BIG a, B584_60::BIG b); + +/** @brief Conditional copy of FP16 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP16 instance, set to y if s!=0 + @param y another FP16 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP16_cmove(FP16 *x, FP16 *y, int s); + +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp2.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp2.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp24.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp24.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp24.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp24.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp24_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp24_BLS24479.h index 1c75a26..4b62f54 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp24_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp24_BLS24479.h @@ -1,236 +1,236 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP24_BLS24479_H -#define FP24_BLS24479_H - -#include "fp8_BLS24479.h" - -using namespace core; - -namespace BLS24479 { -/** - @brief FP12 Structure - towered over three FP8 -*/ - - -typedef struct -{ - FP8 a; /**< first part of FP12 */ - FP8 b; /**< second part of FP12 */ - FP8 c; /**< third part of FP12 */ - int type; -} FP24; - -extern const B480_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B480_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP24 prototypes */ -/** @brief Tests for FP24 equal to zero - * - @param x FP24 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP24_iszilch(FP24 *x); -/** @brief Tests for FP24 equal to unity - * - @param x FP24 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP24_isunity(FP24 *x); -/** @brief Copy FP24 to another FP24 - * - @param x FP24 instance, on exit = y - @param y FP24 instance to be copied - */ -extern void FP24_copy(FP24 *x, FP24 *y); -/** @brief Set FP24 to unity - * - @param x FP24 instance to be set to one - */ -extern void FP24_one(FP24 *x); - -/** @brief Set FP24 to zero - * - @param x FP24 instance to be set to zero - */ -extern void FP24_zero(FP24 *x); - - -/** @brief Tests for equality of two FP24s - * - @param x FP24 instance to be compared - @param y FP24 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP24_equals(FP24 *x, FP24 *y); -/** @brief Conjugation of FP24 - * - If y=(a,b,c) (where a,b,c are its three FP8 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP24 instance, on exit = conj(y) - @param y FP24 instance - */ -extern void FP24_conj(FP24 *x, FP24 *y); -/** @brief Initialise FP24 from single FP8 - * - Sets first FP8 component of an FP24, other components set to zero - @param x FP24 instance to be initialised - @param a FP8 to form first part of FP8 - */ -extern void FP24_from_FP8(FP24 *x, FP8 *a); -/** @brief Initialise FP24 from three FP8s - * - @param x FP24 instance to be initialised - @param a FP8 to form first part of FP24 - @param b FP8 to form second part of FP24 - @param c FP8 to form third part of FP24 - */ -extern void FP24_from_FP8s(FP24 *x, FP8 *a, FP8* b, FP8 *c); -/** @brief Fast Squaring of an FP24 in "unitary" form - * - @param x FP24 instance, on exit = y^2 - @param y FP8 instance, must be unitary - */ -extern void FP24_usqr(FP24 *x, FP24 *y); -/** @brief Squaring an FP24 - * - @param x FP24 instance, on exit = y^2 - @param y FP24 instance - */ -extern void FP24_sqr(FP24 *x, FP24 *y); - -/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions - * - @param x FP24 instance, on exit = x*y - @param y FP24 instance, of special form - */ -extern void FP24_smul(FP24 *x, FP24 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP24 instance, on exit = x*y - @param y FP24 instance, of special form - */ -extern void FP24_ssmul(FP24 *x, FP24 *y); -/** @brief Full unconditional Multiplication of two FP24s - * - @param x FP24 instance, on exit = x*y - @param y FP24 instance, the multiplier - */ -extern void FP24_mul(FP24 *x, FP24 *y); - -/** @brief Inverting an FP24 - * - @param x FP24 instance, on exit = 1/y - @param y FP24 instance - */ -extern void FP24_inv(FP24 *x, FP24 *y); -/** @brief Raises an FP24 to the power of a BIG - * - @param r FP24 instance, on exit = y^b - @param x FP24 instance - @param b BIG number - */ -extern void FP24_pow(FP24 *r, FP24 *x, B480_56::BIG b); - -//extern void FP24_ppow(FP24 *r,FP24 *x,B480_56::BIG b); - -/** @brief Raises an FP24 instance x to a small integer power, side-channel resistant - * - @param x FP24 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP24_pinpow(FP24 *x, int i, int b); - -/** @brief Raises an FP24 instance x to a BIG power, compressed to FP8 - * - @param c FP8 instance, on exit = x^(e mod r) as FP8 - @param x FP24 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP24_compow(FP8 *c, FP24 *x, B480_56::BIG e, B480_56::BIG r); - -/** @brief Calculate Pi x[i]^b[i] for i=0 to 7, side-channel resistant - * - @param r FP24 instance, on exit = Pi x[i]^b[i] for i=0 to 7 - @param x FP24 array with 4 FP24s - @param b BIG array of 4 exponents - */ -extern void FP24_pow8(FP24 *r, FP24 *x, B480_56::BIG *b); - - -/** @brief Raises an FP24 to the power of the internal modulus p, using the Frobenius - * - @param x FP24 instance, on exit = x^p^n - @param f FP2 precalculated Frobenius constant - @param n power of p - */ -extern void FP24_frob(FP24 *x, FP2 *f, int n); - -/** @brief Reduces all components of possibly unreduced FP24 mod Modulus - * - @param x FP24 instance, on exit reduced mod Modulus - */ -extern void FP24_reduce(FP24 *x); -/** @brief Normalises the components of an FP24 - * - @param x FP24 instance to be normalised - */ -extern void FP24_norm(FP24 *x); -/** @brief Formats and outputs an FP24 to the console - * - @param x FP24 instance to be printed - */ -extern void FP24_output(FP24 *x); -/** @brief Formats and outputs an FP24 instance to an octet string - * - Serializes the components of an FP24 to big-endian base 256 form. - @param S output octet string - @param x FP24 instance to be converted to an octet string - */ -extern void FP24_toOctet(octet *S, FP24 *x); -/** @brief Creates an FP24 instance from an octet string - * - De-serializes the components of an FP24 to create an FP24 from big-endian base 256 components. - @param x FP24 instance to be created from an octet string - @param S input octet string - - */ -extern void FP24_fromOctet(FP24 *x, octet *S); -/** @brief Calculate the trace of an FP24 - * - @param t FP8 trace of x, on exit = tr(x) - @param x FP24 instance - - */ -extern void FP24_trace(FP8 *t, FP24 *x); - -/** @brief Conditional copy of FP24 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP24 instance, set to y if s!=0 - @param y another FP24 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP24_cmove(FP24 *x, FP24 *y, int s); - -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP24_BLS24479_H +#define FP24_BLS24479_H + +#include "fp8_BLS24479.h" + +using namespace core; + +namespace BLS24479 { +/** + @brief FP12 Structure - towered over three FP8 +*/ + + +typedef struct +{ + FP8 a; /**< first part of FP12 */ + FP8 b; /**< second part of FP12 */ + FP8 c; /**< third part of FP12 */ + int type; +} FP24; + +extern const B480_56::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B480_56::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP24 prototypes */ +/** @brief Tests for FP24 equal to zero + * + @param x FP24 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP24_iszilch(FP24 *x); +/** @brief Tests for FP24 equal to unity + * + @param x FP24 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP24_isunity(FP24 *x); +/** @brief Copy FP24 to another FP24 + * + @param x FP24 instance, on exit = y + @param y FP24 instance to be copied + */ +extern void FP24_copy(FP24 *x, FP24 *y); +/** @brief Set FP24 to unity + * + @param x FP24 instance to be set to one + */ +extern void FP24_one(FP24 *x); + +/** @brief Set FP24 to zero + * + @param x FP24 instance to be set to zero + */ +extern void FP24_zero(FP24 *x); + + +/** @brief Tests for equality of two FP24s + * + @param x FP24 instance to be compared + @param y FP24 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP24_equals(FP24 *x, FP24 *y); +/** @brief Conjugation of FP24 + * + If y=(a,b,c) (where a,b,c are its three FP8 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP24 instance, on exit = conj(y) + @param y FP24 instance + */ +extern void FP24_conj(FP24 *x, FP24 *y); +/** @brief Initialise FP24 from single FP8 + * + Sets first FP8 component of an FP24, other components set to zero + @param x FP24 instance to be initialised + @param a FP8 to form first part of FP8 + */ +extern void FP24_from_FP8(FP24 *x, FP8 *a); +/** @brief Initialise FP24 from three FP8s + * + @param x FP24 instance to be initialised + @param a FP8 to form first part of FP24 + @param b FP8 to form second part of FP24 + @param c FP8 to form third part of FP24 + */ +extern void FP24_from_FP8s(FP24 *x, FP8 *a, FP8* b, FP8 *c); +/** @brief Fast Squaring of an FP24 in "unitary" form + * + @param x FP24 instance, on exit = y^2 + @param y FP8 instance, must be unitary + */ +extern void FP24_usqr(FP24 *x, FP24 *y); +/** @brief Squaring an FP24 + * + @param x FP24 instance, on exit = y^2 + @param y FP24 instance + */ +extern void FP24_sqr(FP24 *x, FP24 *y); + +/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions + * + @param x FP24 instance, on exit = x*y + @param y FP24 instance, of special form + */ +extern void FP24_smul(FP24 *x, FP24 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP24 instance, on exit = x*y + @param y FP24 instance, of special form + */ +extern void FP24_ssmul(FP24 *x, FP24 *y); +/** @brief Full unconditional Multiplication of two FP24s + * + @param x FP24 instance, on exit = x*y + @param y FP24 instance, the multiplier + */ +extern void FP24_mul(FP24 *x, FP24 *y); + +/** @brief Inverting an FP24 + * + @param x FP24 instance, on exit = 1/y + @param y FP24 instance + */ +extern void FP24_inv(FP24 *x, FP24 *y); +/** @brief Raises an FP24 to the power of a BIG + * + @param r FP24 instance, on exit = y^b + @param x FP24 instance + @param b BIG number + */ +extern void FP24_pow(FP24 *r, FP24 *x, B480_56::BIG b); + +//extern void FP24_ppow(FP24 *r,FP24 *x,B480_56::BIG b); + +/** @brief Raises an FP24 instance x to a small integer power, side-channel resistant + * + @param x FP24 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP24_pinpow(FP24 *x, int i, int b); + +/** @brief Raises an FP24 instance x to a BIG power, compressed to FP8 + * + @param c FP8 instance, on exit = x^(e mod r) as FP8 + @param x FP24 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP24_compow(FP8 *c, FP24 *x, B480_56::BIG e, B480_56::BIG r); + +/** @brief Calculate Pi x[i]^b[i] for i=0 to 7, side-channel resistant + * + @param r FP24 instance, on exit = Pi x[i]^b[i] for i=0 to 7 + @param x FP24 array with 4 FP24s + @param b BIG array of 4 exponents + */ +extern void FP24_pow8(FP24 *r, FP24 *x, B480_56::BIG *b); + + +/** @brief Raises an FP24 to the power of the internal modulus p, using the Frobenius + * + @param x FP24 instance, on exit = x^p^n + @param f FP2 precalculated Frobenius constant + @param n power of p + */ +extern void FP24_frob(FP24 *x, FP2 *f, int n); + +/** @brief Reduces all components of possibly unreduced FP24 mod Modulus + * + @param x FP24 instance, on exit reduced mod Modulus + */ +extern void FP24_reduce(FP24 *x); +/** @brief Normalises the components of an FP24 + * + @param x FP24 instance to be normalised + */ +extern void FP24_norm(FP24 *x); +/** @brief Formats and outputs an FP24 to the console + * + @param x FP24 instance to be printed + */ +extern void FP24_output(FP24 *x); +/** @brief Formats and outputs an FP24 instance to an octet string + * + Serializes the components of an FP24 to big-endian base 256 form. + @param S output octet string + @param x FP24 instance to be converted to an octet string + */ +extern void FP24_toOctet(octet *S, FP24 *x); +/** @brief Creates an FP24 instance from an octet string + * + De-serializes the components of an FP24 to create an FP24 from big-endian base 256 components. + @param x FP24 instance to be created from an octet string + @param S input octet string + + */ +extern void FP24_fromOctet(FP24 *x, octet *S); +/** @brief Calculate the trace of an FP24 + * + @param t FP8 trace of x, on exit = tr(x) + @param x FP24 instance + + */ +extern void FP24_trace(FP8 *t, FP24 *x); + +/** @brief Conditional copy of FP24 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP24 instance, set to y if s!=0 + @param y another FP24 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP24_cmove(FP24 *x, FP24 *y, int s); + +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12381.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12381.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12381.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12381.h index 1ce1489..4843c4a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12381.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12381.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS12381_H -#define FP2_BLS12381_H - -#include "fp_BLS12381.h" - -using namespace core; - -namespace BLS12381 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B384_58::BIG a, B384_58::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B384_58::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B384_58::BIG a,const B384_58::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B384_58::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS12381_H +#define FP2_BLS12381_H + +#include "fp_BLS12381.h" + +using namespace core; + +namespace BLS12381 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B384_58::BIG a, B384_58::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B384_58::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B384_58::BIG a,const B384_58::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B384_58::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12383.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12383.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12383.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12383.h index cc7c945..5d9f2c9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12383.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12383.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS12383_H -#define FP2_BLS12383_H - -#include "fp_BLS12383.h" - -using namespace core; - -namespace BLS12383 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B384_58::BIG a, B384_58::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B384_58::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B384_58::BIG a,const B384_58::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B384_58::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS12383_H +#define FP2_BLS12383_H + +#include "fp_BLS12383.h" + +using namespace core; + +namespace BLS12383 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B384_58::BIG a, B384_58::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B384_58::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B384_58::BIG a,const B384_58::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B384_58::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12443.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12443.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12443.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12443.h index a4e8fd2..78f88e3 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12443.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12443.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS12443_H -#define FP2_BLS12443_H - -#include "fp_BLS12443.h" - -using namespace core; - -namespace BLS12443 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B448_60::BIG a, B448_60::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B448_60::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B448_60::BIG a,const B448_60::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B448_60::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS12443_H +#define FP2_BLS12443_H + +#include "fp_BLS12443.h" + +using namespace core; + +namespace BLS12443 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B448_60::BIG a, B448_60::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B448_60::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B448_60::BIG a,const B448_60::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B448_60::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12461.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12461.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12461.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12461.h index b1479eb..9487af4 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS12461.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS12461.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS12461_H -#define FP2_BLS12461_H - -#include "fp_BLS12461.h" - -using namespace core; - -namespace BLS12461 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B464_60::BIG a, B464_60::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B464_60::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B464_60::BIG a,const B464_60::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B464_60::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS12461_H +#define FP2_BLS12461_H + +#include "fp_BLS12461.h" + +using namespace core; + +namespace BLS12461 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B464_60::BIG a, B464_60::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B464_60::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B464_60::BIG a,const B464_60::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B464_60::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS24479.h index a67e351..c4dde22 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS24479.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS24479_H -#define FP2_BLS24479_H - -#include "fp_BLS24479.h" - -using namespace core; - -namespace BLS24479 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B480_56::BIG a, B480_56::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B480_56::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B480_56::BIG a,const B480_56::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B480_56::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS24479_H +#define FP2_BLS24479_H + +#include "fp_BLS24479.h" + +using namespace core; + +namespace BLS24479 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B480_56::BIG a, B480_56::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B480_56::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B480_56::BIG a,const B480_56::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B480_56::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48286.h index a5c6fce..7e15f39 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48286.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS48286_H -#define FP2_BLS48286_H - -#include "fp_BLS48286.h" - -using namespace core; - -namespace BLS48286 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B288_60::BIG a, B288_60::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B288_60::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B288_60::BIG a,const B288_60::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B288_60::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS48286_H +#define FP2_BLS48286_H + +#include "fp_BLS48286.h" + +using namespace core; + +namespace BLS48286 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B288_60::BIG a, B288_60::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B288_60::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B288_60::BIG a,const B288_60::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B288_60::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48556.h index a569c2d..665019b 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48556.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS48556_H -#define FP2_BLS48556_H - -#include "fp_BLS48556.h" - -using namespace core; - -namespace BLS48556 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B560_58::BIG a, B560_58::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B560_58::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B560_58::BIG a,const B560_58::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B560_58::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS48556_H +#define FP2_BLS48556_H + +#include "fp_BLS48556.h" + +using namespace core; + +namespace BLS48556 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B560_58::BIG a, B560_58::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B560_58::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B560_58::BIG a,const B560_58::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B560_58::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48581.h index ef3b7fd..b410455 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BLS48581.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BLS48581_H -#define FP2_BLS48581_H - -#include "fp_BLS48581.h" - -using namespace core; - -namespace BLS48581 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B584_60::BIG a, B584_60::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B584_60::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B584_60::BIG a,const B584_60::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B584_60::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BLS48581_H +#define FP2_BLS48581_H + +#include "fp_BLS48581.h" + +using namespace core; + +namespace BLS48581 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B584_60::BIG a, B584_60::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B584_60::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B584_60::BIG a,const B584_60::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B584_60::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN158.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN158.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN158.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN158.h index 5904174..3a289b5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN158.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN158.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BN158_H -#define FP2_BN158_H - -#include "fp_BN158.h" - -using namespace core; - -namespace BN158 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B160_56::BIG a, B160_56::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B160_56::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B160_56::BIG a,const B160_56::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B160_56::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BN158_H +#define FP2_BN158_H + +#include "fp_BN158.h" + +using namespace core; + +namespace BN158 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B160_56::BIG a, B160_56::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B160_56::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B160_56::BIG a,const B160_56::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B160_56::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN254.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN254.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN254.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN254.h index 2e2f476..e548c25 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN254.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN254.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BN254_H -#define FP2_BN254_H - -#include "fp_BN254.h" - -using namespace core; - -namespace BN254 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B256_56::BIG a, B256_56::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B256_56::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B256_56::BIG a,const B256_56::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B256_56::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BN254_H +#define FP2_BN254_H + +#include "fp_BN254.h" + +using namespace core; + +namespace BN254 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B256_56::BIG a, B256_56::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B256_56::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B256_56::BIG a,const B256_56::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B256_56::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN254CX.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN254CX.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN254CX.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN254CX.h index e3b65b2..3b84e46 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN254CX.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN254CX.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BN254CX_H -#define FP2_BN254CX_H - -#include "fp_BN254CX.h" - -using namespace core; - -namespace BN254CX { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B256_56::BIG a, B256_56::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B256_56::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B256_56::BIG a,const B256_56::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B256_56::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BN254CX_H +#define FP2_BN254CX_H + +#include "fp_BN254CX.h" + +using namespace core; + +namespace BN254CX { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B256_56::BIG a, B256_56::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B256_56::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B256_56::BIG a,const B256_56::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B256_56::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN462.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN462.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN462.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN462.h index eb096e0..b1cf3c5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_BN462.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_BN462.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_BN462_H -#define FP2_BN462_H - -#include "fp_BN462.h" - -using namespace core; - -namespace BN462 { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B464_60::BIG a, B464_60::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B464_60::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B464_60::BIG a,const B464_60::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B464_60::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_BN462_H +#define FP2_BN462_H + +#include "fp_BN462.h" + +using namespace core; + +namespace BN462 { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B464_60::BIG a, B464_60::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B464_60::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B464_60::BIG a,const B464_60::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B464_60::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_FP256BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_FP256BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_FP256BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_FP256BN.h index 9b6d01f..e997b97 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_FP256BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_FP256BN.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_FP256BN_H -#define FP2_FP256BN_H - -#include "fp_FP256BN.h" - -using namespace core; - -namespace FP256BN { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B256_56::BIG a, B256_56::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B256_56::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B256_56::BIG a,const B256_56::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B256_56::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_FP256BN_H +#define FP2_FP256BN_H + +#include "fp_FP256BN.h" + +using namespace core; + +namespace FP256BN { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B256_56::BIG a, B256_56::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B256_56::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B256_56::BIG a,const B256_56::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B256_56::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_FP512BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_FP512BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_FP512BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_FP512BN.h index f7dc57d..afdd0ff 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp2_FP512BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp2_FP512BN.h @@ -1,306 +1,306 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP2_FP512BN_H -#define FP2_FP512BN_H - -#include "fp_FP512BN.h" - -using namespace core; - -namespace FP512BN { - -/** - @brief FP2 Structure - quadratic extension field -*/ - -typedef struct -{ - FP a; /**< real part of FP2 */ - FP b; /**< imaginary part of FP2 */ -} FP2; - -/* FP2 prototypes */ - -/** @brief Tests for FP2 equal to zero - * - @param x FP2 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP2_iszilch(FP2 *x); - -/** @brief Tests for lexically larger - * - @param x FP2 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP2_islarger(FP2 *x); - - -/** @brief Serialize out FP2 - * - @param b buffer for output - @param x FP2 number to be serialized - */ -extern void FP2_toBytes(char *b,FP2 *x); - -/** @brief Serialize in FP2 - * - @param x FP2 number to be serialized - @param b buffer for input - */ -extern void FP2_fromBytes(FP2 *x,char *b); - -/** @brief Conditional copy of FP2 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP2 instance, set to y if s!=0 - @param y another FP2 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP2_cmove(FP2 *x, FP2 *y, int s); -/** @brief Tests for FP2 equal to one - * - @param x FP2 instance to be tested - @return 1 if x=1, else returns 0 - */ -extern int FP2_isunity(FP2 *x); -/** @brief Tests for equality of two FP2s - * - @param x FP2 instance to be compared - @param y FP2 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP2_equals(FP2 *x, FP2 *y); -/** @brief Initialise FP2 from two FP numbers - * - @param x FP2 instance to be initialised - @param a FP to form real part of FP2 - @param b FP to form imaginary part of FP2 - */ -extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); -/** @brief Initialise FP2 from two BIG integers - * - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - @param b BIG to form imaginary part of FP2 - */ -extern void FP2_from_BIGs(FP2 *x, B512_60::BIG a, B512_60::BIG b); - - -/** @brief Initialise FP2 from two integers - * - @param x FP2 instance to be initialised - @param a int to form real part of FP2 - @param b int to form imaginary part of FP2 - */ -extern void FP2_from_ints(FP2 *x, int a, int b); - - - -/** @brief Initialise FP2 from single FP - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param an FP to form real part of FP2 - */ -extern void FP2_from_FP(FP2 *x, FP *a); -/** @brief Initialise FP2 from single BIG - * - Imaginary part is set to zero - @param x FP2 instance to be initialised - @param a BIG to form real part of FP2 - */ -extern void FP2_from_BIG(FP2 *x, B512_60::BIG a); -/** @brief Copy FP2 to another FP2 - * - @param x FP2 instance, on exit = y - @param y FP2 instance to be copied - */ -extern void FP2_copy(FP2 *x, FP2 *y); -/** @brief Set FP2 to zero - * - @param x FP2 instance to be set to zero - */ -extern void FP2_zero(FP2 *x); -/** @brief Set FP2 to unity - * - @param x FP2 instance to be set to one - */ -extern void FP2_one(FP2 *x); - -/** @brief Copy from ROM to an FP2 - * - @param w FP2 number to be copied to - @param a BIG real part to be copied from ROM - @param b BIG imag part to be copied from ROM - */ -extern void FP2_rcopy(FP2 *w,const B512_60::BIG a,const B512_60::BIG b); - -/** @brief Sign of FP2 - * - @param x FP2 instance - @return "sign" of FP2 - */ -extern int FP2_sign(FP2 *x); - -/** @brief Negation of FP2 - * - @param x FP2 instance, on exit = -y - @param y FP2 instance - */ -extern void FP2_neg(FP2 *x, FP2 *y); - - -/** @brief Conjugation of FP2 - * - If y=(a,b) on exit x=(a,-b) - @param x FP2 instance, on exit = conj(y) - @param y FP2 instance - */ -extern void FP2_conj(FP2 *x, FP2 *y); -/** @brief addition of two FP2s - * - @param x FP2 instance, on exit = y+z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); -/** @brief subtraction of two FP2s - * - @param x FP2 instance, on exit = y-z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); -/** @brief Multiplication of an FP2 by an FP - * - @param x FP2 instance, on exit = y*b - @param y FP2 instance - @param b FP residue - */ -extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); -/** @brief Multiplication of an FP2 by a small integer - * - @param x FP2 instance, on exit = y*i - @param y FP2 instance - @param i an integer - */ -extern void FP2_imul(FP2 *x, FP2 *y, int i); -/** @brief Squaring an FP2 - * - @param x FP2 instance, on exit = y^2 - @param y FP2 instance - */ -extern void FP2_sqr(FP2 *x, FP2 *y); -/** @brief Multiplication of two FP2s - * - @param x FP2 instance, on exit = y*z - @param y FP2 instance - @param z FP2 instance - */ -extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); -/** @brief Formats and outputs an FP2 to the console - * - @param x FP2 instance - */ -extern void FP2_output(FP2 *x); -/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) - * - @param x FP2 instance - */ -extern void FP2_rawoutput(FP2 *x); -/** @brief Inverting an FP2 - * - @param x FP2 instance, on exit = 1/y - @param y FP2 instance - */ -extern void FP2_inv(FP2 *x, FP2 *y, FP *h); -/** @brief Divide an FP2 by 2 - * - @param x FP2 instance, on exit = y/2 - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_div2(FP2 *x, FP2 *y); -/** @brief Multiply an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x*(1+sqrt(-1)) - */ -extern void FP2_mul_ip(FP2 *x); - -/** @brief Divide an FP2 by (1+sqrt(-1)) - * - Note that (1+sqrt(-1)) is irreducible for FP4 - @param x FP2 instance, on exit = x/(1+sqrt(-1)) - */ -extern void FP2_div_ip(FP2 *x); -/** @brief Normalises the components of an FP2 - * - @param x FP2 instance to be normalised - */ -extern void FP2_norm(FP2 *x); -/** @brief Reduces all components of possibly unreduced FP2 mod Modulus - * - @param x FP2 instance, on exit reduced mod Modulus - */ -extern void FP2_reduce(FP2 *x); -/** @brief Raises an FP2 to the power of a BIG - * - @param x FP2 instance, on exit = y^b - @param y FP2 instance - @param b BIG number - */ -extern void FP2_pow(FP2 *x, FP2 *y, B512_60::BIG b); - -/** @brief Test FP2 for QR - * - @param x FP2 instance - @param h optional generated hint - @return true or false - */ -extern int FP2_qr(FP2 *x,FP *h); - - -/** @brief Square root of an FP2 - * - @param x FP2 instance, on exit = sqrt(y) - @param y FP2 instance - @param h optional input hint - */ -extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); - -/** @brief Multiply an FP2 by sqrt(-1) - * - Note that -1 is QNR - @param x FP2 instance, on exit = x*sqrt(-1) - */ -extern void FP2_times_i(FP2 *x); - -/** @brief Generate random FP2 - * - @param x random FP2 number - @param rng random number generator - */ -extern void FP2_rand(FP2 *x, core::csprng *rng); - -} - -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP2_FP512BN_H +#define FP2_FP512BN_H + +#include "fp_FP512BN.h" + +using namespace core; + +namespace FP512BN { + +/** + @brief FP2 Structure - quadratic extension field +*/ + +typedef struct +{ + FP a; /**< real part of FP2 */ + FP b; /**< imaginary part of FP2 */ +} FP2; + +/* FP2 prototypes */ + +/** @brief Tests for FP2 equal to zero + * + @param x FP2 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP2_iszilch(FP2 *x); + +/** @brief Tests for lexically larger + * + @param x FP2 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP2_islarger(FP2 *x); + + +/** @brief Serialize out FP2 + * + @param b buffer for output + @param x FP2 number to be serialized + */ +extern void FP2_toBytes(char *b,FP2 *x); + +/** @brief Serialize in FP2 + * + @param x FP2 number to be serialized + @param b buffer for input + */ +extern void FP2_fromBytes(FP2 *x,char *b); + +/** @brief Conditional copy of FP2 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP2 instance, set to y if s!=0 + @param y another FP2 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP2_cmove(FP2 *x, FP2 *y, int s); +/** @brief Tests for FP2 equal to one + * + @param x FP2 instance to be tested + @return 1 if x=1, else returns 0 + */ +extern int FP2_isunity(FP2 *x); +/** @brief Tests for equality of two FP2s + * + @param x FP2 instance to be compared + @param y FP2 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP2_equals(FP2 *x, FP2 *y); +/** @brief Initialise FP2 from two FP numbers + * + @param x FP2 instance to be initialised + @param a FP to form real part of FP2 + @param b FP to form imaginary part of FP2 + */ +extern void FP2_from_FPs(FP2 *x, FP *a, FP *b); +/** @brief Initialise FP2 from two BIG integers + * + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + @param b BIG to form imaginary part of FP2 + */ +extern void FP2_from_BIGs(FP2 *x, B512_60::BIG a, B512_60::BIG b); + + +/** @brief Initialise FP2 from two integers + * + @param x FP2 instance to be initialised + @param a int to form real part of FP2 + @param b int to form imaginary part of FP2 + */ +extern void FP2_from_ints(FP2 *x, int a, int b); + + + +/** @brief Initialise FP2 from single FP + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param an FP to form real part of FP2 + */ +extern void FP2_from_FP(FP2 *x, FP *a); +/** @brief Initialise FP2 from single BIG + * + Imaginary part is set to zero + @param x FP2 instance to be initialised + @param a BIG to form real part of FP2 + */ +extern void FP2_from_BIG(FP2 *x, B512_60::BIG a); +/** @brief Copy FP2 to another FP2 + * + @param x FP2 instance, on exit = y + @param y FP2 instance to be copied + */ +extern void FP2_copy(FP2 *x, FP2 *y); +/** @brief Set FP2 to zero + * + @param x FP2 instance to be set to zero + */ +extern void FP2_zero(FP2 *x); +/** @brief Set FP2 to unity + * + @param x FP2 instance to be set to one + */ +extern void FP2_one(FP2 *x); + +/** @brief Copy from ROM to an FP2 + * + @param w FP2 number to be copied to + @param a BIG real part to be copied from ROM + @param b BIG imag part to be copied from ROM + */ +extern void FP2_rcopy(FP2 *w,const B512_60::BIG a,const B512_60::BIG b); + +/** @brief Sign of FP2 + * + @param x FP2 instance + @return "sign" of FP2 + */ +extern int FP2_sign(FP2 *x); + +/** @brief Negation of FP2 + * + @param x FP2 instance, on exit = -y + @param y FP2 instance + */ +extern void FP2_neg(FP2 *x, FP2 *y); + + +/** @brief Conjugation of FP2 + * + If y=(a,b) on exit x=(a,-b) + @param x FP2 instance, on exit = conj(y) + @param y FP2 instance + */ +extern void FP2_conj(FP2 *x, FP2 *y); +/** @brief addition of two FP2s + * + @param x FP2 instance, on exit = y+z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_add(FP2 *x, FP2 *y, FP2 *z); +/** @brief subtraction of two FP2s + * + @param x FP2 instance, on exit = y-z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_sub(FP2 *x, FP2 *y, FP2 *z); +/** @brief Multiplication of an FP2 by an FP + * + @param x FP2 instance, on exit = y*b + @param y FP2 instance + @param b FP residue + */ +extern void FP2_pmul(FP2 *x, FP2 *y, FP *b); +/** @brief Multiplication of an FP2 by a small integer + * + @param x FP2 instance, on exit = y*i + @param y FP2 instance + @param i an integer + */ +extern void FP2_imul(FP2 *x, FP2 *y, int i); +/** @brief Squaring an FP2 + * + @param x FP2 instance, on exit = y^2 + @param y FP2 instance + */ +extern void FP2_sqr(FP2 *x, FP2 *y); +/** @brief Multiplication of two FP2s + * + @param x FP2 instance, on exit = y*z + @param y FP2 instance + @param z FP2 instance + */ +extern void FP2_mul(FP2 *x, FP2 *y, FP2 *z); +/** @brief Formats and outputs an FP2 to the console + * + @param x FP2 instance + */ +extern void FP2_output(FP2 *x); +/** @brief Formats and outputs an FP2 to the console in raw form (for debugging) + * + @param x FP2 instance + */ +extern void FP2_rawoutput(FP2 *x); +/** @brief Inverting an FP2 + * + @param x FP2 instance, on exit = 1/y + @param y FP2 instance + */ +extern void FP2_inv(FP2 *x, FP2 *y, FP *h); +/** @brief Divide an FP2 by 2 + * + @param x FP2 instance, on exit = y/2 + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_div2(FP2 *x, FP2 *y); +/** @brief Multiply an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x*(1+sqrt(-1)) + */ +extern void FP2_mul_ip(FP2 *x); + +/** @brief Divide an FP2 by (1+sqrt(-1)) + * + Note that (1+sqrt(-1)) is irreducible for FP4 + @param x FP2 instance, on exit = x/(1+sqrt(-1)) + */ +extern void FP2_div_ip(FP2 *x); +/** @brief Normalises the components of an FP2 + * + @param x FP2 instance to be normalised + */ +extern void FP2_norm(FP2 *x); +/** @brief Reduces all components of possibly unreduced FP2 mod Modulus + * + @param x FP2 instance, on exit reduced mod Modulus + */ +extern void FP2_reduce(FP2 *x); +/** @brief Raises an FP2 to the power of a BIG + * + @param x FP2 instance, on exit = y^b + @param y FP2 instance + @param b BIG number + */ +extern void FP2_pow(FP2 *x, FP2 *y, B512_60::BIG b); + +/** @brief Test FP2 for QR + * + @param x FP2 instance + @param h optional generated hint + @return true or false + */ +extern int FP2_qr(FP2 *x,FP *h); + + +/** @brief Square root of an FP2 + * + @param x FP2 instance, on exit = sqrt(y) + @param y FP2 instance + @param h optional input hint + */ +extern void FP2_sqrt(FP2 *x, FP2 *y, FP *h); + +/** @brief Multiply an FP2 by sqrt(-1) + * + Note that -1 is QNR + @param x FP2 instance, on exit = x*sqrt(-1) + */ +extern void FP2_times_i(FP2 *x); + +/** @brief Generate random FP2 + * + @param x random FP2 number + @param rng random number generator + */ +extern void FP2_rand(FP2 *x, core::csprng *rng); + +} + +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp4.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp4.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp48.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp48.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48286.h index 3179845..194fcb0 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48286.h @@ -1,231 +1,231 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP48_BLS48286_H -#define FP48_BLS48286_H - -#include "fp16_BLS48286.h" - -using namespace core; - -namespace BLS48286 { -/** - @brief FP12 Structure - towered over three FP16 -*/ - -typedef struct -{ - FP16 a; /**< first part of FP12 */ - FP16 b; /**< second part of FP12 */ - FP16 c; /**< third part of FP12 */ - int type; -} FP48; - -extern const B288_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B288_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP48 prototypes */ -/** @brief Tests for FP48 equal to zero - * - @param x FP48 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP48_iszilch(FP48 *x); -/** @brief Tests for FP48 equal to unity - * - @param x FP48 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP48_isunity(FP48 *x); -/** @brief Copy FP48 to another FP48 - * - @param x FP48 instance, on exit = y - @param y FP48 instance to be copied - */ -extern void FP48_copy(FP48 *x, FP48 *y); -/** @brief Set FP48 to unity - * - @param x FP48 instance to be set to one - */ -extern void FP48_one(FP48 *x); - -/** @brief Set FP48 to zero - * - @param x FP48 instance to be set to zero - */ -extern void FP48_zero(FP48 *x); - -/** @brief Tests for equality of two FP48s - * - @param x FP48 instance to be compared - @param y FP48 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP48_equals(FP48 *x, FP48 *y); -/** @brief Conjugation of FP48 - * - If y=(a,b,c) (where a,b,c are its three FP16 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP48 instance, on exit = conj(y) - @param y FP48 instance - */ -extern void FP48_conj(FP48 *x, FP48 *y); -/** @brief Initialise FP48 from single FP16 - * - Sets first FP16 component of an FP48, other components set to zero - @param x FP48 instance to be initialised - @param a FP16 to form first part of FP48 - */ -extern void FP48_from_FP16(FP48 *x, FP16 *a); -/** @brief Initialise FP48 from three FP16s - * - @param x FP48 instance to be initialised - @param a FP16 to form first part of FP48 - @param b FP16 to form second part of FP48 - @param c FP16 to form third part of FP48 - */ -extern void FP48_from_FP16s(FP48 *x, FP16 *a, FP16* b, FP16 *c); -/** @brief Fast Squaring of an FP48 in "unitary" form - * - @param x FP48 instance, on exit = y^2 - @param y FP16 instance, must be unitary - */ -extern void FP48_usqr(FP48 *x, FP48 *y); -/** @brief Squaring an FP48 - * - @param x FP48 instance, on exit = y^2 - @param y FP48 instance - */ -extern void FP48_sqr(FP48 *x, FP48 *y); -/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, of special form - */ -extern void FP48_smul(FP48 *x, FP48 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, of special form - */ -extern void FP48_ssmul(FP48 *x, FP48 *y); -/** @brief Full unconditional Multiplication of two FP24s - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, the multiplier - */ -extern void FP48_mul(FP48 *x, FP48 *y); -/** @brief Inverting an FP48 - * - @param x FP48 instance, on exit = 1/y - @param y FP48 instance - */ -extern void FP48_inv(FP48 *x, FP48 *y); -/** @brief Raises an FP48 to the power of a BIG - * - @param r FP48 instance, on exit = y^b - @param x FP48 instance - @param b BIG number - */ -extern void FP48_pow(FP48 *r, FP48 *x, B288_60::BIG b); - -//extern void FP48_ppow(FP48 *r,FP48 *x,B288_60::BIG b); - -/** @brief Raises an FP48 instance x to a small integer power, side-channel resistant - * - @param x FP48 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP48_pinpow(FP48 *x, int i, int b); - -/** @brief Raises an FP48 instance x to a BIG power, compressed to FP16 - * - @param c FP16 instance, on exit = x^(e mod r) as FP16 - @param x FP48 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP48_compow(FP16 *c, FP48 *x, B288_60::BIG e, B288_60::BIG r); - -/** @brief Calculate Pi x[i]^b[i] for i=0 to 15, side-channel resistant - * - @param r FP48 instance, on exit = Pi x[i]^b[i] for i=0 to 15 - @param x FP48 array with 16 FP48s - @param b BIG array of 16 exponents - */ -extern void FP48_pow16(FP48 *r, FP48 *x, B288_60::BIG *b); - - -/** @brief Raises an FP48 to the power of the internal modulus p, using the Frobenius - * - @param x FP48 instance, on exit = x^p^n - @param f FP2 precalculated Frobenius constant - @param n power of p - */ -extern void FP48_frob(FP48 *x, FP2 *f, int n); - -/** @brief Reduces all components of possibly unreduced FP48 mod Modulus - * - @param x FP48 instance, on exit reduced mod Modulus - */ -extern void FP48_reduce(FP48 *x); -/** @brief Normalises the components of an FP48 - * - @param x FP48 instance to be normalised - */ -extern void FP48_norm(FP48 *x); -/** @brief Formats and outputs an FP48 to the console - * - @param x FP48 instance to be printed - */ -extern void FP48_output(FP48 *x); -/** @brief Formats and outputs an FP48 instance to an octet string - * - Serializes the components of an FP48 to big-endian base 256 form. - @param S output octet string - @param x FP48 instance to be converted to an octet string - */ -extern void FP48_toOctet(octet *S, FP48 *x); -/** @brief Creates an FP48 instance from an octet string - * - De-serializes the components of an FP48 to create an FP48 from big-endian base 256 components. - @param x FP48 instance to be created from an octet string - @param S input octet string - - */ -extern void FP48_fromOctet(FP48 *x, octet *S); -/** @brief Calculate the trace of an FP48 - * - @param t FP16 trace of x, on exit = tr(x) - @param x FP48 instance - - */ -extern void FP48_trace(FP16 *t, FP48 *x); - -/** @brief Conditional copy of FP48 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP48 instance, set to y if s!=0 - @param y another FP48 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP48_cmove(FP48 *x, FP48 *y, int s); -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP48_BLS48286_H +#define FP48_BLS48286_H + +#include "fp16_BLS48286.h" + +using namespace core; + +namespace BLS48286 { +/** + @brief FP12 Structure - towered over three FP16 +*/ + +typedef struct +{ + FP16 a; /**< first part of FP12 */ + FP16 b; /**< second part of FP12 */ + FP16 c; /**< third part of FP12 */ + int type; +} FP48; + +extern const B288_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B288_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP48 prototypes */ +/** @brief Tests for FP48 equal to zero + * + @param x FP48 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP48_iszilch(FP48 *x); +/** @brief Tests for FP48 equal to unity + * + @param x FP48 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP48_isunity(FP48 *x); +/** @brief Copy FP48 to another FP48 + * + @param x FP48 instance, on exit = y + @param y FP48 instance to be copied + */ +extern void FP48_copy(FP48 *x, FP48 *y); +/** @brief Set FP48 to unity + * + @param x FP48 instance to be set to one + */ +extern void FP48_one(FP48 *x); + +/** @brief Set FP48 to zero + * + @param x FP48 instance to be set to zero + */ +extern void FP48_zero(FP48 *x); + +/** @brief Tests for equality of two FP48s + * + @param x FP48 instance to be compared + @param y FP48 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP48_equals(FP48 *x, FP48 *y); +/** @brief Conjugation of FP48 + * + If y=(a,b,c) (where a,b,c are its three FP16 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP48 instance, on exit = conj(y) + @param y FP48 instance + */ +extern void FP48_conj(FP48 *x, FP48 *y); +/** @brief Initialise FP48 from single FP16 + * + Sets first FP16 component of an FP48, other components set to zero + @param x FP48 instance to be initialised + @param a FP16 to form first part of FP48 + */ +extern void FP48_from_FP16(FP48 *x, FP16 *a); +/** @brief Initialise FP48 from three FP16s + * + @param x FP48 instance to be initialised + @param a FP16 to form first part of FP48 + @param b FP16 to form second part of FP48 + @param c FP16 to form third part of FP48 + */ +extern void FP48_from_FP16s(FP48 *x, FP16 *a, FP16* b, FP16 *c); +/** @brief Fast Squaring of an FP48 in "unitary" form + * + @param x FP48 instance, on exit = y^2 + @param y FP16 instance, must be unitary + */ +extern void FP48_usqr(FP48 *x, FP48 *y); +/** @brief Squaring an FP48 + * + @param x FP48 instance, on exit = y^2 + @param y FP48 instance + */ +extern void FP48_sqr(FP48 *x, FP48 *y); +/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, of special form + */ +extern void FP48_smul(FP48 *x, FP48 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, of special form + */ +extern void FP48_ssmul(FP48 *x, FP48 *y); +/** @brief Full unconditional Multiplication of two FP24s + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, the multiplier + */ +extern void FP48_mul(FP48 *x, FP48 *y); +/** @brief Inverting an FP48 + * + @param x FP48 instance, on exit = 1/y + @param y FP48 instance + */ +extern void FP48_inv(FP48 *x, FP48 *y); +/** @brief Raises an FP48 to the power of a BIG + * + @param r FP48 instance, on exit = y^b + @param x FP48 instance + @param b BIG number + */ +extern void FP48_pow(FP48 *r, FP48 *x, B288_60::BIG b); + +//extern void FP48_ppow(FP48 *r,FP48 *x,B288_60::BIG b); + +/** @brief Raises an FP48 instance x to a small integer power, side-channel resistant + * + @param x FP48 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP48_pinpow(FP48 *x, int i, int b); + +/** @brief Raises an FP48 instance x to a BIG power, compressed to FP16 + * + @param c FP16 instance, on exit = x^(e mod r) as FP16 + @param x FP48 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP48_compow(FP16 *c, FP48 *x, B288_60::BIG e, B288_60::BIG r); + +/** @brief Calculate Pi x[i]^b[i] for i=0 to 15, side-channel resistant + * + @param r FP48 instance, on exit = Pi x[i]^b[i] for i=0 to 15 + @param x FP48 array with 16 FP48s + @param b BIG array of 16 exponents + */ +extern void FP48_pow16(FP48 *r, FP48 *x, B288_60::BIG *b); + + +/** @brief Raises an FP48 to the power of the internal modulus p, using the Frobenius + * + @param x FP48 instance, on exit = x^p^n + @param f FP2 precalculated Frobenius constant + @param n power of p + */ +extern void FP48_frob(FP48 *x, FP2 *f, int n); + +/** @brief Reduces all components of possibly unreduced FP48 mod Modulus + * + @param x FP48 instance, on exit reduced mod Modulus + */ +extern void FP48_reduce(FP48 *x); +/** @brief Normalises the components of an FP48 + * + @param x FP48 instance to be normalised + */ +extern void FP48_norm(FP48 *x); +/** @brief Formats and outputs an FP48 to the console + * + @param x FP48 instance to be printed + */ +extern void FP48_output(FP48 *x); +/** @brief Formats and outputs an FP48 instance to an octet string + * + Serializes the components of an FP48 to big-endian base 256 form. + @param S output octet string + @param x FP48 instance to be converted to an octet string + */ +extern void FP48_toOctet(octet *S, FP48 *x); +/** @brief Creates an FP48 instance from an octet string + * + De-serializes the components of an FP48 to create an FP48 from big-endian base 256 components. + @param x FP48 instance to be created from an octet string + @param S input octet string + + */ +extern void FP48_fromOctet(FP48 *x, octet *S); +/** @brief Calculate the trace of an FP48 + * + @param t FP16 trace of x, on exit = tr(x) + @param x FP48 instance + + */ +extern void FP48_trace(FP16 *t, FP48 *x); + +/** @brief Conditional copy of FP48 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP48 instance, set to y if s!=0 + @param y another FP48 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP48_cmove(FP48 *x, FP48 *y, int s); +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48556.h index c473883..cca9e44 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48556.h @@ -1,231 +1,231 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP48_BLS48556_H -#define FP48_BLS48556_H - -#include "fp16_BLS48556.h" - -using namespace core; - -namespace BLS48556 { -/** - @brief FP12 Structure - towered over three FP16 -*/ - -typedef struct -{ - FP16 a; /**< first part of FP12 */ - FP16 b; /**< second part of FP12 */ - FP16 c; /**< third part of FP12 */ - int type; -} FP48; - -extern const B560_58::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B560_58::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP48 prototypes */ -/** @brief Tests for FP48 equal to zero - * - @param x FP48 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP48_iszilch(FP48 *x); -/** @brief Tests for FP48 equal to unity - * - @param x FP48 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP48_isunity(FP48 *x); -/** @brief Copy FP48 to another FP48 - * - @param x FP48 instance, on exit = y - @param y FP48 instance to be copied - */ -extern void FP48_copy(FP48 *x, FP48 *y); -/** @brief Set FP48 to unity - * - @param x FP48 instance to be set to one - */ -extern void FP48_one(FP48 *x); - -/** @brief Set FP48 to zero - * - @param x FP48 instance to be set to zero - */ -extern void FP48_zero(FP48 *x); - -/** @brief Tests for equality of two FP48s - * - @param x FP48 instance to be compared - @param y FP48 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP48_equals(FP48 *x, FP48 *y); -/** @brief Conjugation of FP48 - * - If y=(a,b,c) (where a,b,c are its three FP16 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP48 instance, on exit = conj(y) - @param y FP48 instance - */ -extern void FP48_conj(FP48 *x, FP48 *y); -/** @brief Initialise FP48 from single FP16 - * - Sets first FP16 component of an FP48, other components set to zero - @param x FP48 instance to be initialised - @param a FP16 to form first part of FP48 - */ -extern void FP48_from_FP16(FP48 *x, FP16 *a); -/** @brief Initialise FP48 from three FP16s - * - @param x FP48 instance to be initialised - @param a FP16 to form first part of FP48 - @param b FP16 to form second part of FP48 - @param c FP16 to form third part of FP48 - */ -extern void FP48_from_FP16s(FP48 *x, FP16 *a, FP16* b, FP16 *c); -/** @brief Fast Squaring of an FP48 in "unitary" form - * - @param x FP48 instance, on exit = y^2 - @param y FP16 instance, must be unitary - */ -extern void FP48_usqr(FP48 *x, FP48 *y); -/** @brief Squaring an FP48 - * - @param x FP48 instance, on exit = y^2 - @param y FP48 instance - */ -extern void FP48_sqr(FP48 *x, FP48 *y); -/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, of special form - */ -extern void FP48_smul(FP48 *x, FP48 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, of special form - */ -extern void FP48_ssmul(FP48 *x, FP48 *y); -/** @brief Full unconditional Multiplication of two FP24s - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, the multiplier - */ -extern void FP48_mul(FP48 *x, FP48 *y); -/** @brief Inverting an FP48 - * - @param x FP48 instance, on exit = 1/y - @param y FP48 instance - */ -extern void FP48_inv(FP48 *x, FP48 *y); -/** @brief Raises an FP48 to the power of a BIG - * - @param r FP48 instance, on exit = y^b - @param x FP48 instance - @param b BIG number - */ -extern void FP48_pow(FP48 *r, FP48 *x, B560_58::BIG b); - -//extern void FP48_ppow(FP48 *r,FP48 *x,B560_58::BIG b); - -/** @brief Raises an FP48 instance x to a small integer power, side-channel resistant - * - @param x FP48 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP48_pinpow(FP48 *x, int i, int b); - -/** @brief Raises an FP48 instance x to a BIG power, compressed to FP16 - * - @param c FP16 instance, on exit = x^(e mod r) as FP16 - @param x FP48 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP48_compow(FP16 *c, FP48 *x, B560_58::BIG e, B560_58::BIG r); - -/** @brief Calculate Pi x[i]^b[i] for i=0 to 15, side-channel resistant - * - @param r FP48 instance, on exit = Pi x[i]^b[i] for i=0 to 15 - @param x FP48 array with 16 FP48s - @param b BIG array of 16 exponents - */ -extern void FP48_pow16(FP48 *r, FP48 *x, B560_58::BIG *b); - - -/** @brief Raises an FP48 to the power of the internal modulus p, using the Frobenius - * - @param x FP48 instance, on exit = x^p^n - @param f FP2 precalculated Frobenius constant - @param n power of p - */ -extern void FP48_frob(FP48 *x, FP2 *f, int n); - -/** @brief Reduces all components of possibly unreduced FP48 mod Modulus - * - @param x FP48 instance, on exit reduced mod Modulus - */ -extern void FP48_reduce(FP48 *x); -/** @brief Normalises the components of an FP48 - * - @param x FP48 instance to be normalised - */ -extern void FP48_norm(FP48 *x); -/** @brief Formats and outputs an FP48 to the console - * - @param x FP48 instance to be printed - */ -extern void FP48_output(FP48 *x); -/** @brief Formats and outputs an FP48 instance to an octet string - * - Serializes the components of an FP48 to big-endian base 256 form. - @param S output octet string - @param x FP48 instance to be converted to an octet string - */ -extern void FP48_toOctet(octet *S, FP48 *x); -/** @brief Creates an FP48 instance from an octet string - * - De-serializes the components of an FP48 to create an FP48 from big-endian base 256 components. - @param x FP48 instance to be created from an octet string - @param S input octet string - - */ -extern void FP48_fromOctet(FP48 *x, octet *S); -/** @brief Calculate the trace of an FP48 - * - @param t FP16 trace of x, on exit = tr(x) - @param x FP48 instance - - */ -extern void FP48_trace(FP16 *t, FP48 *x); - -/** @brief Conditional copy of FP48 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP48 instance, set to y if s!=0 - @param y another FP48 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP48_cmove(FP48 *x, FP48 *y, int s); -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP48_BLS48556_H +#define FP48_BLS48556_H + +#include "fp16_BLS48556.h" + +using namespace core; + +namespace BLS48556 { +/** + @brief FP12 Structure - towered over three FP16 +*/ + +typedef struct +{ + FP16 a; /**< first part of FP12 */ + FP16 b; /**< second part of FP12 */ + FP16 c; /**< third part of FP12 */ + int type; +} FP48; + +extern const B560_58::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B560_58::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP48 prototypes */ +/** @brief Tests for FP48 equal to zero + * + @param x FP48 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP48_iszilch(FP48 *x); +/** @brief Tests for FP48 equal to unity + * + @param x FP48 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP48_isunity(FP48 *x); +/** @brief Copy FP48 to another FP48 + * + @param x FP48 instance, on exit = y + @param y FP48 instance to be copied + */ +extern void FP48_copy(FP48 *x, FP48 *y); +/** @brief Set FP48 to unity + * + @param x FP48 instance to be set to one + */ +extern void FP48_one(FP48 *x); + +/** @brief Set FP48 to zero + * + @param x FP48 instance to be set to zero + */ +extern void FP48_zero(FP48 *x); + +/** @brief Tests for equality of two FP48s + * + @param x FP48 instance to be compared + @param y FP48 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP48_equals(FP48 *x, FP48 *y); +/** @brief Conjugation of FP48 + * + If y=(a,b,c) (where a,b,c are its three FP16 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP48 instance, on exit = conj(y) + @param y FP48 instance + */ +extern void FP48_conj(FP48 *x, FP48 *y); +/** @brief Initialise FP48 from single FP16 + * + Sets first FP16 component of an FP48, other components set to zero + @param x FP48 instance to be initialised + @param a FP16 to form first part of FP48 + */ +extern void FP48_from_FP16(FP48 *x, FP16 *a); +/** @brief Initialise FP48 from three FP16s + * + @param x FP48 instance to be initialised + @param a FP16 to form first part of FP48 + @param b FP16 to form second part of FP48 + @param c FP16 to form third part of FP48 + */ +extern void FP48_from_FP16s(FP48 *x, FP16 *a, FP16* b, FP16 *c); +/** @brief Fast Squaring of an FP48 in "unitary" form + * + @param x FP48 instance, on exit = y^2 + @param y FP16 instance, must be unitary + */ +extern void FP48_usqr(FP48 *x, FP48 *y); +/** @brief Squaring an FP48 + * + @param x FP48 instance, on exit = y^2 + @param y FP48 instance + */ +extern void FP48_sqr(FP48 *x, FP48 *y); +/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, of special form + */ +extern void FP48_smul(FP48 *x, FP48 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, of special form + */ +extern void FP48_ssmul(FP48 *x, FP48 *y); +/** @brief Full unconditional Multiplication of two FP24s + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, the multiplier + */ +extern void FP48_mul(FP48 *x, FP48 *y); +/** @brief Inverting an FP48 + * + @param x FP48 instance, on exit = 1/y + @param y FP48 instance + */ +extern void FP48_inv(FP48 *x, FP48 *y); +/** @brief Raises an FP48 to the power of a BIG + * + @param r FP48 instance, on exit = y^b + @param x FP48 instance + @param b BIG number + */ +extern void FP48_pow(FP48 *r, FP48 *x, B560_58::BIG b); + +//extern void FP48_ppow(FP48 *r,FP48 *x,B560_58::BIG b); + +/** @brief Raises an FP48 instance x to a small integer power, side-channel resistant + * + @param x FP48 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP48_pinpow(FP48 *x, int i, int b); + +/** @brief Raises an FP48 instance x to a BIG power, compressed to FP16 + * + @param c FP16 instance, on exit = x^(e mod r) as FP16 + @param x FP48 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP48_compow(FP16 *c, FP48 *x, B560_58::BIG e, B560_58::BIG r); + +/** @brief Calculate Pi x[i]^b[i] for i=0 to 15, side-channel resistant + * + @param r FP48 instance, on exit = Pi x[i]^b[i] for i=0 to 15 + @param x FP48 array with 16 FP48s + @param b BIG array of 16 exponents + */ +extern void FP48_pow16(FP48 *r, FP48 *x, B560_58::BIG *b); + + +/** @brief Raises an FP48 to the power of the internal modulus p, using the Frobenius + * + @param x FP48 instance, on exit = x^p^n + @param f FP2 precalculated Frobenius constant + @param n power of p + */ +extern void FP48_frob(FP48 *x, FP2 *f, int n); + +/** @brief Reduces all components of possibly unreduced FP48 mod Modulus + * + @param x FP48 instance, on exit reduced mod Modulus + */ +extern void FP48_reduce(FP48 *x); +/** @brief Normalises the components of an FP48 + * + @param x FP48 instance to be normalised + */ +extern void FP48_norm(FP48 *x); +/** @brief Formats and outputs an FP48 to the console + * + @param x FP48 instance to be printed + */ +extern void FP48_output(FP48 *x); +/** @brief Formats and outputs an FP48 instance to an octet string + * + Serializes the components of an FP48 to big-endian base 256 form. + @param S output octet string + @param x FP48 instance to be converted to an octet string + */ +extern void FP48_toOctet(octet *S, FP48 *x); +/** @brief Creates an FP48 instance from an octet string + * + De-serializes the components of an FP48 to create an FP48 from big-endian base 256 components. + @param x FP48 instance to be created from an octet string + @param S input octet string + + */ +extern void FP48_fromOctet(FP48 *x, octet *S); +/** @brief Calculate the trace of an FP48 + * + @param t FP16 trace of x, on exit = tr(x) + @param x FP48 instance + + */ +extern void FP48_trace(FP16 *t, FP48 *x); + +/** @brief Conditional copy of FP48 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP48 instance, set to y if s!=0 + @param y another FP48 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP48_cmove(FP48 *x, FP48 *y, int s); +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48581.h index c00bcd1..fdf7627 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp48_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp48_BLS48581.h @@ -1,231 +1,231 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP48_BLS48581_H -#define FP48_BLS48581_H - -#include "fp16_BLS48581.h" - -using namespace core; - -namespace BLS48581 { -/** - @brief FP12 Structure - towered over three FP16 -*/ - -typedef struct -{ - FP16 a; /**< first part of FP12 */ - FP16 b; /**< second part of FP12 */ - FP16 c; /**< third part of FP12 */ - int type; -} FP48; - -extern const B584_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ -extern const B584_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ - -/* FP48 prototypes */ -/** @brief Tests for FP48 equal to zero - * - @param x FP48 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP48_iszilch(FP48 *x); -/** @brief Tests for FP48 equal to unity - * - @param x FP48 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP48_isunity(FP48 *x); -/** @brief Copy FP48 to another FP48 - * - @param x FP48 instance, on exit = y - @param y FP48 instance to be copied - */ -extern void FP48_copy(FP48 *x, FP48 *y); -/** @brief Set FP48 to unity - * - @param x FP48 instance to be set to one - */ -extern void FP48_one(FP48 *x); - -/** @brief Set FP48 to zero - * - @param x FP48 instance to be set to zero - */ -extern void FP48_zero(FP48 *x); - -/** @brief Tests for equality of two FP48s - * - @param x FP48 instance to be compared - @param y FP48 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP48_equals(FP48 *x, FP48 *y); -/** @brief Conjugation of FP48 - * - If y=(a,b,c) (where a,b,c are its three FP16 components) on exit x=(conj(a),-conj(b),conj(c)) - @param x FP48 instance, on exit = conj(y) - @param y FP48 instance - */ -extern void FP48_conj(FP48 *x, FP48 *y); -/** @brief Initialise FP48 from single FP16 - * - Sets first FP16 component of an FP48, other components set to zero - @param x FP48 instance to be initialised - @param a FP16 to form first part of FP48 - */ -extern void FP48_from_FP16(FP48 *x, FP16 *a); -/** @brief Initialise FP48 from three FP16s - * - @param x FP48 instance to be initialised - @param a FP16 to form first part of FP48 - @param b FP16 to form second part of FP48 - @param c FP16 to form third part of FP48 - */ -extern void FP48_from_FP16s(FP48 *x, FP16 *a, FP16* b, FP16 *c); -/** @brief Fast Squaring of an FP48 in "unitary" form - * - @param x FP48 instance, on exit = y^2 - @param y FP16 instance, must be unitary - */ -extern void FP48_usqr(FP48 *x, FP48 *y); -/** @brief Squaring an FP48 - * - @param x FP48 instance, on exit = y^2 - @param y FP48 instance - */ -extern void FP48_sqr(FP48 *x, FP48 *y); -/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, of special form - */ -extern void FP48_smul(FP48 *x, FP48 *y); - -/** @brief Fast multiplication of what may be sparse multiplicands - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, of special form - */ -extern void FP48_ssmul(FP48 *x, FP48 *y); -/** @brief Full unconditional Multiplication of two FP24s - * - @param x FP48 instance, on exit = x*y - @param y FP48 instance, the multiplier - */ -extern void FP48_mul(FP48 *x, FP48 *y); -/** @brief Inverting an FP48 - * - @param x FP48 instance, on exit = 1/y - @param y FP48 instance - */ -extern void FP48_inv(FP48 *x, FP48 *y); -/** @brief Raises an FP48 to the power of a BIG - * - @param r FP48 instance, on exit = y^b - @param x FP48 instance - @param b BIG number - */ -extern void FP48_pow(FP48 *r, FP48 *x, B584_60::BIG b); - -//extern void FP48_ppow(FP48 *r,FP48 *x,B584_60::BIG b); - -/** @brief Raises an FP48 instance x to a small integer power, side-channel resistant - * - @param x FP48 instance, on exit = x^i - @param i small integer exponent - @param b maximum number of bits in exponent - */ -extern void FP48_pinpow(FP48 *x, int i, int b); - -/** @brief Raises an FP48 instance x to a BIG power, compressed to FP16 - * - @param c FP16 instance, on exit = x^(e mod r) as FP16 - @param x FP48 input - @param e BIG exponent - @param r BIG group order - */ -extern void FP48_compow(FP16 *c, FP48 *x, B584_60::BIG e, B584_60::BIG r); - -/** @brief Calculate Pi x[i]^b[i] for i=0 to 15, side-channel resistant - * - @param r FP48 instance, on exit = Pi x[i]^b[i] for i=0 to 15 - @param x FP48 array with 16 FP48s - @param b BIG array of 16 exponents - */ -extern void FP48_pow16(FP48 *r, FP48 *x, B584_60::BIG *b); - - -/** @brief Raises an FP48 to the power of the internal modulus p, using the Frobenius - * - @param x FP48 instance, on exit = x^p^n - @param f FP2 precalculated Frobenius constant - @param n power of p - */ -extern void FP48_frob(FP48 *x, FP2 *f, int n); - -/** @brief Reduces all components of possibly unreduced FP48 mod Modulus - * - @param x FP48 instance, on exit reduced mod Modulus - */ -extern void FP48_reduce(FP48 *x); -/** @brief Normalises the components of an FP48 - * - @param x FP48 instance to be normalised - */ -extern void FP48_norm(FP48 *x); -/** @brief Formats and outputs an FP48 to the console - * - @param x FP48 instance to be printed - */ -extern void FP48_output(FP48 *x); -/** @brief Formats and outputs an FP48 instance to an octet string - * - Serializes the components of an FP48 to big-endian base 256 form. - @param S output octet string - @param x FP48 instance to be converted to an octet string - */ -extern void FP48_toOctet(octet *S, FP48 *x); -/** @brief Creates an FP48 instance from an octet string - * - De-serializes the components of an FP48 to create an FP48 from big-endian base 256 components. - @param x FP48 instance to be created from an octet string - @param S input octet string - - */ -extern void FP48_fromOctet(FP48 *x, octet *S); -/** @brief Calculate the trace of an FP48 - * - @param t FP16 trace of x, on exit = tr(x) - @param x FP48 instance - - */ -extern void FP48_trace(FP16 *t, FP48 *x); - -/** @brief Conditional copy of FP48 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP48 instance, set to y if s!=0 - @param y another FP48 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP48_cmove(FP48 *x, FP48 *y, int s); -} -#endif +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP48_BLS48581_H +#define FP48_BLS48581_H + +#include "fp16_BLS48581.h" + +using namespace core; + +namespace BLS48581 { +/** + @brief FP12 Structure - towered over three FP16 +*/ + +typedef struct +{ + FP16 a; /**< first part of FP12 */ + FP16 b; /**< second part of FP12 */ + FP16 c; /**< third part of FP12 */ + int type; +} FP48; + +extern const B584_60::BIG Fra; /**< real part of BN curve Frobenius Constant */ +extern const B584_60::BIG Frb; /**< imaginary part of BN curve Frobenius Constant */ + +/* FP48 prototypes */ +/** @brief Tests for FP48 equal to zero + * + @param x FP48 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP48_iszilch(FP48 *x); +/** @brief Tests for FP48 equal to unity + * + @param x FP48 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP48_isunity(FP48 *x); +/** @brief Copy FP48 to another FP48 + * + @param x FP48 instance, on exit = y + @param y FP48 instance to be copied + */ +extern void FP48_copy(FP48 *x, FP48 *y); +/** @brief Set FP48 to unity + * + @param x FP48 instance to be set to one + */ +extern void FP48_one(FP48 *x); + +/** @brief Set FP48 to zero + * + @param x FP48 instance to be set to zero + */ +extern void FP48_zero(FP48 *x); + +/** @brief Tests for equality of two FP48s + * + @param x FP48 instance to be compared + @param y FP48 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP48_equals(FP48 *x, FP48 *y); +/** @brief Conjugation of FP48 + * + If y=(a,b,c) (where a,b,c are its three FP16 components) on exit x=(conj(a),-conj(b),conj(c)) + @param x FP48 instance, on exit = conj(y) + @param y FP48 instance + */ +extern void FP48_conj(FP48 *x, FP48 *y); +/** @brief Initialise FP48 from single FP16 + * + Sets first FP16 component of an FP48, other components set to zero + @param x FP48 instance to be initialised + @param a FP16 to form first part of FP48 + */ +extern void FP48_from_FP16(FP48 *x, FP16 *a); +/** @brief Initialise FP48 from three FP16s + * + @param x FP48 instance to be initialised + @param a FP16 to form first part of FP48 + @param b FP16 to form second part of FP48 + @param c FP16 to form third part of FP48 + */ +extern void FP48_from_FP16s(FP48 *x, FP16 *a, FP16* b, FP16 *c); +/** @brief Fast Squaring of an FP48 in "unitary" form + * + @param x FP48 instance, on exit = y^2 + @param y FP16 instance, must be unitary + */ +extern void FP48_usqr(FP48 *x, FP48 *y); +/** @brief Squaring an FP48 + * + @param x FP48 instance, on exit = y^2 + @param y FP48 instance + */ +extern void FP48_sqr(FP48 *x, FP48 *y); +/** @brief Fast multiplication of two sparse FP24s that arises from ATE pairing line functions + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, of special form + */ +extern void FP48_smul(FP48 *x, FP48 *y); + +/** @brief Fast multiplication of what may be sparse multiplicands + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, of special form + */ +extern void FP48_ssmul(FP48 *x, FP48 *y); +/** @brief Full unconditional Multiplication of two FP24s + * + @param x FP48 instance, on exit = x*y + @param y FP48 instance, the multiplier + */ +extern void FP48_mul(FP48 *x, FP48 *y); +/** @brief Inverting an FP48 + * + @param x FP48 instance, on exit = 1/y + @param y FP48 instance + */ +extern void FP48_inv(FP48 *x, FP48 *y); +/** @brief Raises an FP48 to the power of a BIG + * + @param r FP48 instance, on exit = y^b + @param x FP48 instance + @param b BIG number + */ +extern void FP48_pow(FP48 *r, FP48 *x, B584_60::BIG b); + +//extern void FP48_ppow(FP48 *r,FP48 *x,B584_60::BIG b); + +/** @brief Raises an FP48 instance x to a small integer power, side-channel resistant + * + @param x FP48 instance, on exit = x^i + @param i small integer exponent + @param b maximum number of bits in exponent + */ +extern void FP48_pinpow(FP48 *x, int i, int b); + +/** @brief Raises an FP48 instance x to a BIG power, compressed to FP16 + * + @param c FP16 instance, on exit = x^(e mod r) as FP16 + @param x FP48 input + @param e BIG exponent + @param r BIG group order + */ +extern void FP48_compow(FP16 *c, FP48 *x, B584_60::BIG e, B584_60::BIG r); + +/** @brief Calculate Pi x[i]^b[i] for i=0 to 15, side-channel resistant + * + @param r FP48 instance, on exit = Pi x[i]^b[i] for i=0 to 15 + @param x FP48 array with 16 FP48s + @param b BIG array of 16 exponents + */ +extern void FP48_pow16(FP48 *r, FP48 *x, B584_60::BIG *b); + + +/** @brief Raises an FP48 to the power of the internal modulus p, using the Frobenius + * + @param x FP48 instance, on exit = x^p^n + @param f FP2 precalculated Frobenius constant + @param n power of p + */ +extern void FP48_frob(FP48 *x, FP2 *f, int n); + +/** @brief Reduces all components of possibly unreduced FP48 mod Modulus + * + @param x FP48 instance, on exit reduced mod Modulus + */ +extern void FP48_reduce(FP48 *x); +/** @brief Normalises the components of an FP48 + * + @param x FP48 instance to be normalised + */ +extern void FP48_norm(FP48 *x); +/** @brief Formats and outputs an FP48 to the console + * + @param x FP48 instance to be printed + */ +extern void FP48_output(FP48 *x); +/** @brief Formats and outputs an FP48 instance to an octet string + * + Serializes the components of an FP48 to big-endian base 256 form. + @param S output octet string + @param x FP48 instance to be converted to an octet string + */ +extern void FP48_toOctet(octet *S, FP48 *x); +/** @brief Creates an FP48 instance from an octet string + * + De-serializes the components of an FP48 to create an FP48 from big-endian base 256 components. + @param x FP48 instance to be created from an octet string + @param S input octet string + + */ +extern void FP48_fromOctet(FP48 *x, octet *S); +/** @brief Calculate the trace of an FP48 + * + @param t FP16 trace of x, on exit = tr(x) + @param x FP48 instance + + */ +extern void FP48_trace(FP16 *t, FP48 *x); + +/** @brief Conditional copy of FP48 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP48 instance, set to y if s!=0 + @param y another FP48 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP48_cmove(FP48 *x, FP48 *y, int s); +} +#endif diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12381.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12381.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12381.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12381.h index 2397117..7d84be6 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12381.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12381.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS12381_H -#define FP4_BLS12381_H - -#include "fp2_BLS12381.h" -#include "config_curve_BLS12381.h" - -using namespace core; - -namespace BLS12381 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B384_58::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B384_58::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B384_58::BIG a, B384_58::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS12381_H +#define FP4_BLS12381_H + +#include "fp2_BLS12381.h" +#include "config_curve_BLS12381.h" + +using namespace core; + +namespace BLS12381 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B384_58::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B384_58::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B384_58::BIG a, B384_58::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12383.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12383.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12383.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12383.h index 0a944fe..d8c77ca 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12383.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12383.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS12383_H -#define FP4_BLS12383_H - -#include "fp2_BLS12383.h" -#include "config_curve_BLS12383.h" - -using namespace core; - -namespace BLS12383 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B384_58::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B384_58::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B384_58::BIG a, B384_58::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS12383_H +#define FP4_BLS12383_H + +#include "fp2_BLS12383.h" +#include "config_curve_BLS12383.h" + +using namespace core; + +namespace BLS12383 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B384_58::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B384_58::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B384_58::BIG a, B384_58::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12443.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12443.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12443.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12443.h index 51b5803..34dee30 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12443.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12443.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS12443_H -#define FP4_BLS12443_H - -#include "fp2_BLS12443.h" -#include "config_curve_BLS12443.h" - -using namespace core; - -namespace BLS12443 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B448_60::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B448_60::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B448_60::BIG a, B448_60::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS12443_H +#define FP4_BLS12443_H + +#include "fp2_BLS12443.h" +#include "config_curve_BLS12443.h" + +using namespace core; + +namespace BLS12443 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B448_60::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B448_60::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B448_60::BIG a, B448_60::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12461.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12461.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12461.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12461.h index 68244fc..203a67c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS12461.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS12461.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS12461_H -#define FP4_BLS12461_H - -#include "fp2_BLS12461.h" -#include "config_curve_BLS12461.h" - -using namespace core; - -namespace BLS12461 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B464_60::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B464_60::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B464_60::BIG a, B464_60::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS12461_H +#define FP4_BLS12461_H + +#include "fp2_BLS12461.h" +#include "config_curve_BLS12461.h" + +using namespace core; + +namespace BLS12461 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B464_60::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B464_60::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B464_60::BIG a, B464_60::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS24479.h index eb8af81..e6a193c 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS24479.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS24479_H -#define FP4_BLS24479_H - -#include "fp2_BLS24479.h" -#include "config_curve_BLS24479.h" - -using namespace core; - -namespace BLS24479 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B480_56::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B480_56::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B480_56::BIG a, B480_56::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS24479_H +#define FP4_BLS24479_H + +#include "fp2_BLS24479.h" +#include "config_curve_BLS24479.h" + +using namespace core; + +namespace BLS24479 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B480_56::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B480_56::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B480_56::BIG a, B480_56::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48286.h index bd2be86..aad06f8 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48286.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS48286_H -#define FP4_BLS48286_H - -#include "fp2_BLS48286.h" -#include "config_curve_BLS48286.h" - -using namespace core; - -namespace BLS48286 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B288_60::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B288_60::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B288_60::BIG a, B288_60::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS48286_H +#define FP4_BLS48286_H + +#include "fp2_BLS48286.h" +#include "config_curve_BLS48286.h" + +using namespace core; + +namespace BLS48286 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B288_60::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B288_60::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B288_60::BIG a, B288_60::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48556.h index 673d738..1f6d4f9 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48556.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS48556_H -#define FP4_BLS48556_H - -#include "fp2_BLS48556.h" -#include "config_curve_BLS48556.h" - -using namespace core; - -namespace BLS48556 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B560_58::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B560_58::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B560_58::BIG a, B560_58::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS48556_H +#define FP4_BLS48556_H + +#include "fp2_BLS48556.h" +#include "config_curve_BLS48556.h" + +using namespace core; + +namespace BLS48556 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B560_58::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B560_58::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B560_58::BIG a, B560_58::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48581.h index 775f4b5..181ffb4 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BLS48581.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BLS48581_H -#define FP4_BLS48581_H - -#include "fp2_BLS48581.h" -#include "config_curve_BLS48581.h" - -using namespace core; - -namespace BLS48581 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B584_60::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B584_60::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B584_60::BIG a, B584_60::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BLS48581_H +#define FP4_BLS48581_H + +#include "fp2_BLS48581.h" +#include "config_curve_BLS48581.h" + +using namespace core; + +namespace BLS48581 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B584_60::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B584_60::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B584_60::BIG a, B584_60::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN158.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN158.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN158.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN158.h index c1f625c..a60edb5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN158.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN158.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BN158_H -#define FP4_BN158_H - -#include "fp2_BN158.h" -#include "config_curve_BN158.h" - -using namespace core; - -namespace BN158 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B160_56::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B160_56::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B160_56::BIG a, B160_56::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BN158_H +#define FP4_BN158_H + +#include "fp2_BN158.h" +#include "config_curve_BN158.h" + +using namespace core; + +namespace BN158 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B160_56::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B160_56::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B160_56::BIG a, B160_56::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN254.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN254.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN254.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN254.h index dfcf3b6..f5ef40b 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN254.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN254.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BN254_H -#define FP4_BN254_H - -#include "fp2_BN254.h" -#include "config_curve_BN254.h" - -using namespace core; - -namespace BN254 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B256_56::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B256_56::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B256_56::BIG a, B256_56::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BN254_H +#define FP4_BN254_H + +#include "fp2_BN254.h" +#include "config_curve_BN254.h" + +using namespace core; + +namespace BN254 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B256_56::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B256_56::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B256_56::BIG a, B256_56::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN254CX.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN254CX.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN254CX.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN254CX.h index 005dc0a..f3b36de 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN254CX.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN254CX.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BN254CX_H -#define FP4_BN254CX_H - -#include "fp2_BN254CX.h" -#include "config_curve_BN254CX.h" - -using namespace core; - -namespace BN254CX { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B256_56::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B256_56::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B256_56::BIG a, B256_56::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BN254CX_H +#define FP4_BN254CX_H + +#include "fp2_BN254CX.h" +#include "config_curve_BN254CX.h" + +using namespace core; + +namespace BN254CX { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B256_56::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B256_56::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B256_56::BIG a, B256_56::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN462.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN462.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN462.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN462.h index f6726b6..4d81f9f 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_BN462.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_BN462.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_BN462_H -#define FP4_BN462_H - -#include "fp2_BN462.h" -#include "config_curve_BN462.h" - -using namespace core; - -namespace BN462 { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B464_60::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B464_60::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B464_60::BIG a, B464_60::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_BN462_H +#define FP4_BN462_H + +#include "fp2_BN462.h" +#include "config_curve_BN462.h" + +using namespace core; + +namespace BN462 { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B464_60::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B464_60::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B464_60::BIG a, B464_60::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_FP256BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_FP256BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_FP256BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_FP256BN.h index b53223a..0b0ddb1 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_FP256BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_FP256BN.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_FP256BN_H -#define FP4_FP256BN_H - -#include "fp2_FP256BN.h" -#include "config_curve_FP256BN.h" - -using namespace core; - -namespace FP256BN { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B256_56::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B256_56::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B256_56::BIG a, B256_56::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_FP256BN_H +#define FP4_FP256BN_H + +#include "fp2_FP256BN.h" +#include "config_curve_FP256BN.h" + +using namespace core; + +namespace FP256BN { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B256_56::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B256_56::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B256_56::BIG a, B256_56::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_FP512BN.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_FP512BN.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_FP512BN.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_FP512BN.h index b3d88c0..d266dc7 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp4_FP512BN.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp4_FP512BN.h @@ -1,349 +1,349 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP4_FP512BN_H -#define FP4_FP512BN_H - -#include "fp2_FP512BN.h" -#include "config_curve_FP512BN.h" - -using namespace core; - -namespace FP512BN { - -/** - @brief FP4 Structure - towered over two FP2 -*/ - -typedef struct -{ - FP2 a; /**< real part of FP4 */ - FP2 b; /**< imaginary part of FP4 */ -} FP4; - - -/* FP4 prototypes */ -/** @brief Tests for FP4 equal to zero - * - @param x FP4 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP4_iszilch(FP4 *x); - -/** @brief Tests for lexically larger - * - @param x FP4 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP4_islarger(FP4 *x); - -/** @brief Serialize out FP4 - * - @param b buffer for output - @param x FP4 number to be serialized - */ -extern void FP4_toBytes(char *b,FP4 *x); - -/** @brief Serialize in FP4 - * - @param x FP4 number to be serialized - @param b buffer for input - */ -extern void FP4_fromBytes(FP4 *x,char *b); - -/** @brief Tests for FP4 equal to unity - * - @param x FP4 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP4_isunity(FP4 *x); -/** @brief Tests for equality of two FP4s - * - @param x FP4 instance to be compared - @param y FP4 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP4_equals(FP4 *x, FP4 *y); -/** @brief Tests for FP4 having only a real part and no imaginary part - * - @param x FP4 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP4_isreal(FP4 *x); -/** @brief Initialise FP4 from two FP2s - * - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - @param b FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); -/** @brief Initialise FP4 from single FP2 - * - Imaginary part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form real part of FP4 - */ -extern void FP4_from_FP2(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP2 - * - real part is set to zero - @param x FP4 instance to be initialised - @param a FP2 to form imaginary part of FP4 - */ -extern void FP4_from_FP2H(FP4 *x, FP2 *a); - -/** @brief Initialise FP4 from single FP - * - @param x FP4 instance to be initialised - @param a FP to form real part of FP4 - */ -extern void FP4_from_FP(FP4 *x, FP *a); - -/** @brief Copy FP4 to another FP4 - * - @param x FP4 instance, on exit = y - @param y FP4 instance to be copied - */ -extern void FP4_copy(FP4 *x, FP4 *y); -/** @brief Set FP4 to zero - * - @param x FP4 instance to be set to zero - */ -extern void FP4_zero(FP4 *x); -/** @brief Set FP4 to unity - * - @param x FP4 instance to be set to one - */ -extern void FP4_one(FP4 *x); - -/** @brief Sign of FP4 - * - @param x FP4 instance - @return "sign" of FP4 - */ -extern int FP4_sign(FP4 *x); - -/** @brief Negation of FP4 - * - @param x FP4 instance, on exit = -y - @param y FP4 instance - */ -extern void FP4_neg(FP4 *x, FP4 *y); -/** @brief Conjugation of FP4 - * - If y=(a,b) on exit x=(a,-b) - @param x FP4 instance, on exit = conj(y) - @param y FP4 instance - */ -extern void FP4_conj(FP4 *x, FP4 *y); -/** @brief Negative conjugation of FP4 - * - If y=(a,b) on exit x=(-a,b) - @param x FP4 instance, on exit = -conj(y) - @param y FP4 instance - */ -extern void FP4_nconj(FP4 *x, FP4 *y); -/** @brief addition of two FP4s - * - @param x FP4 instance, on exit = y+z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); -/** @brief subtraction of two FP4s - * - @param x FP4 instance, on exit = y-z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); -/** @brief Multiplication of an FP4 by an FP2 - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP2 multiplier - */ -extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); - - -/** @brief Multiplication of an FP4 by an FP - * - @param x FP4 instance, on exit = y*a - @param y FP4 instance - @param a FP multiplier - */ -extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); - -/** @brief Multiplication of an FP4 by a small integer - * - @param x FP4 instance, on exit = y*i - @param y FP4 instance - @param i an integer - */ -extern void FP4_imul(FP4 *x, FP4 *y, int i); -/** @brief Squaring an FP4 - * - @param x FP4 instance, on exit = y^2 - @param y FP4 instance - */ -extern void FP4_sqr(FP4 *x, FP4 *y); -/** @brief Multiplication of two FP4s - * - @param x FP4 instance, on exit = y*z - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); -/** @brief Inverting an FP4 - * - @param x FP4 instance, on exit = 1/y - @param y FP4 instance - @param h optional input hint - */ -extern void FP4_inv(FP4 *x, FP4 *y, FP *h); - -/** @brief Divide an FP4 by 2 - * - @param x FP4 instance, on exit = y/2 - @param y FP4 instance - */ -extern void FP4_div2(FP4 *x, FP4 *y); - - -/** @brief Formats and outputs an FP4 to the console - * - @param x FP4 instance to be printed - */ -extern void FP4_output(FP4 *x); -/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) - * - @param x FP4 instance to be printed - */ -extern void FP4_rawoutput(FP4 *x); -/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP4_times_i(FP4 *x); -/** @brief Normalises the components of an FP4 - * - @param x FP4 instance to be normalised - */ -extern void FP4_norm(FP4 *x); -/** @brief Reduces all components of possibly unreduced FP4 mod Modulus - * - @param x FP4 instance, on exit reduced mod Modulus - */ -extern void FP4_reduce(FP4 *x); -/** @brief Raises an FP4 to the power of a BIG - * - @param x FP4 instance, on exit = y^b - @param y FP4 instance - @param b BIG number - */ -extern void FP4_pow(FP4 *x, FP4 *y, B512_60::BIG b); -/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius - * - @param x FP4 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP4_frob(FP4 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP4 instance, on exit = w*x-conj(x)*y+z - @param w FP4 instance - @param x FP4 instance - @param y FP4 instance - @param z FP4 instance - */ -extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP4 instance, on exit = x^2-2*conj(x) - @param x FP4 instance - */ -extern void FP4_xtr_D(FP4 *r, FP4 *x); -/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP4 instance, on exit = trace(w^b) - @param x FP4 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP4_xtr_pow(FP4 *r, FP4 *x, B512_60::BIG b); -/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP4 instance, on exit = trace(c^a.d^b) - @param c FP4 instance, trace of an FP12 - @param d FP4 instance, trace of an FP12 - @param e FP4 instance, trace of an FP12 - @param f FP4 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B512_60::BIG a, B512_60::BIG b); - -/** @brief Test FP4 for QR - * - @param r FP4 instance - @param h optional generated hint - @return 1 x is a QR, otherwise 0 - */ -extern int FP4_qr(FP4 *r, FP *h); - -/** @brief Calculate square root of an FP4 - * - Square root - @param r FP4 instance, on exit = sqrt(x) - @param x FP4 instance - @param h optional input hint - */ -extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); - - -/** @brief Conditional copy of FP4 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP4 instance, set to y if s!=0 - @param y another FP4 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP4_cmove(FP4 *x, FP4 *y, int s); - - -/** @brief Divide FP4 number by QNR - * - Divide FP4 by the QNR - @param x FP4 instance - */ -extern void FP4_div_i(FP4 *x); - -/** @brief Generate random FP4 - * - @param x random FP4 number - @param rng random number generator - */ -extern void FP4_rand(FP4 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP4_FP512BN_H +#define FP4_FP512BN_H + +#include "fp2_FP512BN.h" +#include "config_curve_FP512BN.h" + +using namespace core; + +namespace FP512BN { + +/** + @brief FP4 Structure - towered over two FP2 +*/ + +typedef struct +{ + FP2 a; /**< real part of FP4 */ + FP2 b; /**< imaginary part of FP4 */ +} FP4; + + +/* FP4 prototypes */ +/** @brief Tests for FP4 equal to zero + * + @param x FP4 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP4_iszilch(FP4 *x); + +/** @brief Tests for lexically larger + * + @param x FP4 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP4_islarger(FP4 *x); + +/** @brief Serialize out FP4 + * + @param b buffer for output + @param x FP4 number to be serialized + */ +extern void FP4_toBytes(char *b,FP4 *x); + +/** @brief Serialize in FP4 + * + @param x FP4 number to be serialized + @param b buffer for input + */ +extern void FP4_fromBytes(FP4 *x,char *b); + +/** @brief Tests for FP4 equal to unity + * + @param x FP4 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP4_isunity(FP4 *x); +/** @brief Tests for equality of two FP4s + * + @param x FP4 instance to be compared + @param y FP4 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP4_equals(FP4 *x, FP4 *y); +/** @brief Tests for FP4 having only a real part and no imaginary part + * + @param x FP4 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP4_isreal(FP4 *x); +/** @brief Initialise FP4 from two FP2s + * + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + @param b FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2s(FP4 *x, FP2 *a, FP2 *b); +/** @brief Initialise FP4 from single FP2 + * + Imaginary part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form real part of FP4 + */ +extern void FP4_from_FP2(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP2 + * + real part is set to zero + @param x FP4 instance to be initialised + @param a FP2 to form imaginary part of FP4 + */ +extern void FP4_from_FP2H(FP4 *x, FP2 *a); + +/** @brief Initialise FP4 from single FP + * + @param x FP4 instance to be initialised + @param a FP to form real part of FP4 + */ +extern void FP4_from_FP(FP4 *x, FP *a); + +/** @brief Copy FP4 to another FP4 + * + @param x FP4 instance, on exit = y + @param y FP4 instance to be copied + */ +extern void FP4_copy(FP4 *x, FP4 *y); +/** @brief Set FP4 to zero + * + @param x FP4 instance to be set to zero + */ +extern void FP4_zero(FP4 *x); +/** @brief Set FP4 to unity + * + @param x FP4 instance to be set to one + */ +extern void FP4_one(FP4 *x); + +/** @brief Sign of FP4 + * + @param x FP4 instance + @return "sign" of FP4 + */ +extern int FP4_sign(FP4 *x); + +/** @brief Negation of FP4 + * + @param x FP4 instance, on exit = -y + @param y FP4 instance + */ +extern void FP4_neg(FP4 *x, FP4 *y); +/** @brief Conjugation of FP4 + * + If y=(a,b) on exit x=(a,-b) + @param x FP4 instance, on exit = conj(y) + @param y FP4 instance + */ +extern void FP4_conj(FP4 *x, FP4 *y); +/** @brief Negative conjugation of FP4 + * + If y=(a,b) on exit x=(-a,b) + @param x FP4 instance, on exit = -conj(y) + @param y FP4 instance + */ +extern void FP4_nconj(FP4 *x, FP4 *y); +/** @brief addition of two FP4s + * + @param x FP4 instance, on exit = y+z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_add(FP4 *x, FP4 *y, FP4 *z); +/** @brief subtraction of two FP4s + * + @param x FP4 instance, on exit = y-z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_sub(FP4 *x, FP4 *y, FP4 *z); +/** @brief Multiplication of an FP4 by an FP2 + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP2 multiplier + */ +extern void FP4_pmul(FP4 *x, FP4 *y, FP2 *a); + + +/** @brief Multiplication of an FP4 by an FP + * + @param x FP4 instance, on exit = y*a + @param y FP4 instance + @param a FP multiplier + */ +extern void FP4_qmul(FP4 *x, FP4 *y, FP *a); + +/** @brief Multiplication of an FP4 by a small integer + * + @param x FP4 instance, on exit = y*i + @param y FP4 instance + @param i an integer + */ +extern void FP4_imul(FP4 *x, FP4 *y, int i); +/** @brief Squaring an FP4 + * + @param x FP4 instance, on exit = y^2 + @param y FP4 instance + */ +extern void FP4_sqr(FP4 *x, FP4 *y); +/** @brief Multiplication of two FP4s + * + @param x FP4 instance, on exit = y*z + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_mul(FP4 *x, FP4 *y, FP4 *z); +/** @brief Inverting an FP4 + * + @param x FP4 instance, on exit = 1/y + @param y FP4 instance + @param h optional input hint + */ +extern void FP4_inv(FP4 *x, FP4 *y, FP *h); + +/** @brief Divide an FP4 by 2 + * + @param x FP4 instance, on exit = y/2 + @param y FP4 instance + */ +extern void FP4_div2(FP4 *x, FP4 *y); + + +/** @brief Formats and outputs an FP4 to the console + * + @param x FP4 instance to be printed + */ +extern void FP4_output(FP4 *x); +/** @brief Formats and outputs an FP4 to the console in raw form (for debugging) + * + @param x FP4 instance to be printed + */ +extern void FP4_rawoutput(FP4 *x); +/** @brief multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP4 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP4_times_i(FP4 *x); +/** @brief Normalises the components of an FP4 + * + @param x FP4 instance to be normalised + */ +extern void FP4_norm(FP4 *x); +/** @brief Reduces all components of possibly unreduced FP4 mod Modulus + * + @param x FP4 instance, on exit reduced mod Modulus + */ +extern void FP4_reduce(FP4 *x); +/** @brief Raises an FP4 to the power of a BIG + * + @param x FP4 instance, on exit = y^b + @param y FP4 instance + @param b BIG number + */ +extern void FP4_pow(FP4 *x, FP4 *y, B512_60::BIG b); +/** @brief Raises an FP4 to the power of the internal modulus p, using the Frobenius + * + @param x FP4 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP4_frob(FP4 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP4 instance, on exit = w*x-conj(x)*y+z + @param w FP4 instance + @param x FP4 instance + @param y FP4 instance + @param z FP4 instance + */ +extern void FP4_xtr_A(FP4 *r, FP4 *w, FP4 *x, FP4 *y, FP4 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP4 instance, on exit = x^2-2*conj(x) + @param x FP4 instance + */ +extern void FP4_xtr_D(FP4 *r, FP4 *x); +/** @brief Calculates FP4 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP4 instance, on exit = trace(w^b) + @param x FP4 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP4_xtr_pow(FP4 *r, FP4 *x, B512_60::BIG b); +/** @brief Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP4 instance, on exit = trace(c^a.d^b) + @param c FP4 instance, trace of an FP12 + @param d FP4 instance, trace of an FP12 + @param e FP4 instance, trace of an FP12 + @param f FP4 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP4_xtr_pow2(FP4 *r, FP4 *c, FP4 *d, FP4 *e, FP4 *f, B512_60::BIG a, B512_60::BIG b); + +/** @brief Test FP4 for QR + * + @param r FP4 instance + @param h optional generated hint + @return 1 x is a QR, otherwise 0 + */ +extern int FP4_qr(FP4 *r, FP *h); + +/** @brief Calculate square root of an FP4 + * + Square root + @param r FP4 instance, on exit = sqrt(x) + @param x FP4 instance + @param h optional input hint + */ +extern void FP4_sqrt(FP4 *r, FP4 *x, FP *h); + + +/** @brief Conditional copy of FP4 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP4 instance, set to y if s!=0 + @param y another FP4 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP4_cmove(FP4 *x, FP4 *y, int s); + + +/** @brief Divide FP4 number by QNR + * + Divide FP4 by the QNR + @param x FP4 instance + */ +extern void FP4_div_i(FP4 *x); + +/** @brief Generate random FP4 + * + @param x random FP4 number + @param rng random number generator + */ +extern void FP4_rand(FP4 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp8.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8.h similarity index 100% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miracllll/includes/fp8.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8.h diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS24479.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS24479.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS24479.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS24479.h index 03ebc33..d383a0f 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS24479.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS24479.h @@ -1,365 +1,365 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP8_BLS24479_H -#define FP8_BLS24479_H - -#include "fp4_BLS24479.h" -#include "config_curve_BLS24479.h" - -using namespace core; - -namespace BLS24479 { - -/** - @brief FP8 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP4 a; /**< real part of FP8 */ - FP4 b; /**< imaginary part of FP8 */ -} FP8; - - -/* FP8 prototypes */ -/** @brief Tests for FP8 equal to zero - * - @param x FP8 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP8_iszilch(FP8 *x); - -/** @brief Tests for lexically larger - * - @param x FP8 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP8_islarger(FP8 *x); - -/** @brief Serialize in FP8 - * - @param b buffer for output - @param x FP8 number to be serialized - */ -extern void FP8_toBytes(char *b,FP8 *x); -/** @brief Serialize out FP8 - * - @param x FP8 number to be serialized - @param b buffer for input - */ -extern void FP8_fromBytes(FP8 *x,char *b); - - -/** @brief Tests for FP8 equal to unity - * - @param x FP8 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP8_isunity(FP8 *x); -/** @brief Tests for equality of two FP8s - * - @param x FP8 instance to be compared - @param y FP8 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP8_equals(FP8 *x, FP8 *y); -/** @brief Tests for FP8 having only a real part and no imaginary part - * - @param x FP8 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP8_isreal(FP8 *x); -/** @brief Initialise FP8 from two FP4s - * - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - @param b FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); -/** @brief Initialise FP8 from single FP4 - * - Imaginary part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - */ -extern void FP8_from_FP4(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP4 - * - real part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4H(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP - * - @param x FP8 instance to be initialised - @param a FP to form real part of FP8 - */ -extern void FP8_from_FP(FP8 *x, FP *a); - -/** @brief Copy FP8 to another FP8 - * - @param x FP8 instance, on exit = y - @param y FP8 instance to be copied - */ -extern void FP8_copy(FP8 *x, FP8 *y); - -/** @brief Set FP8 to zero - * - @param x FP8 instance to be set to zero - */ -extern void FP8_zero(FP8 *x); -/** @brief Set FP8 to unity - * - @param x FP8 instance to be set to one - */ -extern void FP8_one(FP8 *x); - -/** @brief Sign of FP8 - * - @param x FP8 instance - @return "sign" of FP8 - */ -extern int FP8_sign(FP8 *x); - -/** @brief Negation of FP8 - * - @param x FP8 instance, on exit = -y - @param y FP8 instance - */ -extern void FP8_neg(FP8 *x, FP8 *y); -/** @brief Conjugation of FP8 - * - If y=(a,b) on exit x=(a,-b) - @param x FP8 instance, on exit = conj(y) - @param y FP8 instance - */ -extern void FP8_conj(FP8 *x, FP8 *y); -/** @brief Negative conjugation of FP8 - * - If y=(a,b) on exit x=(-a,b) - @param x FP8 instance, on exit = -conj(y) - @param y FP8 instance - */ -extern void FP8_nconj(FP8 *x, FP8 *y); -/** @brief addition of two FP8s - * - @param x FP8 instance, on exit = y+z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); -/** @brief subtraction of two FP8s - * - @param x FP8 instance, on exit = y-z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); -/** @brief Multiplication of an FP8 by an FP4 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP4 multiplier - */ -extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); - -/** @brief Multiplication of an FP8 by an FP2 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP2 multiplier - */ -extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); - -/** @brief Multiplication of an FP8 by an FP - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP multiplier - */ -extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); - - - -/** @brief Multiplication of an FP8 by a small integer - * - @param x FP8 instance, on exit = y*i - @param y FP8 instance - @param i an integer - */ -extern void FP8_imul(FP8 *x, FP8 *y, int i); -/** @brief Squaring an FP8 - * - @param x FP8 instance, on exit = y^2 - @param y FP8 instance - */ -extern void FP8_sqr(FP8 *x, FP8 *y); -/** @brief Multiplication of two FP8s - * - @param x FP8 instance, on exit = y*z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); -/** @brief Inverting an FP8 - * - @param x FP8 instance, on exit = 1/y - @param y FP8 instance - @param h optional input hint - */ -extern void FP8_inv(FP8 *x, FP8 *y, FP *h); -/** @brief Formats and outputs an FP8 to the console - * - @param x FP8 instance to be printed - */ -extern void FP8_output(FP8 *x); -/** @brief Divide an FP8 by 2 - * - @param x FP8 instance, on exit = y/2 - @param y FP8 instance - */ -extern void FP8_div2(FP8 *x, FP8 *y); - -/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) - * - @param x FP8 instance to be printed - */ -extern void FP8_rawoutput(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP8_times_i(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP8 instance, on exit = (1+sqrt(-1)*x - */ -extern void FP8_times_i2(FP8 *x); - -/** @brief Normalises the components of an FP8 - * - @param x FP8 instance to be normalised - */ -extern void FP8_norm(FP8 *x); -/** @brief Reduces all components of possibly unreduced FP8 mod Modulus - * - @param x FP8 instance, on exit reduced mod Modulus - */ -extern void FP8_reduce(FP8 *x); -/** @brief Raises an FP8 to the power of a BIG - * - @param x FP8 instance, on exit = y^b - @param y FP8 instance - @param b BIG number - */ -extern void FP8_pow(FP8 *x, FP8 *y, B480_56::BIG b); -/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius - * - @param x FP8 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP8_frob(FP8 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP8 instance, on exit = w*x-conj(x)*y+z - @param w FP8 instance - @param x FP8 instance - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP8 instance, on exit = x^2-2*conj(x) - @param x FP8 instance - */ -extern void FP8_xtr_D(FP8 *r, FP8 *x); -/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP8 instance, on exit = trace(w^b) - @param x FP8 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP8_xtr_pow(FP8 *r, FP8 *x, B480_56::BIG b); -/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP8 instance, on exit = trace(c^a.d^b) - @param c FP8 instance, trace of an FP12 - @param d FP8 instance, trace of an FP12 - @param e FP8 instance, trace of an FP12 - @param f FP8 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B480_56::BIG a, B480_56::BIG b); - -/** @brief Test FP8 for QR - * - Square root - @param r FP8 instance - @param h optional generated hint - @return 1 r is a QR, otherwise 0 - */ -extern int FP8_qr(FP8 *r, FP *h); - - -/** @brief Calculate square root of an FP8 - * - Square root - @param r FP8 instance, on exit = sqrt(x) - @param x FP8 instance - @param h optional input hint - */ -extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); - - -/** @brief Conditional copy of FP8 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP8 instance, set to y if s!=0 - @param y another FP8 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP8_cmove(FP8 *x, FP8 *y, int s); - - -/** @brief Divide FP8 number by QNR - * - Divide FP8 by the QNR - @param x FP8 instance - */ -extern void FP8_div_i(FP8 *x); - -/** @brief Generate random FP8 - * - @param x random FP8 number - @param rng random number generator - */ -extern void FP8_rand(FP8 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP8_BLS24479_H +#define FP8_BLS24479_H + +#include "fp4_BLS24479.h" +#include "config_curve_BLS24479.h" + +using namespace core; + +namespace BLS24479 { + +/** + @brief FP8 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP4 a; /**< real part of FP8 */ + FP4 b; /**< imaginary part of FP8 */ +} FP8; + + +/* FP8 prototypes */ +/** @brief Tests for FP8 equal to zero + * + @param x FP8 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP8_iszilch(FP8 *x); + +/** @brief Tests for lexically larger + * + @param x FP8 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP8_islarger(FP8 *x); + +/** @brief Serialize in FP8 + * + @param b buffer for output + @param x FP8 number to be serialized + */ +extern void FP8_toBytes(char *b,FP8 *x); +/** @brief Serialize out FP8 + * + @param x FP8 number to be serialized + @param b buffer for input + */ +extern void FP8_fromBytes(FP8 *x,char *b); + + +/** @brief Tests for FP8 equal to unity + * + @param x FP8 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP8_isunity(FP8 *x); +/** @brief Tests for equality of two FP8s + * + @param x FP8 instance to be compared + @param y FP8 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP8_equals(FP8 *x, FP8 *y); +/** @brief Tests for FP8 having only a real part and no imaginary part + * + @param x FP8 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP8_isreal(FP8 *x); +/** @brief Initialise FP8 from two FP4s + * + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + @param b FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); +/** @brief Initialise FP8 from single FP4 + * + Imaginary part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + */ +extern void FP8_from_FP4(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP4 + * + real part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4H(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP + * + @param x FP8 instance to be initialised + @param a FP to form real part of FP8 + */ +extern void FP8_from_FP(FP8 *x, FP *a); + +/** @brief Copy FP8 to another FP8 + * + @param x FP8 instance, on exit = y + @param y FP8 instance to be copied + */ +extern void FP8_copy(FP8 *x, FP8 *y); + +/** @brief Set FP8 to zero + * + @param x FP8 instance to be set to zero + */ +extern void FP8_zero(FP8 *x); +/** @brief Set FP8 to unity + * + @param x FP8 instance to be set to one + */ +extern void FP8_one(FP8 *x); + +/** @brief Sign of FP8 + * + @param x FP8 instance + @return "sign" of FP8 + */ +extern int FP8_sign(FP8 *x); + +/** @brief Negation of FP8 + * + @param x FP8 instance, on exit = -y + @param y FP8 instance + */ +extern void FP8_neg(FP8 *x, FP8 *y); +/** @brief Conjugation of FP8 + * + If y=(a,b) on exit x=(a,-b) + @param x FP8 instance, on exit = conj(y) + @param y FP8 instance + */ +extern void FP8_conj(FP8 *x, FP8 *y); +/** @brief Negative conjugation of FP8 + * + If y=(a,b) on exit x=(-a,b) + @param x FP8 instance, on exit = -conj(y) + @param y FP8 instance + */ +extern void FP8_nconj(FP8 *x, FP8 *y); +/** @brief addition of two FP8s + * + @param x FP8 instance, on exit = y+z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); +/** @brief subtraction of two FP8s + * + @param x FP8 instance, on exit = y-z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); +/** @brief Multiplication of an FP8 by an FP4 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP4 multiplier + */ +extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); + +/** @brief Multiplication of an FP8 by an FP2 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP2 multiplier + */ +extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); + +/** @brief Multiplication of an FP8 by an FP + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP multiplier + */ +extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); + + + +/** @brief Multiplication of an FP8 by a small integer + * + @param x FP8 instance, on exit = y*i + @param y FP8 instance + @param i an integer + */ +extern void FP8_imul(FP8 *x, FP8 *y, int i); +/** @brief Squaring an FP8 + * + @param x FP8 instance, on exit = y^2 + @param y FP8 instance + */ +extern void FP8_sqr(FP8 *x, FP8 *y); +/** @brief Multiplication of two FP8s + * + @param x FP8 instance, on exit = y*z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); +/** @brief Inverting an FP8 + * + @param x FP8 instance, on exit = 1/y + @param y FP8 instance + @param h optional input hint + */ +extern void FP8_inv(FP8 *x, FP8 *y, FP *h); +/** @brief Formats and outputs an FP8 to the console + * + @param x FP8 instance to be printed + */ +extern void FP8_output(FP8 *x); +/** @brief Divide an FP8 by 2 + * + @param x FP8 instance, on exit = y/2 + @param y FP8 instance + */ +extern void FP8_div2(FP8 *x, FP8 *y); + +/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) + * + @param x FP8 instance to be printed + */ +extern void FP8_rawoutput(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP8_times_i(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP8 instance, on exit = (1+sqrt(-1)*x + */ +extern void FP8_times_i2(FP8 *x); + +/** @brief Normalises the components of an FP8 + * + @param x FP8 instance to be normalised + */ +extern void FP8_norm(FP8 *x); +/** @brief Reduces all components of possibly unreduced FP8 mod Modulus + * + @param x FP8 instance, on exit reduced mod Modulus + */ +extern void FP8_reduce(FP8 *x); +/** @brief Raises an FP8 to the power of a BIG + * + @param x FP8 instance, on exit = y^b + @param y FP8 instance + @param b BIG number + */ +extern void FP8_pow(FP8 *x, FP8 *y, B480_56::BIG b); +/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius + * + @param x FP8 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP8_frob(FP8 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP8 instance, on exit = w*x-conj(x)*y+z + @param w FP8 instance + @param x FP8 instance + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP8 instance, on exit = x^2-2*conj(x) + @param x FP8 instance + */ +extern void FP8_xtr_D(FP8 *r, FP8 *x); +/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP8 instance, on exit = trace(w^b) + @param x FP8 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP8_xtr_pow(FP8 *r, FP8 *x, B480_56::BIG b); +/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP8 instance, on exit = trace(c^a.d^b) + @param c FP8 instance, trace of an FP12 + @param d FP8 instance, trace of an FP12 + @param e FP8 instance, trace of an FP12 + @param f FP8 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B480_56::BIG a, B480_56::BIG b); + +/** @brief Test FP8 for QR + * + Square root + @param r FP8 instance + @param h optional generated hint + @return 1 r is a QR, otherwise 0 + */ +extern int FP8_qr(FP8 *r, FP *h); + + +/** @brief Calculate square root of an FP8 + * + Square root + @param r FP8 instance, on exit = sqrt(x) + @param x FP8 instance + @param h optional input hint + */ +extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); + + +/** @brief Conditional copy of FP8 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP8 instance, set to y if s!=0 + @param y another FP8 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP8_cmove(FP8 *x, FP8 *y, int s); + + +/** @brief Divide FP8 number by QNR + * + Divide FP8 by the QNR + @param x FP8 instance + */ +extern void FP8_div_i(FP8 *x); + +/** @brief Generate random FP8 + * + @param x random FP8 number + @param rng random number generator + */ +extern void FP8_rand(FP8 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48286.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48286.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48286.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48286.h index 36279fb..f68fe7a 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48286.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48286.h @@ -1,365 +1,365 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP8_BLS48286_H -#define FP8_BLS48286_H - -#include "fp4_BLS48286.h" -#include "config_curve_BLS48286.h" - -using namespace core; - -namespace BLS48286 { - -/** - @brief FP8 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP4 a; /**< real part of FP8 */ - FP4 b; /**< imaginary part of FP8 */ -} FP8; - - -/* FP8 prototypes */ -/** @brief Tests for FP8 equal to zero - * - @param x FP8 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP8_iszilch(FP8 *x); - -/** @brief Tests for lexically larger - * - @param x FP8 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP8_islarger(FP8 *x); - -/** @brief Serialize in FP8 - * - @param b buffer for output - @param x FP8 number to be serialized - */ -extern void FP8_toBytes(char *b,FP8 *x); -/** @brief Serialize out FP8 - * - @param x FP8 number to be serialized - @param b buffer for input - */ -extern void FP8_fromBytes(FP8 *x,char *b); - - -/** @brief Tests for FP8 equal to unity - * - @param x FP8 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP8_isunity(FP8 *x); -/** @brief Tests for equality of two FP8s - * - @param x FP8 instance to be compared - @param y FP8 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP8_equals(FP8 *x, FP8 *y); -/** @brief Tests for FP8 having only a real part and no imaginary part - * - @param x FP8 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP8_isreal(FP8 *x); -/** @brief Initialise FP8 from two FP4s - * - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - @param b FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); -/** @brief Initialise FP8 from single FP4 - * - Imaginary part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - */ -extern void FP8_from_FP4(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP4 - * - real part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4H(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP - * - @param x FP8 instance to be initialised - @param a FP to form real part of FP8 - */ -extern void FP8_from_FP(FP8 *x, FP *a); - -/** @brief Copy FP8 to another FP8 - * - @param x FP8 instance, on exit = y - @param y FP8 instance to be copied - */ -extern void FP8_copy(FP8 *x, FP8 *y); - -/** @brief Set FP8 to zero - * - @param x FP8 instance to be set to zero - */ -extern void FP8_zero(FP8 *x); -/** @brief Set FP8 to unity - * - @param x FP8 instance to be set to one - */ -extern void FP8_one(FP8 *x); - -/** @brief Sign of FP8 - * - @param x FP8 instance - @return "sign" of FP8 - */ -extern int FP8_sign(FP8 *x); - -/** @brief Negation of FP8 - * - @param x FP8 instance, on exit = -y - @param y FP8 instance - */ -extern void FP8_neg(FP8 *x, FP8 *y); -/** @brief Conjugation of FP8 - * - If y=(a,b) on exit x=(a,-b) - @param x FP8 instance, on exit = conj(y) - @param y FP8 instance - */ -extern void FP8_conj(FP8 *x, FP8 *y); -/** @brief Negative conjugation of FP8 - * - If y=(a,b) on exit x=(-a,b) - @param x FP8 instance, on exit = -conj(y) - @param y FP8 instance - */ -extern void FP8_nconj(FP8 *x, FP8 *y); -/** @brief addition of two FP8s - * - @param x FP8 instance, on exit = y+z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); -/** @brief subtraction of two FP8s - * - @param x FP8 instance, on exit = y-z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); -/** @brief Multiplication of an FP8 by an FP4 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP4 multiplier - */ -extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); - -/** @brief Multiplication of an FP8 by an FP2 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP2 multiplier - */ -extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); - -/** @brief Multiplication of an FP8 by an FP - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP multiplier - */ -extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); - - - -/** @brief Multiplication of an FP8 by a small integer - * - @param x FP8 instance, on exit = y*i - @param y FP8 instance - @param i an integer - */ -extern void FP8_imul(FP8 *x, FP8 *y, int i); -/** @brief Squaring an FP8 - * - @param x FP8 instance, on exit = y^2 - @param y FP8 instance - */ -extern void FP8_sqr(FP8 *x, FP8 *y); -/** @brief Multiplication of two FP8s - * - @param x FP8 instance, on exit = y*z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); -/** @brief Inverting an FP8 - * - @param x FP8 instance, on exit = 1/y - @param y FP8 instance - @param h optional input hint - */ -extern void FP8_inv(FP8 *x, FP8 *y, FP *h); -/** @brief Formats and outputs an FP8 to the console - * - @param x FP8 instance to be printed - */ -extern void FP8_output(FP8 *x); -/** @brief Divide an FP8 by 2 - * - @param x FP8 instance, on exit = y/2 - @param y FP8 instance - */ -extern void FP8_div2(FP8 *x, FP8 *y); - -/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) - * - @param x FP8 instance to be printed - */ -extern void FP8_rawoutput(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP8_times_i(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP8 instance, on exit = (1+sqrt(-1)*x - */ -extern void FP8_times_i2(FP8 *x); - -/** @brief Normalises the components of an FP8 - * - @param x FP8 instance to be normalised - */ -extern void FP8_norm(FP8 *x); -/** @brief Reduces all components of possibly unreduced FP8 mod Modulus - * - @param x FP8 instance, on exit reduced mod Modulus - */ -extern void FP8_reduce(FP8 *x); -/** @brief Raises an FP8 to the power of a BIG - * - @param x FP8 instance, on exit = y^b - @param y FP8 instance - @param b BIG number - */ -extern void FP8_pow(FP8 *x, FP8 *y, B288_60::BIG b); -/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius - * - @param x FP8 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP8_frob(FP8 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP8 instance, on exit = w*x-conj(x)*y+z - @param w FP8 instance - @param x FP8 instance - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP8 instance, on exit = x^2-2*conj(x) - @param x FP8 instance - */ -extern void FP8_xtr_D(FP8 *r, FP8 *x); -/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP8 instance, on exit = trace(w^b) - @param x FP8 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP8_xtr_pow(FP8 *r, FP8 *x, B288_60::BIG b); -/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP8 instance, on exit = trace(c^a.d^b) - @param c FP8 instance, trace of an FP12 - @param d FP8 instance, trace of an FP12 - @param e FP8 instance, trace of an FP12 - @param f FP8 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B288_60::BIG a, B288_60::BIG b); - -/** @brief Test FP8 for QR - * - Square root - @param r FP8 instance - @param h optional generated hint - @return 1 r is a QR, otherwise 0 - */ -extern int FP8_qr(FP8 *r, FP *h); - - -/** @brief Calculate square root of an FP8 - * - Square root - @param r FP8 instance, on exit = sqrt(x) - @param x FP8 instance - @param h optional input hint - */ -extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); - - -/** @brief Conditional copy of FP8 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP8 instance, set to y if s!=0 - @param y another FP8 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP8_cmove(FP8 *x, FP8 *y, int s); - - -/** @brief Divide FP8 number by QNR - * - Divide FP8 by the QNR - @param x FP8 instance - */ -extern void FP8_div_i(FP8 *x); - -/** @brief Generate random FP8 - * - @param x random FP8 number - @param rng random number generator - */ -extern void FP8_rand(FP8 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP8_BLS48286_H +#define FP8_BLS48286_H + +#include "fp4_BLS48286.h" +#include "config_curve_BLS48286.h" + +using namespace core; + +namespace BLS48286 { + +/** + @brief FP8 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP4 a; /**< real part of FP8 */ + FP4 b; /**< imaginary part of FP8 */ +} FP8; + + +/* FP8 prototypes */ +/** @brief Tests for FP8 equal to zero + * + @param x FP8 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP8_iszilch(FP8 *x); + +/** @brief Tests for lexically larger + * + @param x FP8 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP8_islarger(FP8 *x); + +/** @brief Serialize in FP8 + * + @param b buffer for output + @param x FP8 number to be serialized + */ +extern void FP8_toBytes(char *b,FP8 *x); +/** @brief Serialize out FP8 + * + @param x FP8 number to be serialized + @param b buffer for input + */ +extern void FP8_fromBytes(FP8 *x,char *b); + + +/** @brief Tests for FP8 equal to unity + * + @param x FP8 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP8_isunity(FP8 *x); +/** @brief Tests for equality of two FP8s + * + @param x FP8 instance to be compared + @param y FP8 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP8_equals(FP8 *x, FP8 *y); +/** @brief Tests for FP8 having only a real part and no imaginary part + * + @param x FP8 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP8_isreal(FP8 *x); +/** @brief Initialise FP8 from two FP4s + * + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + @param b FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); +/** @brief Initialise FP8 from single FP4 + * + Imaginary part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + */ +extern void FP8_from_FP4(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP4 + * + real part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4H(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP + * + @param x FP8 instance to be initialised + @param a FP to form real part of FP8 + */ +extern void FP8_from_FP(FP8 *x, FP *a); + +/** @brief Copy FP8 to another FP8 + * + @param x FP8 instance, on exit = y + @param y FP8 instance to be copied + */ +extern void FP8_copy(FP8 *x, FP8 *y); + +/** @brief Set FP8 to zero + * + @param x FP8 instance to be set to zero + */ +extern void FP8_zero(FP8 *x); +/** @brief Set FP8 to unity + * + @param x FP8 instance to be set to one + */ +extern void FP8_one(FP8 *x); + +/** @brief Sign of FP8 + * + @param x FP8 instance + @return "sign" of FP8 + */ +extern int FP8_sign(FP8 *x); + +/** @brief Negation of FP8 + * + @param x FP8 instance, on exit = -y + @param y FP8 instance + */ +extern void FP8_neg(FP8 *x, FP8 *y); +/** @brief Conjugation of FP8 + * + If y=(a,b) on exit x=(a,-b) + @param x FP8 instance, on exit = conj(y) + @param y FP8 instance + */ +extern void FP8_conj(FP8 *x, FP8 *y); +/** @brief Negative conjugation of FP8 + * + If y=(a,b) on exit x=(-a,b) + @param x FP8 instance, on exit = -conj(y) + @param y FP8 instance + */ +extern void FP8_nconj(FP8 *x, FP8 *y); +/** @brief addition of two FP8s + * + @param x FP8 instance, on exit = y+z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); +/** @brief subtraction of two FP8s + * + @param x FP8 instance, on exit = y-z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); +/** @brief Multiplication of an FP8 by an FP4 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP4 multiplier + */ +extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); + +/** @brief Multiplication of an FP8 by an FP2 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP2 multiplier + */ +extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); + +/** @brief Multiplication of an FP8 by an FP + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP multiplier + */ +extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); + + + +/** @brief Multiplication of an FP8 by a small integer + * + @param x FP8 instance, on exit = y*i + @param y FP8 instance + @param i an integer + */ +extern void FP8_imul(FP8 *x, FP8 *y, int i); +/** @brief Squaring an FP8 + * + @param x FP8 instance, on exit = y^2 + @param y FP8 instance + */ +extern void FP8_sqr(FP8 *x, FP8 *y); +/** @brief Multiplication of two FP8s + * + @param x FP8 instance, on exit = y*z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); +/** @brief Inverting an FP8 + * + @param x FP8 instance, on exit = 1/y + @param y FP8 instance + @param h optional input hint + */ +extern void FP8_inv(FP8 *x, FP8 *y, FP *h); +/** @brief Formats and outputs an FP8 to the console + * + @param x FP8 instance to be printed + */ +extern void FP8_output(FP8 *x); +/** @brief Divide an FP8 by 2 + * + @param x FP8 instance, on exit = y/2 + @param y FP8 instance + */ +extern void FP8_div2(FP8 *x, FP8 *y); + +/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) + * + @param x FP8 instance to be printed + */ +extern void FP8_rawoutput(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP8_times_i(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP8 instance, on exit = (1+sqrt(-1)*x + */ +extern void FP8_times_i2(FP8 *x); + +/** @brief Normalises the components of an FP8 + * + @param x FP8 instance to be normalised + */ +extern void FP8_norm(FP8 *x); +/** @brief Reduces all components of possibly unreduced FP8 mod Modulus + * + @param x FP8 instance, on exit reduced mod Modulus + */ +extern void FP8_reduce(FP8 *x); +/** @brief Raises an FP8 to the power of a BIG + * + @param x FP8 instance, on exit = y^b + @param y FP8 instance + @param b BIG number + */ +extern void FP8_pow(FP8 *x, FP8 *y, B288_60::BIG b); +/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius + * + @param x FP8 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP8_frob(FP8 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP8 instance, on exit = w*x-conj(x)*y+z + @param w FP8 instance + @param x FP8 instance + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP8 instance, on exit = x^2-2*conj(x) + @param x FP8 instance + */ +extern void FP8_xtr_D(FP8 *r, FP8 *x); +/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP8 instance, on exit = trace(w^b) + @param x FP8 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP8_xtr_pow(FP8 *r, FP8 *x, B288_60::BIG b); +/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP8 instance, on exit = trace(c^a.d^b) + @param c FP8 instance, trace of an FP12 + @param d FP8 instance, trace of an FP12 + @param e FP8 instance, trace of an FP12 + @param f FP8 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B288_60::BIG a, B288_60::BIG b); + +/** @brief Test FP8 for QR + * + Square root + @param r FP8 instance + @param h optional generated hint + @return 1 r is a QR, otherwise 0 + */ +extern int FP8_qr(FP8 *r, FP *h); + + +/** @brief Calculate square root of an FP8 + * + Square root + @param r FP8 instance, on exit = sqrt(x) + @param x FP8 instance + @param h optional input hint + */ +extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); + + +/** @brief Conditional copy of FP8 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP8 instance, set to y if s!=0 + @param y another FP8 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP8_cmove(FP8 *x, FP8 *y, int s); + + +/** @brief Divide FP8 number by QNR + * + Divide FP8 by the QNR + @param x FP8 instance + */ +extern void FP8_div_i(FP8 *x); + +/** @brief Generate random FP8 + * + @param x random FP8 number + @param rng random number generator + */ +extern void FP8_rand(FP8 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48556.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48556.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48556.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48556.h index c6d00fe..30eda14 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48556.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48556.h @@ -1,365 +1,365 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP8_BLS48556_H -#define FP8_BLS48556_H - -#include "fp4_BLS48556.h" -#include "config_curve_BLS48556.h" - -using namespace core; - -namespace BLS48556 { - -/** - @brief FP8 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP4 a; /**< real part of FP8 */ - FP4 b; /**< imaginary part of FP8 */ -} FP8; - - -/* FP8 prototypes */ -/** @brief Tests for FP8 equal to zero - * - @param x FP8 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP8_iszilch(FP8 *x); - -/** @brief Tests for lexically larger - * - @param x FP8 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP8_islarger(FP8 *x); - -/** @brief Serialize in FP8 - * - @param b buffer for output - @param x FP8 number to be serialized - */ -extern void FP8_toBytes(char *b,FP8 *x); -/** @brief Serialize out FP8 - * - @param x FP8 number to be serialized - @param b buffer for input - */ -extern void FP8_fromBytes(FP8 *x,char *b); - - -/** @brief Tests for FP8 equal to unity - * - @param x FP8 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP8_isunity(FP8 *x); -/** @brief Tests for equality of two FP8s - * - @param x FP8 instance to be compared - @param y FP8 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP8_equals(FP8 *x, FP8 *y); -/** @brief Tests for FP8 having only a real part and no imaginary part - * - @param x FP8 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP8_isreal(FP8 *x); -/** @brief Initialise FP8 from two FP4s - * - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - @param b FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); -/** @brief Initialise FP8 from single FP4 - * - Imaginary part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - */ -extern void FP8_from_FP4(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP4 - * - real part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4H(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP - * - @param x FP8 instance to be initialised - @param a FP to form real part of FP8 - */ -extern void FP8_from_FP(FP8 *x, FP *a); - -/** @brief Copy FP8 to another FP8 - * - @param x FP8 instance, on exit = y - @param y FP8 instance to be copied - */ -extern void FP8_copy(FP8 *x, FP8 *y); - -/** @brief Set FP8 to zero - * - @param x FP8 instance to be set to zero - */ -extern void FP8_zero(FP8 *x); -/** @brief Set FP8 to unity - * - @param x FP8 instance to be set to one - */ -extern void FP8_one(FP8 *x); - -/** @brief Sign of FP8 - * - @param x FP8 instance - @return "sign" of FP8 - */ -extern int FP8_sign(FP8 *x); - -/** @brief Negation of FP8 - * - @param x FP8 instance, on exit = -y - @param y FP8 instance - */ -extern void FP8_neg(FP8 *x, FP8 *y); -/** @brief Conjugation of FP8 - * - If y=(a,b) on exit x=(a,-b) - @param x FP8 instance, on exit = conj(y) - @param y FP8 instance - */ -extern void FP8_conj(FP8 *x, FP8 *y); -/** @brief Negative conjugation of FP8 - * - If y=(a,b) on exit x=(-a,b) - @param x FP8 instance, on exit = -conj(y) - @param y FP8 instance - */ -extern void FP8_nconj(FP8 *x, FP8 *y); -/** @brief addition of two FP8s - * - @param x FP8 instance, on exit = y+z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); -/** @brief subtraction of two FP8s - * - @param x FP8 instance, on exit = y-z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); -/** @brief Multiplication of an FP8 by an FP4 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP4 multiplier - */ -extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); - -/** @brief Multiplication of an FP8 by an FP2 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP2 multiplier - */ -extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); - -/** @brief Multiplication of an FP8 by an FP - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP multiplier - */ -extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); - - - -/** @brief Multiplication of an FP8 by a small integer - * - @param x FP8 instance, on exit = y*i - @param y FP8 instance - @param i an integer - */ -extern void FP8_imul(FP8 *x, FP8 *y, int i); -/** @brief Squaring an FP8 - * - @param x FP8 instance, on exit = y^2 - @param y FP8 instance - */ -extern void FP8_sqr(FP8 *x, FP8 *y); -/** @brief Multiplication of two FP8s - * - @param x FP8 instance, on exit = y*z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); -/** @brief Inverting an FP8 - * - @param x FP8 instance, on exit = 1/y - @param y FP8 instance - @param h optional input hint - */ -extern void FP8_inv(FP8 *x, FP8 *y, FP *h); -/** @brief Formats and outputs an FP8 to the console - * - @param x FP8 instance to be printed - */ -extern void FP8_output(FP8 *x); -/** @brief Divide an FP8 by 2 - * - @param x FP8 instance, on exit = y/2 - @param y FP8 instance - */ -extern void FP8_div2(FP8 *x, FP8 *y); - -/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) - * - @param x FP8 instance to be printed - */ -extern void FP8_rawoutput(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP8_times_i(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP8 instance, on exit = (1+sqrt(-1)*x - */ -extern void FP8_times_i2(FP8 *x); - -/** @brief Normalises the components of an FP8 - * - @param x FP8 instance to be normalised - */ -extern void FP8_norm(FP8 *x); -/** @brief Reduces all components of possibly unreduced FP8 mod Modulus - * - @param x FP8 instance, on exit reduced mod Modulus - */ -extern void FP8_reduce(FP8 *x); -/** @brief Raises an FP8 to the power of a BIG - * - @param x FP8 instance, on exit = y^b - @param y FP8 instance - @param b BIG number - */ -extern void FP8_pow(FP8 *x, FP8 *y, B560_58::BIG b); -/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius - * - @param x FP8 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP8_frob(FP8 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP8 instance, on exit = w*x-conj(x)*y+z - @param w FP8 instance - @param x FP8 instance - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP8 instance, on exit = x^2-2*conj(x) - @param x FP8 instance - */ -extern void FP8_xtr_D(FP8 *r, FP8 *x); -/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP8 instance, on exit = trace(w^b) - @param x FP8 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP8_xtr_pow(FP8 *r, FP8 *x, B560_58::BIG b); -/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP8 instance, on exit = trace(c^a.d^b) - @param c FP8 instance, trace of an FP12 - @param d FP8 instance, trace of an FP12 - @param e FP8 instance, trace of an FP12 - @param f FP8 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B560_58::BIG a, B560_58::BIG b); - -/** @brief Test FP8 for QR - * - Square root - @param r FP8 instance - @param h optional generated hint - @return 1 r is a QR, otherwise 0 - */ -extern int FP8_qr(FP8 *r, FP *h); - - -/** @brief Calculate square root of an FP8 - * - Square root - @param r FP8 instance, on exit = sqrt(x) - @param x FP8 instance - @param h optional input hint - */ -extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); - - -/** @brief Conditional copy of FP8 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP8 instance, set to y if s!=0 - @param y another FP8 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP8_cmove(FP8 *x, FP8 *y, int s); - - -/** @brief Divide FP8 number by QNR - * - Divide FP8 by the QNR - @param x FP8 instance - */ -extern void FP8_div_i(FP8 *x); - -/** @brief Generate random FP8 - * - @param x random FP8 number - @param rng random number generator - */ -extern void FP8_rand(FP8 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP8_BLS48556_H +#define FP8_BLS48556_H + +#include "fp4_BLS48556.h" +#include "config_curve_BLS48556.h" + +using namespace core; + +namespace BLS48556 { + +/** + @brief FP8 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP4 a; /**< real part of FP8 */ + FP4 b; /**< imaginary part of FP8 */ +} FP8; + + +/* FP8 prototypes */ +/** @brief Tests for FP8 equal to zero + * + @param x FP8 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP8_iszilch(FP8 *x); + +/** @brief Tests for lexically larger + * + @param x FP8 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP8_islarger(FP8 *x); + +/** @brief Serialize in FP8 + * + @param b buffer for output + @param x FP8 number to be serialized + */ +extern void FP8_toBytes(char *b,FP8 *x); +/** @brief Serialize out FP8 + * + @param x FP8 number to be serialized + @param b buffer for input + */ +extern void FP8_fromBytes(FP8 *x,char *b); + + +/** @brief Tests for FP8 equal to unity + * + @param x FP8 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP8_isunity(FP8 *x); +/** @brief Tests for equality of two FP8s + * + @param x FP8 instance to be compared + @param y FP8 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP8_equals(FP8 *x, FP8 *y); +/** @brief Tests for FP8 having only a real part and no imaginary part + * + @param x FP8 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP8_isreal(FP8 *x); +/** @brief Initialise FP8 from two FP4s + * + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + @param b FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); +/** @brief Initialise FP8 from single FP4 + * + Imaginary part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + */ +extern void FP8_from_FP4(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP4 + * + real part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4H(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP + * + @param x FP8 instance to be initialised + @param a FP to form real part of FP8 + */ +extern void FP8_from_FP(FP8 *x, FP *a); + +/** @brief Copy FP8 to another FP8 + * + @param x FP8 instance, on exit = y + @param y FP8 instance to be copied + */ +extern void FP8_copy(FP8 *x, FP8 *y); + +/** @brief Set FP8 to zero + * + @param x FP8 instance to be set to zero + */ +extern void FP8_zero(FP8 *x); +/** @brief Set FP8 to unity + * + @param x FP8 instance to be set to one + */ +extern void FP8_one(FP8 *x); + +/** @brief Sign of FP8 + * + @param x FP8 instance + @return "sign" of FP8 + */ +extern int FP8_sign(FP8 *x); + +/** @brief Negation of FP8 + * + @param x FP8 instance, on exit = -y + @param y FP8 instance + */ +extern void FP8_neg(FP8 *x, FP8 *y); +/** @brief Conjugation of FP8 + * + If y=(a,b) on exit x=(a,-b) + @param x FP8 instance, on exit = conj(y) + @param y FP8 instance + */ +extern void FP8_conj(FP8 *x, FP8 *y); +/** @brief Negative conjugation of FP8 + * + If y=(a,b) on exit x=(-a,b) + @param x FP8 instance, on exit = -conj(y) + @param y FP8 instance + */ +extern void FP8_nconj(FP8 *x, FP8 *y); +/** @brief addition of two FP8s + * + @param x FP8 instance, on exit = y+z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); +/** @brief subtraction of two FP8s + * + @param x FP8 instance, on exit = y-z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); +/** @brief Multiplication of an FP8 by an FP4 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP4 multiplier + */ +extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); + +/** @brief Multiplication of an FP8 by an FP2 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP2 multiplier + */ +extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); + +/** @brief Multiplication of an FP8 by an FP + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP multiplier + */ +extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); + + + +/** @brief Multiplication of an FP8 by a small integer + * + @param x FP8 instance, on exit = y*i + @param y FP8 instance + @param i an integer + */ +extern void FP8_imul(FP8 *x, FP8 *y, int i); +/** @brief Squaring an FP8 + * + @param x FP8 instance, on exit = y^2 + @param y FP8 instance + */ +extern void FP8_sqr(FP8 *x, FP8 *y); +/** @brief Multiplication of two FP8s + * + @param x FP8 instance, on exit = y*z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); +/** @brief Inverting an FP8 + * + @param x FP8 instance, on exit = 1/y + @param y FP8 instance + @param h optional input hint + */ +extern void FP8_inv(FP8 *x, FP8 *y, FP *h); +/** @brief Formats and outputs an FP8 to the console + * + @param x FP8 instance to be printed + */ +extern void FP8_output(FP8 *x); +/** @brief Divide an FP8 by 2 + * + @param x FP8 instance, on exit = y/2 + @param y FP8 instance + */ +extern void FP8_div2(FP8 *x, FP8 *y); + +/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) + * + @param x FP8 instance to be printed + */ +extern void FP8_rawoutput(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP8_times_i(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP8 instance, on exit = (1+sqrt(-1)*x + */ +extern void FP8_times_i2(FP8 *x); + +/** @brief Normalises the components of an FP8 + * + @param x FP8 instance to be normalised + */ +extern void FP8_norm(FP8 *x); +/** @brief Reduces all components of possibly unreduced FP8 mod Modulus + * + @param x FP8 instance, on exit reduced mod Modulus + */ +extern void FP8_reduce(FP8 *x); +/** @brief Raises an FP8 to the power of a BIG + * + @param x FP8 instance, on exit = y^b + @param y FP8 instance + @param b BIG number + */ +extern void FP8_pow(FP8 *x, FP8 *y, B560_58::BIG b); +/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius + * + @param x FP8 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP8_frob(FP8 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP8 instance, on exit = w*x-conj(x)*y+z + @param w FP8 instance + @param x FP8 instance + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP8 instance, on exit = x^2-2*conj(x) + @param x FP8 instance + */ +extern void FP8_xtr_D(FP8 *r, FP8 *x); +/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP8 instance, on exit = trace(w^b) + @param x FP8 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP8_xtr_pow(FP8 *r, FP8 *x, B560_58::BIG b); +/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP8 instance, on exit = trace(c^a.d^b) + @param c FP8 instance, trace of an FP12 + @param d FP8 instance, trace of an FP12 + @param e FP8 instance, trace of an FP12 + @param f FP8 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B560_58::BIG a, B560_58::BIG b); + +/** @brief Test FP8 for QR + * + Square root + @param r FP8 instance + @param h optional generated hint + @return 1 r is a QR, otherwise 0 + */ +extern int FP8_qr(FP8 *r, FP *h); + + +/** @brief Calculate square root of an FP8 + * + Square root + @param r FP8 instance, on exit = sqrt(x) + @param x FP8 instance + @param h optional input hint + */ +extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); + + +/** @brief Conditional copy of FP8 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP8 instance, set to y if s!=0 + @param y another FP8 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP8_cmove(FP8 *x, FP8 *y, int s); + + +/** @brief Divide FP8 number by QNR + * + Divide FP8 by the QNR + @param x FP8 instance + */ +extern void FP8_div_i(FP8 *x); + +/** @brief Generate random FP8 + * + @param x random FP8 number + @param rng random number generator + */ +extern void FP8_rand(FP8 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48581.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48581.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48581.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48581.h index 91c6ff6..3a56ea4 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp8_BLS48581.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp8_BLS48581.h @@ -1,365 +1,365 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP8_BLS48581_H -#define FP8_BLS48581_H - -#include "fp4_BLS48581.h" -#include "config_curve_BLS48581.h" - -using namespace core; - -namespace BLS48581 { - -/** - @brief FP8 Structure - towered over two FP4 -*/ - -typedef struct -{ - FP4 a; /**< real part of FP8 */ - FP4 b; /**< imaginary part of FP8 */ -} FP8; - - -/* FP8 prototypes */ -/** @brief Tests for FP8 equal to zero - * - @param x FP8 number to be tested - @return 1 if zero, else returns 0 - */ -extern int FP8_iszilch(FP8 *x); - -/** @brief Tests for lexically larger - * - @param x FP8 number to be tested if larger than -x - @return 1 if larger, else returns 0 - */ -extern int FP8_islarger(FP8 *x); - -/** @brief Serialize in FP8 - * - @param b buffer for output - @param x FP8 number to be serialized - */ -extern void FP8_toBytes(char *b,FP8 *x); -/** @brief Serialize out FP8 - * - @param x FP8 number to be serialized - @param b buffer for input - */ -extern void FP8_fromBytes(FP8 *x,char *b); - - -/** @brief Tests for FP8 equal to unity - * - @param x FP8 number to be tested - @return 1 if unity, else returns 0 - */ -extern int FP8_isunity(FP8 *x); -/** @brief Tests for equality of two FP8s - * - @param x FP8 instance to be compared - @param y FP8 instance to be compared - @return 1 if x=y, else returns 0 - */ -extern int FP8_equals(FP8 *x, FP8 *y); -/** @brief Tests for FP8 having only a real part and no imaginary part - * - @param x FP8 number to be tested - @return 1 if real, else returns 0 - */ -extern int FP8_isreal(FP8 *x); -/** @brief Initialise FP8 from two FP4s - * - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - @param b FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); -/** @brief Initialise FP8 from single FP4 - * - Imaginary part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form real part of FP8 - */ -extern void FP8_from_FP4(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP4 - * - real part is set to zero - @param x FP8 instance to be initialised - @param a FP4 to form imaginary part of FP8 - */ -extern void FP8_from_FP4H(FP8 *x, FP4 *a); - -/** @brief Initialise FP8 from single FP - * - @param x FP8 instance to be initialised - @param a FP to form real part of FP8 - */ -extern void FP8_from_FP(FP8 *x, FP *a); - -/** @brief Copy FP8 to another FP8 - * - @param x FP8 instance, on exit = y - @param y FP8 instance to be copied - */ -extern void FP8_copy(FP8 *x, FP8 *y); - -/** @brief Set FP8 to zero - * - @param x FP8 instance to be set to zero - */ -extern void FP8_zero(FP8 *x); -/** @brief Set FP8 to unity - * - @param x FP8 instance to be set to one - */ -extern void FP8_one(FP8 *x); - -/** @brief Sign of FP8 - * - @param x FP8 instance - @return "sign" of FP8 - */ -extern int FP8_sign(FP8 *x); - -/** @brief Negation of FP8 - * - @param x FP8 instance, on exit = -y - @param y FP8 instance - */ -extern void FP8_neg(FP8 *x, FP8 *y); -/** @brief Conjugation of FP8 - * - If y=(a,b) on exit x=(a,-b) - @param x FP8 instance, on exit = conj(y) - @param y FP8 instance - */ -extern void FP8_conj(FP8 *x, FP8 *y); -/** @brief Negative conjugation of FP8 - * - If y=(a,b) on exit x=(-a,b) - @param x FP8 instance, on exit = -conj(y) - @param y FP8 instance - */ -extern void FP8_nconj(FP8 *x, FP8 *y); -/** @brief addition of two FP8s - * - @param x FP8 instance, on exit = y+z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); -/** @brief subtraction of two FP8s - * - @param x FP8 instance, on exit = y-z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); -/** @brief Multiplication of an FP8 by an FP4 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP4 multiplier - */ -extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); - -/** @brief Multiplication of an FP8 by an FP2 - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP2 multiplier - */ -extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); - -/** @brief Multiplication of an FP8 by an FP - * - @param x FP8 instance, on exit = y*a - @param y FP8 instance - @param a FP multiplier - */ -extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); - - - -/** @brief Multiplication of an FP8 by a small integer - * - @param x FP8 instance, on exit = y*i - @param y FP8 instance - @param i an integer - */ -extern void FP8_imul(FP8 *x, FP8 *y, int i); -/** @brief Squaring an FP8 - * - @param x FP8 instance, on exit = y^2 - @param y FP8 instance - */ -extern void FP8_sqr(FP8 *x, FP8 *y); -/** @brief Multiplication of two FP8s - * - @param x FP8 instance, on exit = y*z - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); -/** @brief Inverting an FP8 - * - @param x FP8 instance, on exit = 1/y - @param y FP8 instance - @param h optional input hint - */ -extern void FP8_inv(FP8 *x, FP8 *y, FP *h); -/** @brief Formats and outputs an FP8 to the console - * - @param x FP8 instance to be printed - */ -extern void FP8_output(FP8 *x); -/** @brief Divide an FP8 by 2 - * - @param x FP8 instance, on exit = y/2 - @param y FP8 instance - */ -extern void FP8_div2(FP8 *x, FP8 *y); - -/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) - * - @param x FP8 instance to be printed - */ -extern void FP8_rawoutput(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) - * - @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x - */ -extern void FP8_times_i(FP8 *x); -/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) - * - @param x FP8 instance, on exit = (1+sqrt(-1)*x - */ -extern void FP8_times_i2(FP8 *x); - -/** @brief Normalises the components of an FP8 - * - @param x FP8 instance to be normalised - */ -extern void FP8_norm(FP8 *x); -/** @brief Reduces all components of possibly unreduced FP8 mod Modulus - * - @param x FP8 instance, on exit reduced mod Modulus - */ -extern void FP8_reduce(FP8 *x); -/** @brief Raises an FP8 to the power of a BIG - * - @param x FP8 instance, on exit = y^b - @param y FP8 instance - @param b BIG number - */ -extern void FP8_pow(FP8 *x, FP8 *y, B584_60::BIG b); -/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius - * - @param x FP8 instance, on exit = x^p - @param f FP2 precalculated Frobenius constant - */ -extern void FP8_frob(FP8 *x, FP2 *f); -/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z - * - @param r FP8 instance, on exit = w*x-conj(x)*y+z - @param w FP8 instance - @param x FP8 instance - @param y FP8 instance - @param z FP8 instance - */ -extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); -/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) - * - @param r FP8 instance, on exit = x^2-2*conj(x) - @param x FP8 instance - */ -extern void FP8_xtr_D(FP8 *r, FP8 *x); -/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number - * - XTR single exponentiation - @param r FP8 instance, on exit = trace(w^b) - @param x FP8 instance, trace of an FP12 w - @param b BIG number - */ -extern void FP8_xtr_pow(FP8 *r, FP8 *x, B584_60::BIG b); -/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s - * - XTR double exponentiation - Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) - @param r FP8 instance, on exit = trace(c^a.d^b) - @param c FP8 instance, trace of an FP12 - @param d FP8 instance, trace of an FP12 - @param e FP8 instance, trace of an FP12 - @param f FP8 instance, trace of an FP12 - @param a BIG number - @param b BIG number - */ -extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B584_60::BIG a, B584_60::BIG b); - -/** @brief Test FP8 for QR - * - Square root - @param r FP8 instance - @param h optional generated hint - @return 1 r is a QR, otherwise 0 - */ -extern int FP8_qr(FP8 *r, FP *h); - - -/** @brief Calculate square root of an FP8 - * - Square root - @param r FP8 instance, on exit = sqrt(x) - @param x FP8 instance - @param h optional input hint - */ -extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); - - -/** @brief Conditional copy of FP8 number - * - Conditionally copies second parameter to the first (without branching) - @param x FP8 instance, set to y if s!=0 - @param y another FP8 instance - @param s copy only takes place if not equal to 0 - */ -extern void FP8_cmove(FP8 *x, FP8 *y, int s); - - -/** @brief Divide FP8 number by QNR - * - Divide FP8 by the QNR - @param x FP8 instance - */ -extern void FP8_div_i(FP8 *x); - -/** @brief Generate random FP8 - * - @param x random FP8 number - @param rng random number generator - */ -extern void FP8_rand(FP8 *x, core::csprng *rng); -} - -#endif - +/* + * Copyright (c) 2012-2020 MIRACL UK Ltd. + * + * This file is part of MIRACL Core + * (see https://github.com/miracl/core). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FP8_BLS48581_H +#define FP8_BLS48581_H + +#include "fp4_BLS48581.h" +#include "config_curve_BLS48581.h" + +using namespace core; + +namespace BLS48581 { + +/** + @brief FP8 Structure - towered over two FP4 +*/ + +typedef struct +{ + FP4 a; /**< real part of FP8 */ + FP4 b; /**< imaginary part of FP8 */ +} FP8; + + +/* FP8 prototypes */ +/** @brief Tests for FP8 equal to zero + * + @param x FP8 number to be tested + @return 1 if zero, else returns 0 + */ +extern int FP8_iszilch(FP8 *x); + +/** @brief Tests for lexically larger + * + @param x FP8 number to be tested if larger than -x + @return 1 if larger, else returns 0 + */ +extern int FP8_islarger(FP8 *x); + +/** @brief Serialize in FP8 + * + @param b buffer for output + @param x FP8 number to be serialized + */ +extern void FP8_toBytes(char *b,FP8 *x); +/** @brief Serialize out FP8 + * + @param x FP8 number to be serialized + @param b buffer for input + */ +extern void FP8_fromBytes(FP8 *x,char *b); + + +/** @brief Tests for FP8 equal to unity + * + @param x FP8 number to be tested + @return 1 if unity, else returns 0 + */ +extern int FP8_isunity(FP8 *x); +/** @brief Tests for equality of two FP8s + * + @param x FP8 instance to be compared + @param y FP8 instance to be compared + @return 1 if x=y, else returns 0 + */ +extern int FP8_equals(FP8 *x, FP8 *y); +/** @brief Tests for FP8 having only a real part and no imaginary part + * + @param x FP8 number to be tested + @return 1 if real, else returns 0 + */ +extern int FP8_isreal(FP8 *x); +/** @brief Initialise FP8 from two FP4s + * + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + @param b FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4s(FP8 *x, FP4 *a, FP4 *b); +/** @brief Initialise FP8 from single FP4 + * + Imaginary part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form real part of FP8 + */ +extern void FP8_from_FP4(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP4 + * + real part is set to zero + @param x FP8 instance to be initialised + @param a FP4 to form imaginary part of FP8 + */ +extern void FP8_from_FP4H(FP8 *x, FP4 *a); + +/** @brief Initialise FP8 from single FP + * + @param x FP8 instance to be initialised + @param a FP to form real part of FP8 + */ +extern void FP8_from_FP(FP8 *x, FP *a); + +/** @brief Copy FP8 to another FP8 + * + @param x FP8 instance, on exit = y + @param y FP8 instance to be copied + */ +extern void FP8_copy(FP8 *x, FP8 *y); + +/** @brief Set FP8 to zero + * + @param x FP8 instance to be set to zero + */ +extern void FP8_zero(FP8 *x); +/** @brief Set FP8 to unity + * + @param x FP8 instance to be set to one + */ +extern void FP8_one(FP8 *x); + +/** @brief Sign of FP8 + * + @param x FP8 instance + @return "sign" of FP8 + */ +extern int FP8_sign(FP8 *x); + +/** @brief Negation of FP8 + * + @param x FP8 instance, on exit = -y + @param y FP8 instance + */ +extern void FP8_neg(FP8 *x, FP8 *y); +/** @brief Conjugation of FP8 + * + If y=(a,b) on exit x=(a,-b) + @param x FP8 instance, on exit = conj(y) + @param y FP8 instance + */ +extern void FP8_conj(FP8 *x, FP8 *y); +/** @brief Negative conjugation of FP8 + * + If y=(a,b) on exit x=(-a,b) + @param x FP8 instance, on exit = -conj(y) + @param y FP8 instance + */ +extern void FP8_nconj(FP8 *x, FP8 *y); +/** @brief addition of two FP8s + * + @param x FP8 instance, on exit = y+z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_add(FP8 *x, FP8 *y, FP8 *z); +/** @brief subtraction of two FP8s + * + @param x FP8 instance, on exit = y-z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_sub(FP8 *x, FP8 *y, FP8 *z); +/** @brief Multiplication of an FP8 by an FP4 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP4 multiplier + */ +extern void FP8_pmul(FP8 *x, FP8 *y, FP4 *a); + +/** @brief Multiplication of an FP8 by an FP2 + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP2 multiplier + */ +extern void FP8_qmul(FP8 *x, FP8 *y, FP2 *a); + +/** @brief Multiplication of an FP8 by an FP + * + @param x FP8 instance, on exit = y*a + @param y FP8 instance + @param a FP multiplier + */ +extern void FP8_tmul(FP8 *x, FP8 *y, FP *a); + + + +/** @brief Multiplication of an FP8 by a small integer + * + @param x FP8 instance, on exit = y*i + @param y FP8 instance + @param i an integer + */ +extern void FP8_imul(FP8 *x, FP8 *y, int i); +/** @brief Squaring an FP8 + * + @param x FP8 instance, on exit = y^2 + @param y FP8 instance + */ +extern void FP8_sqr(FP8 *x, FP8 *y); +/** @brief Multiplication of two FP8s + * + @param x FP8 instance, on exit = y*z + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_mul(FP8 *x, FP8 *y, FP8 *z); +/** @brief Inverting an FP8 + * + @param x FP8 instance, on exit = 1/y + @param y FP8 instance + @param h optional input hint + */ +extern void FP8_inv(FP8 *x, FP8 *y, FP *h); +/** @brief Formats and outputs an FP8 to the console + * + @param x FP8 instance to be printed + */ +extern void FP8_output(FP8 *x); +/** @brief Divide an FP8 by 2 + * + @param x FP8 instance, on exit = y/2 + @param y FP8 instance + */ +extern void FP8_div2(FP8 *x, FP8 *y); + +/** @brief Formats and outputs an FP8 to the console in raw form (for debugging) + * + @param x FP8 instance to be printed + */ +extern void FP8_rawoutput(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1)) + * + @param x FP8 instance, on exit = sqrt(1+sqrt(-1)*x + */ +extern void FP8_times_i(FP8 *x); +/** @brief multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1)) + * + @param x FP8 instance, on exit = (1+sqrt(-1)*x + */ +extern void FP8_times_i2(FP8 *x); + +/** @brief Normalises the components of an FP8 + * + @param x FP8 instance to be normalised + */ +extern void FP8_norm(FP8 *x); +/** @brief Reduces all components of possibly unreduced FP8 mod Modulus + * + @param x FP8 instance, on exit reduced mod Modulus + */ +extern void FP8_reduce(FP8 *x); +/** @brief Raises an FP8 to the power of a BIG + * + @param x FP8 instance, on exit = y^b + @param y FP8 instance + @param b BIG number + */ +extern void FP8_pow(FP8 *x, FP8 *y, B584_60::BIG b); +/** @brief Raises an FP8 to the power of the internal modulus p, using the Frobenius + * + @param x FP8 instance, on exit = x^p + @param f FP2 precalculated Frobenius constant + */ +extern void FP8_frob(FP8 *x, FP2 *f); +/** @brief Calculates the XTR addition function r=w*x-conj(x)*y+z + * + @param r FP8 instance, on exit = w*x-conj(x)*y+z + @param w FP8 instance + @param x FP8 instance + @param y FP8 instance + @param z FP8 instance + */ +extern void FP8_xtr_A(FP8 *r, FP8 *w, FP8 *x, FP8 *y, FP8 *z); +/** @brief Calculates the XTR doubling function r=x^2-2*conj(x) + * + @param r FP8 instance, on exit = x^2-2*conj(x) + @param x FP8 instance + */ +extern void FP8_xtr_D(FP8 *r, FP8 *x); +/** @brief Calculates FP8 trace of an FP12 raised to the power of a BIG number + * + XTR single exponentiation + @param r FP8 instance, on exit = trace(w^b) + @param x FP8 instance, trace of an FP12 w + @param b BIG number + */ +extern void FP8_xtr_pow(FP8 *r, FP8 *x, B584_60::BIG b); +/** @brief Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP12s + * + XTR double exponentiation + Assumes c=tr(x^m), d=tr(x^n), e=tr(x^(m-n)), f=tr(x^(m-2n)) + @param r FP8 instance, on exit = trace(c^a.d^b) + @param c FP8 instance, trace of an FP12 + @param d FP8 instance, trace of an FP12 + @param e FP8 instance, trace of an FP12 + @param f FP8 instance, trace of an FP12 + @param a BIG number + @param b BIG number + */ +extern void FP8_xtr_pow2(FP8 *r, FP8 *c, FP8 *d, FP8 *e, FP8 *f, B584_60::BIG a, B584_60::BIG b); + +/** @brief Test FP8 for QR + * + Square root + @param r FP8 instance + @param h optional generated hint + @return 1 r is a QR, otherwise 0 + */ +extern int FP8_qr(FP8 *r, FP *h); + + +/** @brief Calculate square root of an FP8 + * + Square root + @param r FP8 instance, on exit = sqrt(x) + @param x FP8 instance + @param h optional input hint + */ +extern void FP8_sqrt(FP8 *r, FP8 *x, FP *h); + + +/** @brief Conditional copy of FP8 number + * + Conditionally copies second parameter to the first (without branching) + @param x FP8 instance, set to y if s!=0 + @param y another FP8 instance + @param s copy only takes place if not equal to 0 + */ +extern void FP8_cmove(FP8 *x, FP8 *y, int s); + + +/** @brief Divide FP8 number by QNR + * + Divide FP8 by the QNR + @param x FP8 instance + */ +extern void FP8_div_i(FP8 *x); + +/** @brief Generate random FP8 + * + @param x random FP8 number + @param rng random number generator + */ +extern void FP8_rand(FP8 *x, core::csprng *rng); +} + +#endif + diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp_ANSSI.h b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp_ANSSI.h similarity index 96% rename from TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp_ANSSI.h rename to TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp_ANSSI.h index 05670eb..f5731e5 100644 --- a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/includes/fp_ANSSI.h +++ b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-winx64-15-04-24/includes/fp_ANSSI.h @@ -1,334 +1,334 @@ -/* - * Copyright (c) 2012-2020 MIRACL UK Ltd. - * - * This file is part of MIRACL Core - * (see https://github.com/miracl/core). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FP_ANSSI_H -#define FP_ANSSI_H - -#include "big_B256_56.h" -#include "config_field_ANSSI.h" - -using namespace core; - -#define MODBITS_ANSSI MBITS_ANSSI -#define TBITS_ANSSI (MBITS_ANSSI%BASEBITS_B256_56) /**< Number of active bits in top word */ -#define TMASK_ANSSI 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 X2d*7#j`QH9f!iF(W_l9`cC-CI(AvzK delta 45559 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�Y8)lw{WC}4ZUx4Ku6+&qp-JEaJZ-> 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 xt7S2s{RjAMA(6(*8w@_83}72iaTQ diff --git a/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/core.a b/TIIGER_TLS/PQ_TIIGER_TLS/sal/miraclhgj/core.a deleted file mode 100644 index 533fa208b230ce338b3f829c09b514e13d025bc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7810726 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