From db87d068bc4ac68dc8fc12a5406ec7c30a6e30c3 Mon Sep 17 00:00:00 2001 From: rtw1x1 Date: Tue, 3 Feb 2026 11:11:37 +0000 Subject: [PATCH] XChaCha20-Poly1305 via libsodium --- README.md | 56 +- src/common/service.h | 1 - src/common/tables.h | 4 - src/db/ClientManager.cpp | 7 +- src/db/ClientManagerLogin.cpp | 13 - src/db/LoginData.cpp | 11 - src/db/LoginData.h | 4 - src/game/CMakeLists.txt | 14 +- src/game/ClientPackageCryptInfo.cpp | 225 - src/game/ClientPackageCryptInfo.h | 117 - src/game/SecureCipher.cpp | 294 + src/game/SecureCipher.h | 93 + src/game/char.cpp | 8 - src/game/cipher.cpp | 397 - src/game/cipher.h | 61 - src/game/db.cpp | 16 +- src/game/db.h | 2 +- src/game/desc.cpp | 266 +- src/game/desc.h | 36 +- src/game/desc_client.cpp | 3 - src/game/desc_manager.cpp | 71 +- src/game/desc_manager.h | 9 +- src/game/input.cpp | 43 +- src/game/input.h | 3 +- src/game/input_auth.cpp | 70 +- src/game/input_db.cpp | 16 - src/game/input_login.cpp | 60 - src/game/login_data.cpp | 11 - src/game/login_data.h | 4 - src/game/main.cpp | 9 - src/game/packet.h | 170 +- src/game/packet_info.cpp | 5 +- src/game/panama.cpp | 93 - src/game/panama.h | 7 - src/libthecore/crypt.h | 11 - src/libthecore/tea.cpp | 314 - src/libthecore/tea.s | 8682 --------------- vendor/CMakeLists.txt | 4 +- vendor/cryptopp/3way.cpp | 143 - vendor/cryptopp/3way.h | 63 - vendor/cryptopp/CMakeLists.txt | 1348 --- vendor/cryptopp/Doxyfile | 2429 ----- vendor/cryptopp/Filelist.txt | 650 -- vendor/cryptopp/GNUmakefile | 1795 ---- vendor/cryptopp/GNUmakefile-cross | 1060 -- vendor/cryptopp/History.txt | 544 - vendor/cryptopp/Install.txt | 241 - vendor/cryptopp/License.txt | 83 - vendor/cryptopp/Readme.txt | 436 - vendor/cryptopp/TestData/3desval.dat | 3 - vendor/cryptopp/TestData/3wayval.dat | 5 - vendor/cryptopp/TestData/aria.dat | 45 - vendor/cryptopp/TestData/camellia.dat | 45 - vendor/cryptopp/TestData/cast128v.dat | 11 - vendor/cryptopp/TestData/cast256v.dat | 11 - vendor/cryptopp/TestData/defdmac1.bin | 1 - vendor/cryptopp/TestData/defdmac2.bin | Bin 136 -> 0 bytes vendor/cryptopp/TestData/descert.dat | 171 - vendor/cryptopp/TestData/dh1024.dat | 1 - vendor/cryptopp/TestData/dh2048.dat | 1 - vendor/cryptopp/TestData/dlie1024.dat | 1 - vendor/cryptopp/TestData/dlie2048.dat | 1 - vendor/cryptopp/TestData/dsa1024.dat | 1 - vendor/cryptopp/TestData/dsa1024b.dat | 1 - vendor/cryptopp/TestData/dsa512.dat | 1 - vendor/cryptopp/TestData/ecies_p160.dat | 1 - vendor/cryptopp/TestData/ecies_t163.dat | 1 - vendor/cryptopp/TestData/ed25519.dat | 1 - vendor/cryptopp/TestData/ed25519v0.dat | 1 - vendor/cryptopp/TestData/ed25519v1.dat | 1 - vendor/cryptopp/TestData/elgc1024.dat | 1 - vendor/cryptopp/TestData/esig1023.dat | 1 - vendor/cryptopp/TestData/esig1536.dat | 1 - vendor/cryptopp/TestData/esig2046.dat | 1 - vendor/cryptopp/TestData/fhmqv160.dat | 1 - vendor/cryptopp/TestData/fhmqv256.dat | 1 - vendor/cryptopp/TestData/fhmqv384.dat | 1 - vendor/cryptopp/TestData/fhmqv512.dat | 1 - vendor/cryptopp/TestData/gostval.dat | 23 - vendor/cryptopp/TestData/hmqv160.dat | 1 - vendor/cryptopp/TestData/hmqv256.dat | 1 - vendor/cryptopp/TestData/hmqv384.dat | 1 - vendor/cryptopp/TestData/hmqv512.dat | 1 - vendor/cryptopp/TestData/ideaval.dat | 11 - vendor/cryptopp/TestData/luc1024.dat | 1 - vendor/cryptopp/TestData/luc2048.dat | 1 - vendor/cryptopp/TestData/lucc1024.dat | 1 - vendor/cryptopp/TestData/lucc512.dat | 1 - vendor/cryptopp/TestData/lucd1024.dat | 4 - vendor/cryptopp/TestData/lucd512.dat | 2 - vendor/cryptopp/TestData/lucs1024.dat | 1 - vendor/cryptopp/TestData/lucs512.dat | 1 - vendor/cryptopp/TestData/marsval.dat | 9 - vendor/cryptopp/TestData/mqv1024.dat | 1 - vendor/cryptopp/TestData/mqv2048.dat | 1 - vendor/cryptopp/TestData/nr1024.dat | 1 - vendor/cryptopp/TestData/nr2048.dat | 1 - vendor/cryptopp/TestData/rabi1024.dat | 1 - vendor/cryptopp/TestData/rabi2048.dat | 1 - vendor/cryptopp/TestData/rc2val.dat | 48 - vendor/cryptopp/TestData/rc5val.dat | 5 - vendor/cryptopp/TestData/rc6val.dat | 17 - vendor/cryptopp/TestData/rijndael.dat | 9 - vendor/cryptopp/TestData/rsa1024.dat | 32 - vendor/cryptopp/TestData/rsa2048.dat | 61 - vendor/cryptopp/TestData/rsa2048a.dat | 77 - vendor/cryptopp/TestData/rsa400pb.dat | 10 - vendor/cryptopp/TestData/rsa400pv.dat | 41 - vendor/cryptopp/TestData/rsa512a.dat | 35 - vendor/cryptopp/TestData/rw1024.dat | 1 - vendor/cryptopp/TestData/rw2048.dat | 1 - vendor/cryptopp/TestData/saferval.dat | 16 - vendor/cryptopp/TestData/serpentv.dat | 12 - vendor/cryptopp/TestData/shacal2v.dat | 14 - vendor/cryptopp/TestData/sharkval.dat | 7 - vendor/cryptopp/TestData/skipjack.dat | 1 - vendor/cryptopp/TestData/squareva.dat | 8 - vendor/cryptopp/TestData/twofishv.dat | 9 - vendor/cryptopp/TestData/usage.dat | 81 - vendor/cryptopp/TestData/x25519.dat | 1 - vendor/cryptopp/TestData/x25519v0.dat | 1 - vendor/cryptopp/TestData/x25519v1.dat | 1 - vendor/cryptopp/TestData/xtrdh171.dat | 3 - vendor/cryptopp/TestData/xtrdh342.dat | 5 - vendor/cryptopp/TestPrograms/test_32bit.cpp | 7 - vendor/cryptopp/TestPrograms/test_64bit.cpp | 7 - .../TestPrograms/test_arm_acle_header.cpp | 6 - vendor/cryptopp/TestPrograms/test_arm_aes.cpp | 14 - .../cryptopp/TestPrograms/test_arm_asimd.cpp | 11 - vendor/cryptopp/TestPrograms/test_arm_crc.cpp | 23 - .../cryptopp/TestPrograms/test_arm_neon.cpp | 11 - .../TestPrograms/test_arm_neon_header.cpp | 6 - .../cryptopp/TestPrograms/test_arm_pmull.cpp | 26 - .../cryptopp/TestPrograms/test_arm_sha1.cpp | 13 - .../cryptopp/TestPrograms/test_arm_sha256.cpp | 13 - .../cryptopp/TestPrograms/test_arm_sha3.cpp | 19 - .../cryptopp/TestPrograms/test_arm_sha512.cpp | 17 - vendor/cryptopp/TestPrograms/test_arm_sm3.cpp | 19 - vendor/cryptopp/TestPrograms/test_arm_sm4.cpp | 15 - .../cryptopp/TestPrograms/test_asm_mixed.cpp | 31 - vendor/cryptopp/TestPrograms/test_cxx.cpp | 6 - vendor/cryptopp/TestPrograms/test_cxx11.cpp | 11 - .../TestPrograms/test_cxx11_alignas.cpp | 5 - .../TestPrograms/test_cxx11_alignof.cpp | 6 - .../TestPrograms/test_cxx11_assert.cpp | 10 - .../TestPrograms/test_cxx11_atomic.cpp | 7 - .../cryptopp/TestPrograms/test_cxx11_auto.cpp | 5 - .../TestPrograms/test_cxx11_constexpr.cpp | 10 - .../TestPrograms/test_cxx11_deletefn.cpp | 10 - .../TestPrograms/test_cxx11_enumtype.cpp | 7 - .../TestPrograms/test_cxx11_initializer.cpp | 6 - .../TestPrograms/test_cxx11_lambda.cpp | 10 - .../TestPrograms/test_cxx11_noexcept.cpp | 29 - .../TestPrograms/test_cxx11_nullptr.cpp | 6 - .../TestPrograms/test_cxx11_staticinit.cpp | 11 - .../cryptopp/TestPrograms/test_cxx11_sync.cpp | 7 - .../TestPrograms/test_cxx11_vartemplates.cpp | 9 - vendor/cryptopp/TestPrograms/test_cxx14.cpp | 9 - vendor/cryptopp/TestPrograms/test_cxx17.cpp | 9 - .../TestPrograms/test_cxx17_assert.cpp | 10 - .../TestPrograms/test_cxx17_exceptions.cpp | 11 - .../TestPrograms/test_cxx98_exception.cpp | 12 - vendor/cryptopp/TestPrograms/test_glibc.cpp | 8 - vendor/cryptopp/TestPrograms/test_newlib.cpp | 8 - vendor/cryptopp/TestPrograms/test_ppc_aes.cpp | 26 - .../TestPrograms/test_ppc_altivec.cpp | 13 - .../cryptopp/TestPrograms/test_ppc_power7.cpp | 44 - .../cryptopp/TestPrograms/test_ppc_power8.cpp | 46 - .../cryptopp/TestPrograms/test_ppc_power9.cpp | 33 - vendor/cryptopp/TestPrograms/test_ppc_sha.cpp | 23 - .../cryptopp/TestPrograms/test_ppc_vmull.cpp | 17 - .../cryptopp/TestPrograms/test_pthreads.cpp | 15 - vendor/cryptopp/TestPrograms/test_x86_aes.cpp | 11 - vendor/cryptopp/TestPrograms/test_x86_avx.cpp | 7 - .../cryptopp/TestPrograms/test_x86_avx2.cpp | 9 - .../cryptopp/TestPrograms/test_x86_avx512.cpp | 8 - .../cryptopp/TestPrograms/test_x86_clmul.cpp | 8 - .../cryptopp/TestPrograms/test_x86_cpuid.cpp | 7 - .../cryptopp/TestPrograms/test_x86_rdrand.cpp | 10 - .../cryptopp/TestPrograms/test_x86_rdseed.cpp | 10 - vendor/cryptopp/TestPrograms/test_x86_sha.cpp | 14 - .../cryptopp/TestPrograms/test_x86_sse2.cpp | 7 - .../cryptopp/TestPrograms/test_x86_sse3.cpp | 8 - .../cryptopp/TestPrograms/test_x86_sse41.cpp | 10 - .../cryptopp/TestPrograms/test_x86_sse42.cpp | 7 - .../cryptopp/TestPrograms/test_x86_ssse3.cpp | 8 - .../TestPrograms/test_x86_via_aes.cpp | 39 - .../TestPrograms/test_x86_via_rng.cpp | 38 - .../TestPrograms/test_x86_via_sha.cpp | 39 - vendor/cryptopp/TestVectors/Readme.txt | 89 - vendor/cryptopp/TestVectors/aead.txt | 6 - vendor/cryptopp/TestVectors/aes.txt | 347 - vendor/cryptopp/TestVectors/all.txt | 65 - vendor/cryptopp/TestVectors/aria.txt | 158 - vendor/cryptopp/TestVectors/blake2.txt | 4 - vendor/cryptopp/TestVectors/blake2b.txt | 438 - vendor/cryptopp/TestVectors/blake2s.txt | 223 - vendor/cryptopp/TestVectors/camellia.txt | 8646 --------------- vendor/cryptopp/TestVectors/ccm.txt | 240 - vendor/cryptopp/TestVectors/chacha.txt | 776 -- .../cryptopp/TestVectors/chacha20poly1305.txt | 9439 ----------------- vendor/cryptopp/TestVectors/chacha_tls.txt | 337 - vendor/cryptopp/TestVectors/cham.txt | 471 - vendor/cryptopp/TestVectors/cmac.txt | 38 - vendor/cryptopp/TestVectors/dlies.txt | 542 - vendor/cryptopp/TestVectors/dsa.txt | 397 - vendor/cryptopp/TestVectors/dsa_1363.txt | 553 - vendor/cryptopp/TestVectors/dsa_rfc6979.txt | 663 -- vendor/cryptopp/TestVectors/eax.txt | 75 - vendor/cryptopp/TestVectors/esign.txt | 93 - vendor/cryptopp/TestVectors/gcm.txt | 168 - vendor/cryptopp/TestVectors/hc128.txt | 645 -- vendor/cryptopp/TestVectors/hc256.txt | 2330 ---- vendor/cryptopp/TestVectors/hight.txt | 522 - vendor/cryptopp/TestVectors/hkdf.txt | 173 - vendor/cryptopp/TestVectors/hmac.txt | 281 - vendor/cryptopp/TestVectors/kalyna.txt | 94 - vendor/cryptopp/TestVectors/keccak.txt | 861 -- vendor/cryptopp/TestVectors/lea.txt | 713 -- vendor/cryptopp/TestVectors/lsh.txt | 5 - vendor/cryptopp/TestVectors/lsh256.txt | 1477 --- vendor/cryptopp/TestVectors/lsh512.txt | 1477 --- vendor/cryptopp/TestVectors/lsh512_256.txt | 738 -- vendor/cryptopp/TestVectors/mars.txt | 66 - vendor/cryptopp/TestVectors/nr.txt | 615 -- vendor/cryptopp/TestVectors/panama.txt | 76 - vendor/cryptopp/TestVectors/poly1305_tls.txt | 1687 --- vendor/cryptopp/TestVectors/poly1305aes.txt | 2229 ---- vendor/cryptopp/TestVectors/rabbit.txt | 1980 ---- vendor/cryptopp/TestVectors/rsa_oaep.txt | 1765 --- vendor/cryptopp/TestVectors/rsa_pkcs1_1_5.txt | 89 - vendor/cryptopp/TestVectors/rsa_pss.txt | 2083 ---- vendor/cryptopp/TestVectors/rw.txt | 166 - vendor/cryptopp/TestVectors/salsa.txt | 596 -- vendor/cryptopp/TestVectors/seal.txt | 137 - vendor/cryptopp/TestVectors/seed.txt | 19 - vendor/cryptopp/TestVectors/sha.txt | 59 - .../TestVectors/sha1_160_fips_180.txt | 519 - vendor/cryptopp/TestVectors/sha1_fips_180.txt | 3 - vendor/cryptopp/TestVectors/sha2.txt | 6 - .../TestVectors/sha2_224_fips_180.txt | 519 - .../TestVectors/sha2_256_fips_180.txt | 519 - .../TestVectors/sha2_384_fips_180.txt | 1031 -- .../TestVectors/sha2_512_fips_180.txt | 1031 -- vendor/cryptopp/TestVectors/sha2_fips_180.txt | 6 - vendor/cryptopp/TestVectors/sha3.txt | 6 - .../TestVectors/sha3_224_fips_202.txt | 983 -- .../TestVectors/sha3_256_fips_202.txt | 951 -- .../TestVectors/sha3_384_fips_202.txt | 823 -- .../TestVectors/sha3_512_fips_202.txt | 695 -- vendor/cryptopp/TestVectors/sha3_fips_202.txt | 6 - vendor/cryptopp/TestVectors/shacal2.txt | 5123 --------- vendor/cryptopp/TestVectors/shake.txt | 1206 --- vendor/cryptopp/TestVectors/simeck.txt | 317 - vendor/cryptopp/TestVectors/simon.txt | 885 -- vendor/cryptopp/TestVectors/siphash.txt | 3849 ------- vendor/cryptopp/TestVectors/skipjack.txt | 1046 -- vendor/cryptopp/TestVectors/sm3.txt | 358 - vendor/cryptopp/TestVectors/sm4.txt | 392 - vendor/cryptopp/TestVectors/sosemanuk.txt | 25 - vendor/cryptopp/TestVectors/speck.txt | 885 -- vendor/cryptopp/TestVectors/tea.txt | 711 -- vendor/cryptopp/TestVectors/threefish.txt | 117 - vendor/cryptopp/TestVectors/ttmac.txt | 40 - vendor/cryptopp/TestVectors/vmac.txt | 77 - vendor/cryptopp/TestVectors/wake.txt | 10 - vendor/cryptopp/TestVectors/whrlpool.txt | 39 - vendor/cryptopp/TestVectors/xchacha.txt | 75 - vendor/cryptopp/TestVectors/xts.txt | 8228 -------------- vendor/cryptopp/adhoc.cpp.proto | 42 - vendor/cryptopp/adler32.cpp | 82 - vendor/cryptopp/adler32.h | 33 - vendor/cryptopp/adv_simd.h | 1281 --- vendor/cryptopp/aes.h | 30 - vendor/cryptopp/aes_armv4.S | 1215 --- vendor/cryptopp/aes_armv4.h | 30 - vendor/cryptopp/algebra.cpp | 341 - vendor/cryptopp/algebra.h | 453 - vendor/cryptopp/algparam.cpp | 75 - vendor/cryptopp/algparam.h | 520 - vendor/cryptopp/allocate.cpp | 107 - vendor/cryptopp/allocate.h | 74 - vendor/cryptopp/arc4.cpp | 122 - vendor/cryptopp/arc4.h | 89 - vendor/cryptopp/argnames.h | 99 - vendor/cryptopp/aria.cpp | 343 - vendor/cryptopp/aria.h | 71 - vendor/cryptopp/aria_simd.cpp | 194 - vendor/cryptopp/ariatab.cpp | 166 - vendor/cryptopp/arm_simd.h | 449 - vendor/cryptopp/asn.cpp | 717 -- vendor/cryptopp/asn.h | 965 -- vendor/cryptopp/authenc.cpp | 188 - vendor/cryptopp/authenc.h | 87 - vendor/cryptopp/base32.cpp | 97 - vendor/cryptopp/base32.h | 158 - vendor/cryptopp/base64.cpp | 111 - vendor/cryptopp/base64.h | 158 - vendor/cryptopp/basecode.cpp | 247 - vendor/cryptopp/basecode.h | 146 - vendor/cryptopp/bds10.zip | Bin 6812 -> 0 bytes vendor/cryptopp/bench.h | 105 - vendor/cryptopp/bench1.cpp | 520 - vendor/cryptopp/bench2.cpp | 267 - vendor/cryptopp/bench3.cpp | 480 - vendor/cryptopp/bfinit.cpp | 277 - vendor/cryptopp/blake2.cpp | 797 -- vendor/cryptopp/blake2.h | 444 - vendor/cryptopp/blake2b_simd.cpp | 1276 --- vendor/cryptopp/blake2s_simd.cpp | 1091 -- vendor/cryptopp/blowfish.cpp | 99 - vendor/cryptopp/blowfish.h | 54 - vendor/cryptopp/blumshub.cpp | 64 - vendor/cryptopp/blumshub.h | 70 - vendor/cryptopp/camellia.cpp | 539 - vendor/cryptopp/camellia.h | 49 - vendor/cryptopp/cast.cpp | 292 - vendor/cryptopp/cast.h | 109 - vendor/cryptopp/casts.cpp | 545 - vendor/cryptopp/cbcmac.cpp | 62 - vendor/cryptopp/cbcmac.h | 63 - vendor/cryptopp/ccm.cpp | 139 - vendor/cryptopp/ccm.h | 123 - vendor/cryptopp/chacha.cpp | 568 - vendor/cryptopp/chacha.h | 223 - vendor/cryptopp/chacha_avx.cpp | 422 - vendor/cryptopp/chacha_simd.cpp | 1109 -- vendor/cryptopp/chachapoly.cpp | 211 - vendor/cryptopp/chachapoly.h | 322 - vendor/cryptopp/cham.cpp | 365 - vendor/cryptopp/cham.h | 179 - vendor/cryptopp/cham_simd.cpp | 478 - vendor/cryptopp/channels.cpp | 316 - vendor/cryptopp/channels.h | 142 - vendor/cryptopp/cmac.cpp | 164 - vendor/cryptopp/cmac.h | 76 - vendor/cryptopp/config.h | 33 - vendor/cryptopp/config_align.h | 72 - vendor/cryptopp/config_asm.h | 480 - vendor/cryptopp/config_cpu.h | 211 - vendor/cryptopp/config_cxx.h | 247 - vendor/cryptopp/config_dll.h | 178 - vendor/cryptopp/config_int.h | 253 - vendor/cryptopp/config_misc.h | 194 - vendor/cryptopp/config_ns.h | 76 - vendor/cryptopp/config_os.h | 169 - vendor/cryptopp/config_ver.h | 90 - vendor/cryptopp/cpu.cpp | 1459 --- vendor/cryptopp/cpu.h | 1085 -- vendor/cryptopp/crc.cpp | 367 - vendor/cryptopp/crc.h | 78 - vendor/cryptopp/crc_simd.cpp | 172 - vendor/cryptopp/cryptdll.vcxproj | 334 - vendor/cryptopp/cryptdll.vcxproj.filters | 450 - vendor/cryptopp/cryptest.nmake | 363 - vendor/cryptopp/cryptest.sln | 89 - vendor/cryptopp/cryptest.vcxproj | 381 - vendor/cryptopp/cryptest.vcxproj.filters | 524 - vendor/cryptopp/cryptest.vcxproj.user | 6 - vendor/cryptopp/cryptlib.cpp | 1054 -- vendor/cryptopp/cryptlib.h | 3379 ------ vendor/cryptopp/cryptlib.vcxproj | 585 - vendor/cryptopp/cryptlib.vcxproj.filters | 1107 -- vendor/cryptopp/cryptopp.rc | 104 - vendor/cryptopp/cryptopp.supp | 8 - vendor/cryptopp/darn.cpp | 236 - vendor/cryptopp/darn.h | 95 - vendor/cryptopp/datatest.cpp | 1358 --- vendor/cryptopp/default.cpp | 307 - vendor/cryptopp/default.h | 310 - vendor/cryptopp/des.cpp | 465 - vendor/cryptopp/des.h | 163 - vendor/cryptopp/dessp.cpp | 88 - vendor/cryptopp/dh.cpp | 21 - vendor/cryptopp/dh.h | 275 - vendor/cryptopp/dh2.cpp | 69 - vendor/cryptopp/dh2.h | 70 - vendor/cryptopp/dll.cpp | 169 - vendor/cryptopp/dll.h | 71 - vendor/cryptopp/dlltest.cpp | 212 - vendor/cryptopp/dlltest.vcxproj | 135 - vendor/cryptopp/dlltest.vcxproj.filters | 14 - vendor/cryptopp/dmac.h | 114 - vendor/cryptopp/donna.h | 178 - vendor/cryptopp/donna_32.cpp | 2102 ---- vendor/cryptopp/donna_32.h | 411 - vendor/cryptopp/donna_64.cpp | 1815 ---- vendor/cryptopp/donna_64.h | 457 - vendor/cryptopp/donna_sse.cpp | 1123 -- vendor/cryptopp/donna_sse.h | 86 - vendor/cryptopp/drbg.h | 718 -- vendor/cryptopp/dsa.cpp | 66 - vendor/cryptopp/dsa.h | 53 - vendor/cryptopp/eax.cpp | 59 - vendor/cryptopp/eax.h | 112 - vendor/cryptopp/ec2n.cpp | 320 - vendor/cryptopp/ec2n.h | 136 - vendor/cryptopp/eccrypto.cpp | 840 -- vendor/cryptopp/eccrypto.h | 686 -- vendor/cryptopp/ecp.cpp | 506 - vendor/cryptopp/ecp.h | 167 - vendor/cryptopp/ecpoint.h | 146 - vendor/cryptopp/elgamal.cpp | 22 - vendor/cryptopp/elgamal.h | 308 - vendor/cryptopp/emsa2.cpp | 44 - vendor/cryptopp/emsa2.h | 101 - vendor/cryptopp/eprecomp.cpp | 114 - vendor/cryptopp/eprecomp.h | 162 - vendor/cryptopp/esign.cpp | 233 - vendor/cryptopp/esign.h | 169 - vendor/cryptopp/factory.h | 179 - vendor/cryptopp/fhmqv.h | 408 - vendor/cryptopp/files.cpp | 300 - vendor/cryptopp/files.h | 181 - vendor/cryptopp/filters.cpp | 1270 --- vendor/cryptopp/filters.h | 1529 --- vendor/cryptopp/fips140.cpp | 84 - vendor/cryptopp/fips140.h | 112 - vendor/cryptopp/fipsalgt.cpp | 1293 --- vendor/cryptopp/fipstest.cpp | 652 -- vendor/cryptopp/fltrimpl.h | 87 - vendor/cryptopp/gcm.cpp | 852 -- vendor/cryptopp/gcm.h | 139 - vendor/cryptopp/gcm_simd.cpp | 734 -- vendor/cryptopp/gf256.cpp | 34 - vendor/cryptopp/gf256.h | 72 - vendor/cryptopp/gf2_32.cpp | 99 - vendor/cryptopp/gf2_32.h | 73 - vendor/cryptopp/gf2n.cpp | 1070 -- vendor/cryptopp/gf2n.h | 404 - vendor/cryptopp/gf2n_simd.cpp | 614 -- vendor/cryptopp/gfpcrypt.cpp | 334 - vendor/cryptopp/gfpcrypt.h | 1036 -- vendor/cryptopp/gost.cpp | 123 - vendor/cryptopp/gost.h | 66 - vendor/cryptopp/gzip.cpp | 208 - vendor/cryptopp/gzip.h | 144 - vendor/cryptopp/hashfwd.h | 38 - vendor/cryptopp/hc128.cpp | 279 - vendor/cryptopp/hc128.h | 67 - vendor/cryptopp/hc256.cpp | 158 - vendor/cryptopp/hc256.h | 67 - vendor/cryptopp/hex.cpp | 58 - vendor/cryptopp/hex.h | 50 - vendor/cryptopp/hight.cpp | 271 - vendor/cryptopp/hight.h | 81 - vendor/cryptopp/hkdf.h | 179 - vendor/cryptopp/hmac.cpp | 90 - vendor/cryptopp/hmac.h | 80 - vendor/cryptopp/hmqv.h | 417 - vendor/cryptopp/hrtimer.cpp | 174 - vendor/cryptopp/hrtimer.h | 134 - vendor/cryptopp/ida.cpp | 418 - vendor/cryptopp/ida.h | 182 - vendor/cryptopp/idea.cpp | 191 - vendor/cryptopp/idea.h | 66 - vendor/cryptopp/integer.cpp | 4910 --------- vendor/cryptopp/integer.h | 837 -- vendor/cryptopp/iterhash.cpp | 200 - vendor/cryptopp/iterhash.h | 218 - vendor/cryptopp/kalyna.cpp | 1362 --- vendor/cryptopp/kalyna.h | 218 - vendor/cryptopp/kalynatab.cpp | 1232 --- vendor/cryptopp/keccak.cpp | 67 - vendor/cryptopp/keccak.h | 118 - vendor/cryptopp/keccak_core.cpp | 261 - vendor/cryptopp/keccak_simd.cpp | 2681 ----- vendor/cryptopp/lea.cpp | 899 -- vendor/cryptopp/lea.h | 108 - vendor/cryptopp/lea_simd.cpp | 1072 -- vendor/cryptopp/lsh.h | 262 - vendor/cryptopp/lsh256.cpp | 817 -- vendor/cryptopp/lsh256_avx.cpp | 648 -- vendor/cryptopp/lsh256_sse.cpp | 710 -- vendor/cryptopp/lsh512.cpp | 893 -- vendor/cryptopp/lsh512_avx.cpp | 760 -- vendor/cryptopp/lsh512_sse.cpp | 938 -- vendor/cryptopp/lubyrack.h | 137 - vendor/cryptopp/luc.cpp | 231 - vendor/cryptopp/luc.h | 338 - vendor/cryptopp/mars.cpp | 154 - vendor/cryptopp/mars.h | 60 - vendor/cryptopp/marss.cpp | 140 - vendor/cryptopp/md2.cpp | 120 - vendor/cryptopp/md2.h | 56 - vendor/cryptopp/md4.cpp | 110 - vendor/cryptopp/md4.h | 35 - vendor/cryptopp/md5.cpp | 124 - vendor/cryptopp/md5.h | 35 - vendor/cryptopp/mdc.h | 84 - vendor/cryptopp/mersenne.h | 231 - vendor/cryptopp/misc.cpp | 394 - vendor/cryptopp/misc.h | 2776 ----- vendor/cryptopp/modarith.h | 344 - vendor/cryptopp/modes.cpp | 306 - vendor/cryptopp/modes.h | 609 -- vendor/cryptopp/modexppc.h | 48 - vendor/cryptopp/mqueue.cpp | 175 - vendor/cryptopp/mqueue.h | 145 - vendor/cryptopp/mqv.cpp | 46 - vendor/cryptopp/mqv.h | 268 - vendor/cryptopp/naclite.h | 438 - vendor/cryptopp/nbtheory.cpp | 1141 -- vendor/cryptopp/nbtheory.h | 317 - vendor/cryptopp/neon_simd.cpp | 197 - vendor/cryptopp/nr.h | 11 - vendor/cryptopp/oaep.cpp | 98 - vendor/cryptopp/oaep.h | 54 - vendor/cryptopp/oids.h | 197 - vendor/cryptopp/osrng.cpp | 300 - vendor/cryptopp/osrng.h | 304 - vendor/cryptopp/ossig.h | 128 - vendor/cryptopp/padlkrng.cpp | 105 - vendor/cryptopp/padlkrng.h | 138 - vendor/cryptopp/panama.cpp | 533 - vendor/cryptopp/panama.h | 169 - vendor/cryptopp/pch.cpp | 1 - vendor/cryptopp/pch.h | 31 - vendor/cryptopp/pkcspad.cpp | 160 - vendor/cryptopp/pkcspad.h | 123 - vendor/cryptopp/poly1305.cpp | 403 - vendor/cryptopp/poly1305.h | 241 - vendor/cryptopp/polynomi.cpp | 577 - vendor/cryptopp/polynomi.h | 463 - vendor/cryptopp/ppc_power7.cpp | 93 - vendor/cryptopp/ppc_power8.cpp | 246 - vendor/cryptopp/ppc_power9.cpp | 136 - vendor/cryptopp/ppc_simd.cpp | 96 - vendor/cryptopp/ppc_simd.h | 2764 ----- vendor/cryptopp/pssr.cpp | 163 - vendor/cryptopp/pssr.h | 105 - vendor/cryptopp/pubkey.cpp | 170 - vendor/cryptopp/pubkey.h | 2378 ----- vendor/cryptopp/pwdbased.h | 481 - vendor/cryptopp/queue.cpp | 601 -- vendor/cryptopp/queue.h | 272 - vendor/cryptopp/rabbit.cpp | 259 - vendor/cryptopp/rabbit.h | 112 - vendor/cryptopp/rabin.cpp | 241 - vendor/cryptopp/rabin.h | 135 - vendor/cryptopp/randpool.cpp | 174 - vendor/cryptopp/randpool.h | 104 - vendor/cryptopp/rc2.cpp | 118 - vendor/cryptopp/rc2.h | 90 - vendor/cryptopp/rc5.cpp | 80 - vendor/cryptopp/rc5.h | 59 - vendor/cryptopp/rc6.cpp | 96 - vendor/cryptopp/rc6.h | 60 - vendor/cryptopp/rdrand.asm | 230 - vendor/cryptopp/rdrand.cpp | 327 - vendor/cryptopp/rdrand.h | 145 - vendor/cryptopp/rdseed.asm | 230 - vendor/cryptopp/rdtables.cpp | 166 - vendor/cryptopp/regtest1.cpp | 160 - vendor/cryptopp/regtest2.cpp | 105 - vendor/cryptopp/regtest3.cpp | 156 - vendor/cryptopp/regtest4.cpp | 58 - vendor/cryptopp/resource.h | 15 - vendor/cryptopp/rijndael.cpp | 1334 --- vendor/cryptopp/rijndael.h | 109 - vendor/cryptopp/rijndael_simd.cpp | 734 -- vendor/cryptopp/ripemd.cpp | 803 -- vendor/cryptopp/ripemd.h | 65 - vendor/cryptopp/rng.cpp | 166 - vendor/cryptopp/rng.h | 111 - vendor/cryptopp/rsa.cpp | 330 - vendor/cryptopp/rsa.h | 263 - vendor/cryptopp/rw.cpp | 314 - vendor/cryptopp/rw.h | 146 - vendor/cryptopp/safer.cpp | 157 - vendor/cryptopp/safer.h | 98 - vendor/cryptopp/salsa.cpp | 759 -- vendor/cryptopp/salsa.h | 104 - vendor/cryptopp/scrypt.cpp | 329 - vendor/cryptopp/scrypt.h | 103 - vendor/cryptopp/seal.cpp | 222 - vendor/cryptopp/seal.h | 59 - vendor/cryptopp/secblock.h | 1310 --- vendor/cryptopp/secblockfwd.h | 29 - vendor/cryptopp/seckey.h | 444 - vendor/cryptopp/seed.cpp | 113 - vendor/cryptopp/seed.h | 44 - vendor/cryptopp/serpent.cpp | 125 - vendor/cryptopp/serpent.h | 72 - vendor/cryptopp/serpentp.h | 439 - vendor/cryptopp/sha.cpp | 1414 --- vendor/cryptopp/sha.h | 210 - vendor/cryptopp/sha1_armv4.S | 1410 --- vendor/cryptopp/sha1_armv4.h | 23 - vendor/cryptopp/sha256_armv4.S | 2670 ----- vendor/cryptopp/sha256_armv4.h | 23 - vendor/cryptopp/sha3.cpp | 71 - vendor/cryptopp/sha3.h | 106 - vendor/cryptopp/sha512_armv4.S | 1861 ---- vendor/cryptopp/sha512_armv4.h | 23 - vendor/cryptopp/sha_simd.cpp | 1506 --- vendor/cryptopp/shacal2.cpp | 172 - vendor/cryptopp/shacal2.h | 66 - vendor/cryptopp/shacal2_simd.cpp | 94 - vendor/cryptopp/shake.cpp | 85 - vendor/cryptopp/shake.h | 161 - vendor/cryptopp/shark.cpp | 163 - vendor/cryptopp/shark.h | 77 - vendor/cryptopp/sharkbox.cpp | 4166 -------- vendor/cryptopp/simeck.cpp | 154 - vendor/cryptopp/simeck.h | 162 - vendor/cryptopp/simon.cpp | 505 - vendor/cryptopp/simon.h | 206 - vendor/cryptopp/simon128_simd.cpp | 862 -- vendor/cryptopp/simple.cpp | 13 - vendor/cryptopp/simple.h | 506 - vendor/cryptopp/siphash.h | 313 - vendor/cryptopp/skipjack.cpp | 202 - vendor/cryptopp/skipjack.h | 80 - vendor/cryptopp/sm3.cpp | 255 - vendor/cryptopp/sm3.h | 61 - vendor/cryptopp/sm4.cpp | 212 - vendor/cryptopp/sm4.h | 96 - vendor/cryptopp/sm4_simd.cpp | 323 - vendor/cryptopp/smartptr.h | 257 - vendor/cryptopp/sosemanuk.cpp | 728 -- vendor/cryptopp/sosemanuk.h | 62 - vendor/cryptopp/speck.cpp | 487 - vendor/cryptopp/speck.h | 206 - vendor/cryptopp/speck128_simd.cpp | 754 -- vendor/cryptopp/square.cpp | 187 - vendor/cryptopp/square.h | 63 - vendor/cryptopp/squaretb.cpp | 582 - vendor/cryptopp/sse_simd.cpp | 115 - vendor/cryptopp/stdcpp.h | 101 - vendor/cryptopp/strciphr.cpp | 328 - vendor/cryptopp/strciphr.h | 728 -- vendor/cryptopp/tea.cpp | 165 - vendor/cryptopp/tea.h | 161 - vendor/cryptopp/test.cpp | 1095 -- vendor/cryptopp/tftables.cpp | 323 - vendor/cryptopp/threefish.cpp | 503 - vendor/cryptopp/threefish.h | 201 - vendor/cryptopp/tiger.cpp | 282 - vendor/cryptopp/tiger.h | 61 - vendor/cryptopp/tigertab.cpp | 525 - vendor/cryptopp/trap.h | 163 - vendor/cryptopp/trunhash.h | 63 - vendor/cryptopp/ttmac.cpp | 348 - vendor/cryptopp/ttmac.h | 44 - vendor/cryptopp/tweetnacl.cpp | 924 -- vendor/cryptopp/tweetnacl.h | 281 - vendor/cryptopp/twofish.cpp | 171 - vendor/cryptopp/twofish.h | 64 - vendor/cryptopp/validat0.cpp | 1669 --- vendor/cryptopp/validat1.cpp | 1225 --- vendor/cryptopp/validat10.cpp | 535 - vendor/cryptopp/validat2.cpp | 1270 --- vendor/cryptopp/validat3.cpp | 1341 --- vendor/cryptopp/validat4.cpp | 1813 ---- vendor/cryptopp/validat5.cpp | 2225 ---- vendor/cryptopp/validat6.cpp | 408 - vendor/cryptopp/validat7.cpp | 705 -- vendor/cryptopp/validat8.cpp | 624 -- vendor/cryptopp/validat9.cpp | 704 -- vendor/cryptopp/validate.h | 395 - vendor/cryptopp/vmac.cpp | 894 -- vendor/cryptopp/vmac.h | 91 - vendor/cryptopp/vs2005.zip | Bin 12635 -> 0 bytes vendor/cryptopp/wake.cpp | 111 - vendor/cryptopp/wake.h | 59 - vendor/cryptopp/whrlpool.cpp | 730 -- vendor/cryptopp/whrlpool.h | 42 - vendor/cryptopp/words.h | 225 - vendor/cryptopp/x64dll.asm | 2021 ---- vendor/cryptopp/x64masm.asm | 1565 --- vendor/cryptopp/xed25519.cpp | 900 -- vendor/cryptopp/xed25519.h | 825 -- vendor/cryptopp/xtr.cpp | 120 - vendor/cryptopp/xtr.h | 219 - vendor/cryptopp/xtrcrypt.cpp | 122 - vendor/cryptopp/xtrcrypt.h | 55 - vendor/cryptopp/xts.cpp | 512 - vendor/cryptopp/xts.h | 224 - vendor/cryptopp/zdeflate.cpp | 821 -- vendor/cryptopp/zdeflate.h | 174 - vendor/cryptopp/zinflate.cpp | 662 -- vendor/cryptopp/zinflate.h | 164 - vendor/cryptopp/zlib.cpp | 93 - vendor/cryptopp/zlib.h | 65 - vendor/libsodium/CMakeLists.txt | 90 + vendor/libsodium/src/Makefile.am | 3 + vendor/libsodium/src/Makefile.in | 679 ++ vendor/libsodium/src/libsodium/Makefile.am | 314 + vendor/libsodium/src/libsodium/Makefile.in | 4075 +++++++ .../crypto_aead/aegis128l/aead_aegis128l.c | 159 + .../crypto_aead/aegis128l/aegis128l_aesni.c | 70 + .../crypto_aead/aegis128l/aegis128l_aesni.h | 8 + .../aegis128l/aegis128l_armcrypto.c | 72 + .../aegis128l/aegis128l_armcrypto.h | 8 + .../crypto_aead/aegis128l/aegis128l_common.h | 248 + .../crypto_aead/aegis128l/aegis128l_soft.c | 59 + .../crypto_aead/aegis128l/aegis128l_soft.h | 8 + .../crypto_aead/aegis128l/implementations.h | 17 + .../crypto_aead/aegis256/aead_aegis256.c | 158 + .../crypto_aead/aegis256/aegis256_aesni.c | 65 + .../crypto_aead/aegis256/aegis256_aesni.h | 8 + .../crypto_aead/aegis256/aegis256_armcrypto.c | 70 + .../crypto_aead/aegis256/aegis256_armcrypto.h | 8 + .../crypto_aead/aegis256/aegis256_common.h | 231 + .../crypto_aead/aegis256/aegis256_soft.c | 54 + .../crypto_aead/aegis256/aegis256_soft.h | 8 + .../crypto_aead/aegis256/implementations.h | 17 + .../crypto_aead/aes256gcm/aead_aes256gcm.c | 157 + .../aes256gcm/aesni/aead_aes256gcm_aesni.c | 1015 ++ .../armcrypto/aead_aes256gcm_armcrypto.c | 1032 ++ .../chacha20poly1305/aead_chacha20poly1305.c | 400 + .../aead_xchacha20poly1305.c | 262 + .../src/libsodium/crypto_auth/crypto_auth.c | 41 + .../crypto_auth/hmacsha256/auth_hmacsha256.c | 118 + .../crypto_auth/hmacsha512/auth_hmacsha512.c | 118 + .../hmacsha512256/auth_hmacsha512256.c | 93 + .../src/libsodium/crypto_box/crypto_box.c | 114 + .../libsodium/crypto_box/crypto_box_easy.c | 115 + .../libsodium/crypto_box/crypto_box_seal.c | 68 + .../box_curve25519xchacha20poly1305.c | 204 + .../box_seal_curve25519xchacha20poly1305.c | 79 + .../box_curve25519xsalsa20poly1305.c | 156 + .../crypto_core/ed25519/core_ed25519.c | 225 + .../crypto_core/ed25519/core_ristretto255.c | 156 + .../crypto_core/ed25519/ref10/ed25519_ref10.c | 2858 +++++ .../crypto_core/ed25519/ref10/fe_25_5/base.h | 1344 +++ .../crypto_core/ed25519/ref10/fe_25_5/base2.h | 40 + .../ed25519/ref10/fe_25_5/constants.h | 40 + .../crypto_core/ed25519/ref10/fe_25_5/fe.h | 220 + .../crypto_core/ed25519/ref10/fe_51/base.h | 1344 +++ .../crypto_core/ed25519/ref10/fe_51/base2.h | 40 + .../ed25519/ref10/fe_51/constants.h | 41 + .../crypto_core/ed25519/ref10/fe_51/fe.h | 116 + .../crypto_core/hchacha20/core_hchacha20.c | 93 + .../crypto_core/hsalsa20/core_hsalsa20.c | 21 + .../hsalsa20/ref2/core_hsalsa20_ref2.c | 95 + .../crypto_core/salsa/ref/core_salsa_ref.c | 195 + .../libsodium/crypto_core/softaes/softaes.c | 143 + .../blake2b/generichash_blake2.c | 55 + .../crypto_generichash/blake2b/ref/blake2.h | 106 + .../blake2b/ref/blake2b-compress-avx2.c | 52 + .../blake2b/ref/blake2b-compress-avx2.h | 142 + .../blake2b/ref/blake2b-compress-ref.c | 93 + .../blake2b/ref/blake2b-compress-sse41.c | 91 + .../blake2b/ref/blake2b-compress-sse41.h | 106 + .../blake2b/ref/blake2b-compress-ssse3.c | 95 + .../blake2b/ref/blake2b-compress-ssse3.h | 106 + .../blake2b/ref/blake2b-load-avx2.h | 340 + .../blake2b/ref/blake2b-load-sse2.h | 164 + .../blake2b/ref/blake2b-load-sse41.h | 307 + .../blake2b/ref/blake2b-ref.c | 438 + .../blake2b/ref/generichash_blake2b.c | 116 + .../crypto_generichash/crypto_generichash.c | 91 + .../src/libsodium/crypto_hash/crypto_hash.c | 20 + .../crypto_hash/sha256/cp/hash_sha256_cp.c | 256 + .../crypto_hash/sha256/hash_sha256.c | 13 + .../crypto_hash/sha512/cp/hash_sha512_cp.c | 284 + .../crypto_hash/sha512/hash_sha512.c | 13 + .../crypto_kdf/blake2b/kdf_blake2b.c | 52 + .../src/libsodium/crypto_kdf/crypto_kdf.c | 49 + .../crypto_kdf/hkdf/kdf_hkdf_sha256.c | 123 + .../crypto_kdf/hkdf/kdf_hkdf_sha512.c | 123 + .../src/libsodium/crypto_kx/crypto_kx.c | 143 + .../crypto_onetimeauth/crypto_onetimeauth.c | 71 + .../poly1305/donna/poly1305_donna.c | 124 + .../poly1305/donna/poly1305_donna.h | 12 + .../poly1305/donna/poly1305_donna32.h | 235 + .../poly1305/donna/poly1305_donna64.h | 221 + .../poly1305/onetimeauth_poly1305.c | 90 + .../poly1305/onetimeauth_poly1305.h | 21 + .../poly1305/sse2/poly1305_sse2.c | 955 ++ .../poly1305/sse2/poly1305_sse2.h | 12 + .../crypto_pwhash/argon2/argon2-core.c | 556 + .../crypto_pwhash/argon2/argon2-core.h | 271 + .../crypto_pwhash/argon2/argon2-encoding.c | 306 + .../crypto_pwhash/argon2/argon2-encoding.h | 34 + .../argon2/argon2-fill-block-avx2.c | 243 + .../argon2/argon2-fill-block-avx512f.c | 251 + .../argon2/argon2-fill-block-ref.c | 234 + .../argon2/argon2-fill-block-ssse3.c | 244 + .../libsodium/crypto_pwhash/argon2/argon2.c | 283 + .../libsodium/crypto_pwhash/argon2/argon2.h | 305 + .../crypto_pwhash/argon2/blake2b-long.c | 79 + .../crypto_pwhash/argon2/blake2b-long.h | 8 + .../crypto_pwhash/argon2/blamka-round-avx2.h | 150 + .../argon2/blamka-round-avx512f.h | 145 + .../crypto_pwhash/argon2/blamka-round-ref.h | 40 + .../crypto_pwhash/argon2/blamka-round-ssse3.h | 124 + .../crypto_pwhash/argon2/pwhash_argon2i.c | 294 + .../crypto_pwhash/argon2/pwhash_argon2id.c | 238 + .../libsodium/crypto_pwhash/crypto_pwhash.c | 212 + .../crypto_scrypt-common.c | 268 + .../scryptsalsa208sha256/crypto_scrypt.h | 92 + .../nosse/pwhash_scryptsalsa208sha256_nosse.c | 318 + .../scryptsalsa208sha256/pbkdf2-sha256.c | 96 + .../scryptsalsa208sha256/pbkdf2-sha256.h | 45 + .../pwhash_scryptsalsa208sha256.c | 301 + .../scryptsalsa208sha256/scrypt_platform.c | 112 + .../sse/pwhash_scryptsalsa208sha256_sse.c | 406 + .../crypto_scalarmult/crypto_scalarmult.c | 33 + .../curve25519/ref10/x25519_ref10.c | 182 + .../curve25519/ref10/x25519_ref10.h | 10 + .../curve25519/sandy2x/consts.S | 25 + .../curve25519/sandy2x/consts_namespace.h | 20 + .../curve25519/sandy2x/curve25519_sandy2x.c | 71 + .../curve25519/sandy2x/curve25519_sandy2x.h | 9 + .../crypto_scalarmult/curve25519/sandy2x/fe.h | 26 + .../curve25519/sandy2x/fe51.h | 35 + .../curve25519/sandy2x/fe51_invert.c | 58 + .../curve25519/sandy2x/fe51_mul.S | 200 + .../curve25519/sandy2x/fe51_namespace.h | 16 + .../curve25519/sandy2x/fe51_nsquare.S | 174 + .../curve25519/sandy2x/fe51_pack.S | 228 + .../curve25519/sandy2x/fe_frombytes_sandy2x.c | 78 + .../curve25519/sandy2x/ladder.S | 1442 +++ .../curve25519/sandy2x/ladder.h | 18 + .../curve25519/sandy2x/ladder_namespace.h | 8 + .../curve25519/sandy2x/sandy2x.S | 16 + .../curve25519/scalarmult_curve25519.c | 60 + .../curve25519/scalarmult_curve25519.h | 11 + .../ed25519/ref10/scalarmult_ed25519_ref10.c | 121 + .../ref10/scalarmult_ristretto255_ref10.c | 63 + .../crypto_secretbox/crypto_secretbox.c | 67 + .../crypto_secretbox/crypto_secretbox_easy.c | 145 + .../secretbox_xchacha20poly1305.c | 177 + .../secretbox_xsalsa20poly1305.c | 89 + .../secretstream_xchacha20poly1305.c | 313 + .../crypto_shorthash/crypto_shorthash.c | 34 + .../siphash24/ref/shorthash_siphash24_ref.c | 71 + .../siphash24/ref/shorthash_siphash_ref.h | 24 + .../siphash24/ref/shorthash_siphashx24_ref.c | 77 + .../siphash24/shorthash_siphash24.c | 11 + .../siphash24/shorthash_siphashx24.c | 11 + .../src/libsodium/crypto_sign/crypto_sign.c | 115 + .../crypto_sign/ed25519/ref10/keypair.c | 84 + .../crypto_sign/ed25519/ref10/obsolete.c | 118 + .../crypto_sign/ed25519/ref10/open.c | 98 + .../crypto_sign/ed25519/ref10/sign.c | 128 + .../ed25519/ref10/sign_ed25519_ref10.h | 18 + .../crypto_sign/ed25519/sign_ed25519.c | 97 + .../chacha20/dolbeau/chacha20_dolbeau-avx2.c | 180 + .../chacha20/dolbeau/chacha20_dolbeau-avx2.h | 8 + .../chacha20/dolbeau/chacha20_dolbeau-ssse3.c | 176 + .../chacha20/dolbeau/chacha20_dolbeau-ssse3.h | 8 + .../crypto_stream/chacha20/dolbeau/u0.h | 86 + .../crypto_stream/chacha20/dolbeau/u1.h | 98 + .../crypto_stream/chacha20/dolbeau/u4.h | 177 + .../crypto_stream/chacha20/dolbeau/u8.h | 326 + .../crypto_stream/chacha20/ref/chacha20_ref.c | 312 + .../crypto_stream/chacha20/ref/chacha20_ref.h | 8 + .../crypto_stream/chacha20/stream_chacha20.c | 184 + .../crypto_stream/chacha20/stream_chacha20.h | 22 + .../libsodium/crypto_stream/crypto_stream.c | 49 + .../crypto_stream/salsa20/ref/salsa20_ref.c | 120 + .../crypto_stream/salsa20/ref/salsa20_ref.h | 8 + .../crypto_stream/salsa20/stream_salsa20.c | 100 + .../crypto_stream/salsa20/stream_salsa20.h | 16 + .../salsa20/xmm6/salsa20_xmm6-asm.S | 965 ++ .../crypto_stream/salsa20/xmm6/salsa20_xmm6.c | 31 + .../crypto_stream/salsa20/xmm6/salsa20_xmm6.h | 8 + .../salsa20/xmm6int/salsa20_xmm6int-avx2.c | 134 + .../salsa20/xmm6int/salsa20_xmm6int-avx2.h | 8 + .../salsa20/xmm6int/salsa20_xmm6int-sse2.c | 128 + .../salsa20/xmm6int/salsa20_xmm6int-sse2.h | 8 + .../crypto_stream/salsa20/xmm6int/u0.h | 195 + .../crypto_stream/salsa20/xmm6int/u1.h | 207 + .../crypto_stream/salsa20/xmm6int/u4.h | 547 + .../crypto_stream/salsa20/xmm6int/u8.h | 477 + .../salsa2012/ref/stream_salsa2012_ref.c | 106 + .../salsa2012/stream_salsa2012.c | 26 + .../salsa208/ref/stream_salsa208_ref.c | 106 + .../crypto_stream/salsa208/stream_salsa208.c | 26 + .../xchacha20/stream_xchacha20.c | 69 + .../crypto_stream/xsalsa20/stream_xsalsa20.c | 66 + .../src/libsodium/crypto_verify/verify.c | 95 + .../src/libsodium/include/Makefile.am | 76 + .../src/libsodium/include/Makefile.in | 723 ++ .../libsodium/src/libsodium/include/sodium.h | 75 + .../src/libsodium/include/sodium/core.h | 28 + .../include/sodium/crypto_aead_aegis128l.h | 92 + .../include/sodium/crypto_aead_aegis256.h | 92 + .../include/sodium/crypto_aead_aes256gcm.h | 179 + .../sodium/crypto_aead_chacha20poly1305.h | 180 + .../sodium/crypto_aead_xchacha20poly1305.h | 100 + .../libsodium/include/sodium/crypto_auth.h | 46 + .../include/sodium/crypto_auth_hmacsha256.h | 70 + .../include/sodium/crypto_auth_hmacsha512.h | 68 + .../sodium/crypto_auth_hmacsha512256.h | 65 + .../src/libsodium/include/sodium/crypto_box.h | 177 + .../crypto_box_curve25519xchacha20poly1305.h | 164 + .../crypto_box_curve25519xsalsa20poly1305.h | 112 + .../include/sodium/crypto_core_ed25519.h | 100 + .../include/sodium/crypto_core_hchacha20.h | 36 + .../include/sodium/crypto_core_hsalsa20.h | 36 + .../include/sodium/crypto_core_ristretto255.h | 100 + .../include/sodium/crypto_core_salsa20.h | 36 + .../include/sodium/crypto_core_salsa2012.h | 36 + .../include/sodium/crypto_core_salsa208.h | 40 + .../include/sodium/crypto_generichash.h | 84 + .../sodium/crypto_generichash_blake2b.h | 122 + .../libsodium/include/sodium/crypto_hash.h | 40 + .../include/sodium/crypto_hash_sha256.h | 60 + .../include/sodium/crypto_hash_sha512.h | 60 + .../src/libsodium/include/sodium/crypto_kdf.h | 53 + .../include/sodium/crypto_kdf_blake2b.h | 44 + .../include/sodium/crypto_kdf_hkdf_sha256.h | 74 + .../include/sodium/crypto_kdf_hkdf_sha512.h | 75 + .../src/libsodium/include/sodium/crypto_kx.h | 66 + .../include/sodium/crypto_onetimeauth.h | 65 + .../sodium/crypto_onetimeauth_poly1305.h | 72 + .../libsodium/include/sodium/crypto_pwhash.h | 147 + .../include/sodium/crypto_pwhash_argon2i.h | 122 + .../include/sodium/crypto_pwhash_argon2id.h | 122 + .../crypto_pwhash_scryptsalsa208sha256.h | 120 + .../include/sodium/crypto_scalarmult.h | 46 + .../sodium/crypto_scalarmult_curve25519.h | 42 + .../sodium/crypto_scalarmult_ed25519.h | 51 + .../sodium/crypto_scalarmult_ristretto255.h | 43 + .../include/sodium/crypto_secretbox.h | 93 + .../crypto_secretbox_xchacha20poly1305.h | 70 + .../crypto_secretbox_xsalsa20poly1305.h | 69 + .../crypto_secretstream_xchacha20poly1305.h | 108 + .../include/sodium/crypto_shorthash.h | 41 + .../sodium/crypto_shorthash_siphash24.h | 50 + .../libsodium/include/sodium/crypto_sign.h | 107 + .../include/sodium/crypto_sign_ed25519.h | 124 + .../crypto_sign_edwards25519sha512batch.h | 55 + .../libsodium/include/sodium/crypto_stream.h | 59 + .../include/sodium/crypto_stream_chacha20.h | 106 + .../include/sodium/crypto_stream_salsa20.h | 61 + .../include/sodium/crypto_stream_salsa2012.h | 53 + .../include/sodium/crypto_stream_salsa208.h | 56 + .../include/sodium/crypto_stream_xchacha20.h | 61 + .../include/sodium/crypto_stream_xsalsa20.h | 61 + .../include/sodium/crypto_verify_16.h | 23 + .../include/sodium/crypto_verify_32.h | 23 + .../include/sodium/crypto_verify_64.h | 23 + .../src/libsodium/include/sodium/export.h | 57 + .../include/sodium/private/asm_cet.h | 11 + .../sodium/private/chacha20_ietf_ext.h | 16 + .../libsodium/include/sodium/private/common.h | 285 + .../include/sodium/private/ed25519_ref10.h | 142 + .../sodium/private/ed25519_ref10_fe_25_5.h | 1030 ++ .../sodium/private/ed25519_ref10_fe_51.h | 508 + .../include/sodium/private/implementations.h | 13 + .../libsodium/include/sodium/private/mutex.h | 7 + .../include/sodium/private/softaes.h | 56 + .../include/sodium/private/sse2_64_32.h | 50 + .../libsodium/include/sodium/randombytes.h | 72 + .../sodium/randombytes_internal_random.h | 22 + .../include/sodium/randombytes_sysrandom.h | 19 + .../src/libsodium/include/sodium/runtime.h | 55 + .../src/libsodium/include/sodium/utils.h | 179 + .../src/libsodium/include/sodium/version.h.in | 33 + .../internal/randombytes_internal_random.c | 645 ++ .../src/libsodium/randombytes/randombytes.c | 199 + .../sysrandom/randombytes_sysrandom.c | 396 + .../libsodium/src/libsodium/sodium/codecs.c | 335 + vendor/libsodium/src/libsodium/sodium/core.c | 216 + .../libsodium/src/libsodium/sodium/runtime.c | 391 + vendor/libsodium/src/libsodium/sodium/utils.c | 809 ++ .../libsodium/src/libsodium/sodium/version.c | 30 + 963 files changed, 49428 insertions(+), 264486 deletions(-) delete mode 100644 src/game/ClientPackageCryptInfo.cpp delete mode 100644 src/game/ClientPackageCryptInfo.h create mode 100644 src/game/SecureCipher.cpp create mode 100644 src/game/SecureCipher.h delete mode 100644 src/game/cipher.cpp delete mode 100644 src/game/cipher.h delete mode 100644 src/game/panama.cpp delete mode 100644 src/game/panama.h delete mode 100644 src/libthecore/tea.cpp delete mode 100644 src/libthecore/tea.s delete mode 100644 vendor/cryptopp/3way.cpp delete mode 100644 vendor/cryptopp/3way.h delete mode 100644 vendor/cryptopp/CMakeLists.txt delete mode 100644 vendor/cryptopp/Doxyfile delete mode 100644 vendor/cryptopp/Filelist.txt delete mode 100644 vendor/cryptopp/GNUmakefile delete mode 100644 vendor/cryptopp/GNUmakefile-cross delete mode 100644 vendor/cryptopp/History.txt delete mode 100644 vendor/cryptopp/Install.txt delete mode 100644 vendor/cryptopp/License.txt delete mode 100644 vendor/cryptopp/Readme.txt delete mode 100644 vendor/cryptopp/TestData/3desval.dat delete mode 100644 vendor/cryptopp/TestData/3wayval.dat delete mode 100644 vendor/cryptopp/TestData/aria.dat delete mode 100644 vendor/cryptopp/TestData/camellia.dat delete mode 100644 vendor/cryptopp/TestData/cast128v.dat delete mode 100644 vendor/cryptopp/TestData/cast256v.dat delete mode 100644 vendor/cryptopp/TestData/defdmac1.bin delete mode 100644 vendor/cryptopp/TestData/defdmac2.bin delete mode 100644 vendor/cryptopp/TestData/descert.dat delete mode 100644 vendor/cryptopp/TestData/dh1024.dat delete mode 100644 vendor/cryptopp/TestData/dh2048.dat delete mode 100644 vendor/cryptopp/TestData/dlie1024.dat delete mode 100644 vendor/cryptopp/TestData/dlie2048.dat delete mode 100644 vendor/cryptopp/TestData/dsa1024.dat delete mode 100644 vendor/cryptopp/TestData/dsa1024b.dat delete mode 100644 vendor/cryptopp/TestData/dsa512.dat delete mode 100644 vendor/cryptopp/TestData/ecies_p160.dat delete mode 100644 vendor/cryptopp/TestData/ecies_t163.dat delete mode 100644 vendor/cryptopp/TestData/ed25519.dat delete mode 100644 vendor/cryptopp/TestData/ed25519v0.dat delete mode 100644 vendor/cryptopp/TestData/ed25519v1.dat delete mode 100644 vendor/cryptopp/TestData/elgc1024.dat delete mode 100644 vendor/cryptopp/TestData/esig1023.dat delete mode 100644 vendor/cryptopp/TestData/esig1536.dat delete mode 100644 vendor/cryptopp/TestData/esig2046.dat delete mode 100644 vendor/cryptopp/TestData/fhmqv160.dat delete mode 100644 vendor/cryptopp/TestData/fhmqv256.dat delete mode 100644 vendor/cryptopp/TestData/fhmqv384.dat delete mode 100644 vendor/cryptopp/TestData/fhmqv512.dat delete mode 100644 vendor/cryptopp/TestData/gostval.dat delete mode 100644 vendor/cryptopp/TestData/hmqv160.dat delete mode 100644 vendor/cryptopp/TestData/hmqv256.dat delete mode 100644 vendor/cryptopp/TestData/hmqv384.dat delete mode 100644 vendor/cryptopp/TestData/hmqv512.dat delete mode 100644 vendor/cryptopp/TestData/ideaval.dat delete mode 100644 vendor/cryptopp/TestData/luc1024.dat delete mode 100644 vendor/cryptopp/TestData/luc2048.dat delete mode 100644 vendor/cryptopp/TestData/lucc1024.dat delete mode 100644 vendor/cryptopp/TestData/lucc512.dat delete mode 100644 vendor/cryptopp/TestData/lucd1024.dat delete mode 100644 vendor/cryptopp/TestData/lucd512.dat delete mode 100644 vendor/cryptopp/TestData/lucs1024.dat delete mode 100644 vendor/cryptopp/TestData/lucs512.dat delete mode 100644 vendor/cryptopp/TestData/marsval.dat delete mode 100644 vendor/cryptopp/TestData/mqv1024.dat delete mode 100644 vendor/cryptopp/TestData/mqv2048.dat delete mode 100644 vendor/cryptopp/TestData/nr1024.dat delete mode 100644 vendor/cryptopp/TestData/nr2048.dat delete mode 100644 vendor/cryptopp/TestData/rabi1024.dat delete mode 100644 vendor/cryptopp/TestData/rabi2048.dat delete mode 100644 vendor/cryptopp/TestData/rc2val.dat delete mode 100644 vendor/cryptopp/TestData/rc5val.dat delete mode 100644 vendor/cryptopp/TestData/rc6val.dat delete mode 100644 vendor/cryptopp/TestData/rijndael.dat delete mode 100644 vendor/cryptopp/TestData/rsa1024.dat delete mode 100644 vendor/cryptopp/TestData/rsa2048.dat delete mode 100644 vendor/cryptopp/TestData/rsa2048a.dat delete mode 100644 vendor/cryptopp/TestData/rsa400pb.dat delete mode 100644 vendor/cryptopp/TestData/rsa400pv.dat delete mode 100644 vendor/cryptopp/TestData/rsa512a.dat delete mode 100644 vendor/cryptopp/TestData/rw1024.dat delete mode 100644 vendor/cryptopp/TestData/rw2048.dat delete mode 100644 vendor/cryptopp/TestData/saferval.dat delete mode 100644 vendor/cryptopp/TestData/serpentv.dat delete mode 100644 vendor/cryptopp/TestData/shacal2v.dat delete mode 100644 vendor/cryptopp/TestData/sharkval.dat delete mode 100644 vendor/cryptopp/TestData/skipjack.dat delete mode 100644 vendor/cryptopp/TestData/squareva.dat delete mode 100644 vendor/cryptopp/TestData/twofishv.dat delete mode 100644 vendor/cryptopp/TestData/usage.dat delete mode 100644 vendor/cryptopp/TestData/x25519.dat delete mode 100644 vendor/cryptopp/TestData/x25519v0.dat delete mode 100644 vendor/cryptopp/TestData/x25519v1.dat delete mode 100644 vendor/cryptopp/TestData/xtrdh171.dat delete mode 100644 vendor/cryptopp/TestData/xtrdh342.dat delete mode 100644 vendor/cryptopp/TestPrograms/test_32bit.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_64bit.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_acle_header.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_aes.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_asimd.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_crc.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_neon.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_neon_header.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_pmull.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_sha1.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_sha256.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_sha3.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_sha512.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_sm3.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_arm_sm4.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_asm_mixed.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_alignas.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_alignof.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_assert.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_atomic.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_auto.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_constexpr.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_deletefn.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_enumtype.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_initializer.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_lambda.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_noexcept.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_nullptr.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_staticinit.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_sync.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx11_vartemplates.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx14.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx17.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx17_assert.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx17_exceptions.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_cxx98_exception.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_glibc.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_newlib.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_aes.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_altivec.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_power7.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_power8.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_power9.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_sha.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_ppc_vmull.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_pthreads.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_aes.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_avx.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_avx2.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_avx512.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_clmul.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_cpuid.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_rdrand.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_rdseed.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_sha.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_sse2.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_sse3.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_sse41.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_sse42.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_ssse3.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_via_aes.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_via_rng.cpp delete mode 100644 vendor/cryptopp/TestPrograms/test_x86_via_sha.cpp delete mode 100644 vendor/cryptopp/TestVectors/Readme.txt delete mode 100644 vendor/cryptopp/TestVectors/aead.txt delete mode 100644 vendor/cryptopp/TestVectors/aes.txt delete mode 100644 vendor/cryptopp/TestVectors/all.txt delete mode 100644 vendor/cryptopp/TestVectors/aria.txt delete mode 100644 vendor/cryptopp/TestVectors/blake2.txt delete mode 100644 vendor/cryptopp/TestVectors/blake2b.txt delete mode 100644 vendor/cryptopp/TestVectors/blake2s.txt delete mode 100644 vendor/cryptopp/TestVectors/camellia.txt delete mode 100644 vendor/cryptopp/TestVectors/ccm.txt delete mode 100644 vendor/cryptopp/TestVectors/chacha.txt delete mode 100644 vendor/cryptopp/TestVectors/chacha20poly1305.txt delete mode 100644 vendor/cryptopp/TestVectors/chacha_tls.txt delete mode 100644 vendor/cryptopp/TestVectors/cham.txt delete mode 100644 vendor/cryptopp/TestVectors/cmac.txt delete mode 100644 vendor/cryptopp/TestVectors/dlies.txt delete mode 100644 vendor/cryptopp/TestVectors/dsa.txt delete mode 100644 vendor/cryptopp/TestVectors/dsa_1363.txt delete mode 100644 vendor/cryptopp/TestVectors/dsa_rfc6979.txt delete mode 100644 vendor/cryptopp/TestVectors/eax.txt delete mode 100644 vendor/cryptopp/TestVectors/esign.txt delete mode 100644 vendor/cryptopp/TestVectors/gcm.txt delete mode 100644 vendor/cryptopp/TestVectors/hc128.txt delete mode 100644 vendor/cryptopp/TestVectors/hc256.txt delete mode 100644 vendor/cryptopp/TestVectors/hight.txt delete mode 100644 vendor/cryptopp/TestVectors/hkdf.txt delete mode 100644 vendor/cryptopp/TestVectors/hmac.txt delete mode 100644 vendor/cryptopp/TestVectors/kalyna.txt delete mode 100644 vendor/cryptopp/TestVectors/keccak.txt delete mode 100644 vendor/cryptopp/TestVectors/lea.txt delete mode 100644 vendor/cryptopp/TestVectors/lsh.txt delete mode 100644 vendor/cryptopp/TestVectors/lsh256.txt delete mode 100644 vendor/cryptopp/TestVectors/lsh512.txt delete mode 100644 vendor/cryptopp/TestVectors/lsh512_256.txt delete mode 100644 vendor/cryptopp/TestVectors/mars.txt delete mode 100644 vendor/cryptopp/TestVectors/nr.txt delete mode 100644 vendor/cryptopp/TestVectors/panama.txt delete mode 100644 vendor/cryptopp/TestVectors/poly1305_tls.txt delete mode 100644 vendor/cryptopp/TestVectors/poly1305aes.txt delete mode 100644 vendor/cryptopp/TestVectors/rabbit.txt delete mode 100644 vendor/cryptopp/TestVectors/rsa_oaep.txt delete mode 100644 vendor/cryptopp/TestVectors/rsa_pkcs1_1_5.txt delete mode 100644 vendor/cryptopp/TestVectors/rsa_pss.txt delete mode 100644 vendor/cryptopp/TestVectors/rw.txt delete mode 100644 vendor/cryptopp/TestVectors/salsa.txt delete mode 100644 vendor/cryptopp/TestVectors/seal.txt delete mode 100644 vendor/cryptopp/TestVectors/seed.txt delete mode 100644 vendor/cryptopp/TestVectors/sha.txt delete mode 100644 vendor/cryptopp/TestVectors/sha1_160_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha1_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha2.txt delete mode 100644 vendor/cryptopp/TestVectors/sha2_224_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha2_256_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha2_384_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha2_512_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha2_fips_180.txt delete mode 100644 vendor/cryptopp/TestVectors/sha3.txt delete mode 100644 vendor/cryptopp/TestVectors/sha3_224_fips_202.txt delete mode 100644 vendor/cryptopp/TestVectors/sha3_256_fips_202.txt delete mode 100644 vendor/cryptopp/TestVectors/sha3_384_fips_202.txt delete mode 100644 vendor/cryptopp/TestVectors/sha3_512_fips_202.txt delete mode 100644 vendor/cryptopp/TestVectors/sha3_fips_202.txt delete mode 100644 vendor/cryptopp/TestVectors/shacal2.txt delete mode 100644 vendor/cryptopp/TestVectors/shake.txt delete mode 100644 vendor/cryptopp/TestVectors/simeck.txt delete mode 100644 vendor/cryptopp/TestVectors/simon.txt delete mode 100644 vendor/cryptopp/TestVectors/siphash.txt delete mode 100644 vendor/cryptopp/TestVectors/skipjack.txt delete mode 100644 vendor/cryptopp/TestVectors/sm3.txt delete mode 100644 vendor/cryptopp/TestVectors/sm4.txt delete mode 100644 vendor/cryptopp/TestVectors/sosemanuk.txt delete mode 100644 vendor/cryptopp/TestVectors/speck.txt delete mode 100644 vendor/cryptopp/TestVectors/tea.txt delete mode 100644 vendor/cryptopp/TestVectors/threefish.txt delete mode 100644 vendor/cryptopp/TestVectors/ttmac.txt delete mode 100644 vendor/cryptopp/TestVectors/vmac.txt delete mode 100644 vendor/cryptopp/TestVectors/wake.txt delete mode 100644 vendor/cryptopp/TestVectors/whrlpool.txt delete mode 100644 vendor/cryptopp/TestVectors/xchacha.txt delete mode 100644 vendor/cryptopp/TestVectors/xts.txt delete mode 100644 vendor/cryptopp/adhoc.cpp.proto delete mode 100644 vendor/cryptopp/adler32.cpp delete mode 100644 vendor/cryptopp/adler32.h delete mode 100644 vendor/cryptopp/adv_simd.h delete mode 100644 vendor/cryptopp/aes.h delete mode 100644 vendor/cryptopp/aes_armv4.S delete mode 100644 vendor/cryptopp/aes_armv4.h delete mode 100644 vendor/cryptopp/algebra.cpp delete mode 100644 vendor/cryptopp/algebra.h delete mode 100644 vendor/cryptopp/algparam.cpp delete mode 100644 vendor/cryptopp/algparam.h delete mode 100644 vendor/cryptopp/allocate.cpp delete mode 100644 vendor/cryptopp/allocate.h delete mode 100644 vendor/cryptopp/arc4.cpp delete mode 100644 vendor/cryptopp/arc4.h delete mode 100644 vendor/cryptopp/argnames.h delete mode 100644 vendor/cryptopp/aria.cpp delete mode 100644 vendor/cryptopp/aria.h delete mode 100644 vendor/cryptopp/aria_simd.cpp delete mode 100644 vendor/cryptopp/ariatab.cpp delete mode 100644 vendor/cryptopp/arm_simd.h delete mode 100644 vendor/cryptopp/asn.cpp delete mode 100644 vendor/cryptopp/asn.h delete mode 100644 vendor/cryptopp/authenc.cpp delete mode 100644 vendor/cryptopp/authenc.h delete mode 100644 vendor/cryptopp/base32.cpp delete mode 100644 vendor/cryptopp/base32.h delete mode 100644 vendor/cryptopp/base64.cpp delete mode 100644 vendor/cryptopp/base64.h delete mode 100644 vendor/cryptopp/basecode.cpp delete mode 100644 vendor/cryptopp/basecode.h delete mode 100644 vendor/cryptopp/bds10.zip delete mode 100644 vendor/cryptopp/bench.h delete mode 100644 vendor/cryptopp/bench1.cpp delete mode 100644 vendor/cryptopp/bench2.cpp delete mode 100644 vendor/cryptopp/bench3.cpp delete mode 100644 vendor/cryptopp/bfinit.cpp delete mode 100644 vendor/cryptopp/blake2.cpp delete mode 100644 vendor/cryptopp/blake2.h delete mode 100644 vendor/cryptopp/blake2b_simd.cpp delete mode 100644 vendor/cryptopp/blake2s_simd.cpp delete mode 100644 vendor/cryptopp/blowfish.cpp delete mode 100644 vendor/cryptopp/blowfish.h delete mode 100644 vendor/cryptopp/blumshub.cpp delete mode 100644 vendor/cryptopp/blumshub.h delete mode 100644 vendor/cryptopp/camellia.cpp delete mode 100644 vendor/cryptopp/camellia.h delete mode 100644 vendor/cryptopp/cast.cpp delete mode 100644 vendor/cryptopp/cast.h delete mode 100644 vendor/cryptopp/casts.cpp delete mode 100644 vendor/cryptopp/cbcmac.cpp delete mode 100644 vendor/cryptopp/cbcmac.h delete mode 100644 vendor/cryptopp/ccm.cpp delete mode 100644 vendor/cryptopp/ccm.h delete mode 100644 vendor/cryptopp/chacha.cpp delete mode 100644 vendor/cryptopp/chacha.h delete mode 100644 vendor/cryptopp/chacha_avx.cpp delete mode 100644 vendor/cryptopp/chacha_simd.cpp delete mode 100644 vendor/cryptopp/chachapoly.cpp delete mode 100644 vendor/cryptopp/chachapoly.h delete mode 100644 vendor/cryptopp/cham.cpp delete mode 100644 vendor/cryptopp/cham.h delete mode 100644 vendor/cryptopp/cham_simd.cpp delete mode 100644 vendor/cryptopp/channels.cpp delete mode 100644 vendor/cryptopp/channels.h delete mode 100644 vendor/cryptopp/cmac.cpp delete mode 100644 vendor/cryptopp/cmac.h delete mode 100644 vendor/cryptopp/config.h delete mode 100644 vendor/cryptopp/config_align.h delete mode 100644 vendor/cryptopp/config_asm.h delete mode 100644 vendor/cryptopp/config_cpu.h delete mode 100644 vendor/cryptopp/config_cxx.h delete mode 100644 vendor/cryptopp/config_dll.h delete mode 100644 vendor/cryptopp/config_int.h delete mode 100644 vendor/cryptopp/config_misc.h delete mode 100644 vendor/cryptopp/config_ns.h delete mode 100644 vendor/cryptopp/config_os.h delete mode 100644 vendor/cryptopp/config_ver.h delete mode 100644 vendor/cryptopp/cpu.cpp delete mode 100644 vendor/cryptopp/cpu.h delete mode 100644 vendor/cryptopp/crc.cpp delete mode 100644 vendor/cryptopp/crc.h delete mode 100644 vendor/cryptopp/crc_simd.cpp delete mode 100644 vendor/cryptopp/cryptdll.vcxproj delete mode 100644 vendor/cryptopp/cryptdll.vcxproj.filters delete mode 100644 vendor/cryptopp/cryptest.nmake delete mode 100644 vendor/cryptopp/cryptest.sln delete mode 100644 vendor/cryptopp/cryptest.vcxproj delete mode 100644 vendor/cryptopp/cryptest.vcxproj.filters delete mode 100644 vendor/cryptopp/cryptest.vcxproj.user delete mode 100644 vendor/cryptopp/cryptlib.cpp delete mode 100644 vendor/cryptopp/cryptlib.h delete mode 100644 vendor/cryptopp/cryptlib.vcxproj delete mode 100644 vendor/cryptopp/cryptlib.vcxproj.filters delete mode 100644 vendor/cryptopp/cryptopp.rc delete mode 100644 vendor/cryptopp/cryptopp.supp delete mode 100644 vendor/cryptopp/darn.cpp delete mode 100644 vendor/cryptopp/darn.h delete mode 100644 vendor/cryptopp/datatest.cpp delete mode 100644 vendor/cryptopp/default.cpp delete mode 100644 vendor/cryptopp/default.h delete mode 100644 vendor/cryptopp/des.cpp delete mode 100644 vendor/cryptopp/des.h delete mode 100644 vendor/cryptopp/dessp.cpp delete mode 100644 vendor/cryptopp/dh.cpp delete mode 100644 vendor/cryptopp/dh.h delete mode 100644 vendor/cryptopp/dh2.cpp delete mode 100644 vendor/cryptopp/dh2.h delete mode 100644 vendor/cryptopp/dll.cpp delete mode 100644 vendor/cryptopp/dll.h delete mode 100644 vendor/cryptopp/dlltest.cpp delete mode 100644 vendor/cryptopp/dlltest.vcxproj delete mode 100644 vendor/cryptopp/dlltest.vcxproj.filters delete mode 100644 vendor/cryptopp/dmac.h delete mode 100644 vendor/cryptopp/donna.h delete mode 100644 vendor/cryptopp/donna_32.cpp delete mode 100644 vendor/cryptopp/donna_32.h delete mode 100644 vendor/cryptopp/donna_64.cpp delete mode 100644 vendor/cryptopp/donna_64.h delete mode 100644 vendor/cryptopp/donna_sse.cpp delete mode 100644 vendor/cryptopp/donna_sse.h delete mode 100644 vendor/cryptopp/drbg.h delete mode 100644 vendor/cryptopp/dsa.cpp delete mode 100644 vendor/cryptopp/dsa.h delete mode 100644 vendor/cryptopp/eax.cpp delete mode 100644 vendor/cryptopp/eax.h delete mode 100644 vendor/cryptopp/ec2n.cpp delete mode 100644 vendor/cryptopp/ec2n.h delete mode 100644 vendor/cryptopp/eccrypto.cpp delete mode 100644 vendor/cryptopp/eccrypto.h delete mode 100644 vendor/cryptopp/ecp.cpp delete mode 100644 vendor/cryptopp/ecp.h delete mode 100644 vendor/cryptopp/ecpoint.h delete mode 100644 vendor/cryptopp/elgamal.cpp delete mode 100644 vendor/cryptopp/elgamal.h delete mode 100644 vendor/cryptopp/emsa2.cpp delete mode 100644 vendor/cryptopp/emsa2.h delete mode 100644 vendor/cryptopp/eprecomp.cpp delete mode 100644 vendor/cryptopp/eprecomp.h delete mode 100644 vendor/cryptopp/esign.cpp delete mode 100644 vendor/cryptopp/esign.h delete mode 100644 vendor/cryptopp/factory.h delete mode 100644 vendor/cryptopp/fhmqv.h delete mode 100644 vendor/cryptopp/files.cpp delete mode 100644 vendor/cryptopp/files.h delete mode 100644 vendor/cryptopp/filters.cpp delete mode 100644 vendor/cryptopp/filters.h delete mode 100644 vendor/cryptopp/fips140.cpp delete mode 100644 vendor/cryptopp/fips140.h delete mode 100644 vendor/cryptopp/fipsalgt.cpp delete mode 100644 vendor/cryptopp/fipstest.cpp delete mode 100644 vendor/cryptopp/fltrimpl.h delete mode 100644 vendor/cryptopp/gcm.cpp delete mode 100644 vendor/cryptopp/gcm.h delete mode 100644 vendor/cryptopp/gcm_simd.cpp delete mode 100644 vendor/cryptopp/gf256.cpp delete mode 100644 vendor/cryptopp/gf256.h delete mode 100644 vendor/cryptopp/gf2_32.cpp delete mode 100644 vendor/cryptopp/gf2_32.h delete mode 100644 vendor/cryptopp/gf2n.cpp delete mode 100644 vendor/cryptopp/gf2n.h delete mode 100644 vendor/cryptopp/gf2n_simd.cpp delete mode 100644 vendor/cryptopp/gfpcrypt.cpp delete mode 100644 vendor/cryptopp/gfpcrypt.h delete mode 100644 vendor/cryptopp/gost.cpp delete mode 100644 vendor/cryptopp/gost.h delete mode 100644 vendor/cryptopp/gzip.cpp delete mode 100644 vendor/cryptopp/gzip.h delete mode 100644 vendor/cryptopp/hashfwd.h delete mode 100644 vendor/cryptopp/hc128.cpp delete mode 100644 vendor/cryptopp/hc128.h delete mode 100644 vendor/cryptopp/hc256.cpp delete mode 100644 vendor/cryptopp/hc256.h delete mode 100644 vendor/cryptopp/hex.cpp delete mode 100644 vendor/cryptopp/hex.h delete mode 100644 vendor/cryptopp/hight.cpp delete mode 100644 vendor/cryptopp/hight.h delete mode 100644 vendor/cryptopp/hkdf.h delete mode 100644 vendor/cryptopp/hmac.cpp delete mode 100644 vendor/cryptopp/hmac.h delete mode 100644 vendor/cryptopp/hmqv.h delete mode 100644 vendor/cryptopp/hrtimer.cpp delete mode 100644 vendor/cryptopp/hrtimer.h delete mode 100644 vendor/cryptopp/ida.cpp delete mode 100644 vendor/cryptopp/ida.h delete mode 100644 vendor/cryptopp/idea.cpp delete mode 100644 vendor/cryptopp/idea.h delete mode 100644 vendor/cryptopp/integer.cpp delete mode 100644 vendor/cryptopp/integer.h delete mode 100644 vendor/cryptopp/iterhash.cpp delete mode 100644 vendor/cryptopp/iterhash.h delete mode 100644 vendor/cryptopp/kalyna.cpp delete mode 100644 vendor/cryptopp/kalyna.h delete mode 100644 vendor/cryptopp/kalynatab.cpp delete mode 100644 vendor/cryptopp/keccak.cpp delete mode 100644 vendor/cryptopp/keccak.h delete mode 100644 vendor/cryptopp/keccak_core.cpp delete mode 100644 vendor/cryptopp/keccak_simd.cpp delete mode 100644 vendor/cryptopp/lea.cpp delete mode 100644 vendor/cryptopp/lea.h delete mode 100644 vendor/cryptopp/lea_simd.cpp delete mode 100644 vendor/cryptopp/lsh.h delete mode 100644 vendor/cryptopp/lsh256.cpp delete mode 100644 vendor/cryptopp/lsh256_avx.cpp delete mode 100644 vendor/cryptopp/lsh256_sse.cpp delete mode 100644 vendor/cryptopp/lsh512.cpp delete mode 100644 vendor/cryptopp/lsh512_avx.cpp delete mode 100644 vendor/cryptopp/lsh512_sse.cpp delete mode 100644 vendor/cryptopp/lubyrack.h delete mode 100644 vendor/cryptopp/luc.cpp delete mode 100644 vendor/cryptopp/luc.h delete mode 100644 vendor/cryptopp/mars.cpp delete mode 100644 vendor/cryptopp/mars.h delete mode 100644 vendor/cryptopp/marss.cpp delete mode 100644 vendor/cryptopp/md2.cpp delete mode 100644 vendor/cryptopp/md2.h delete mode 100644 vendor/cryptopp/md4.cpp delete mode 100644 vendor/cryptopp/md4.h delete mode 100644 vendor/cryptopp/md5.cpp delete mode 100644 vendor/cryptopp/md5.h delete mode 100644 vendor/cryptopp/mdc.h delete mode 100644 vendor/cryptopp/mersenne.h delete mode 100644 vendor/cryptopp/misc.cpp delete mode 100644 vendor/cryptopp/misc.h delete mode 100644 vendor/cryptopp/modarith.h delete mode 100644 vendor/cryptopp/modes.cpp delete mode 100644 vendor/cryptopp/modes.h delete mode 100644 vendor/cryptopp/modexppc.h delete mode 100644 vendor/cryptopp/mqueue.cpp delete mode 100644 vendor/cryptopp/mqueue.h delete mode 100644 vendor/cryptopp/mqv.cpp delete mode 100644 vendor/cryptopp/mqv.h delete mode 100644 vendor/cryptopp/naclite.h delete mode 100644 vendor/cryptopp/nbtheory.cpp delete mode 100644 vendor/cryptopp/nbtheory.h delete mode 100644 vendor/cryptopp/neon_simd.cpp delete mode 100644 vendor/cryptopp/nr.h delete mode 100644 vendor/cryptopp/oaep.cpp delete mode 100644 vendor/cryptopp/oaep.h delete mode 100644 vendor/cryptopp/oids.h delete mode 100644 vendor/cryptopp/osrng.cpp delete mode 100644 vendor/cryptopp/osrng.h delete mode 100644 vendor/cryptopp/ossig.h delete mode 100644 vendor/cryptopp/padlkrng.cpp delete mode 100644 vendor/cryptopp/padlkrng.h delete mode 100644 vendor/cryptopp/panama.cpp delete mode 100644 vendor/cryptopp/panama.h delete mode 100644 vendor/cryptopp/pch.cpp delete mode 100644 vendor/cryptopp/pch.h delete mode 100644 vendor/cryptopp/pkcspad.cpp delete mode 100644 vendor/cryptopp/pkcspad.h delete mode 100644 vendor/cryptopp/poly1305.cpp delete mode 100644 vendor/cryptopp/poly1305.h delete mode 100644 vendor/cryptopp/polynomi.cpp delete mode 100644 vendor/cryptopp/polynomi.h delete mode 100644 vendor/cryptopp/ppc_power7.cpp delete mode 100644 vendor/cryptopp/ppc_power8.cpp delete mode 100644 vendor/cryptopp/ppc_power9.cpp delete mode 100644 vendor/cryptopp/ppc_simd.cpp delete mode 100644 vendor/cryptopp/ppc_simd.h delete mode 100644 vendor/cryptopp/pssr.cpp delete mode 100644 vendor/cryptopp/pssr.h delete mode 100644 vendor/cryptopp/pubkey.cpp delete mode 100644 vendor/cryptopp/pubkey.h delete mode 100644 vendor/cryptopp/pwdbased.h delete mode 100644 vendor/cryptopp/queue.cpp delete mode 100644 vendor/cryptopp/queue.h delete mode 100644 vendor/cryptopp/rabbit.cpp delete mode 100644 vendor/cryptopp/rabbit.h delete mode 100644 vendor/cryptopp/rabin.cpp delete mode 100644 vendor/cryptopp/rabin.h delete mode 100644 vendor/cryptopp/randpool.cpp delete mode 100644 vendor/cryptopp/randpool.h delete mode 100644 vendor/cryptopp/rc2.cpp delete mode 100644 vendor/cryptopp/rc2.h delete mode 100644 vendor/cryptopp/rc5.cpp delete mode 100644 vendor/cryptopp/rc5.h delete mode 100644 vendor/cryptopp/rc6.cpp delete mode 100644 vendor/cryptopp/rc6.h delete mode 100644 vendor/cryptopp/rdrand.asm delete mode 100644 vendor/cryptopp/rdrand.cpp delete mode 100644 vendor/cryptopp/rdrand.h delete mode 100644 vendor/cryptopp/rdseed.asm delete mode 100644 vendor/cryptopp/rdtables.cpp delete mode 100644 vendor/cryptopp/regtest1.cpp delete mode 100644 vendor/cryptopp/regtest2.cpp delete mode 100644 vendor/cryptopp/regtest3.cpp delete mode 100644 vendor/cryptopp/regtest4.cpp delete mode 100644 vendor/cryptopp/resource.h delete mode 100644 vendor/cryptopp/rijndael.cpp delete mode 100644 vendor/cryptopp/rijndael.h delete mode 100644 vendor/cryptopp/rijndael_simd.cpp delete mode 100644 vendor/cryptopp/ripemd.cpp delete mode 100644 vendor/cryptopp/ripemd.h delete mode 100644 vendor/cryptopp/rng.cpp delete mode 100644 vendor/cryptopp/rng.h delete mode 100644 vendor/cryptopp/rsa.cpp delete mode 100644 vendor/cryptopp/rsa.h delete mode 100644 vendor/cryptopp/rw.cpp delete mode 100644 vendor/cryptopp/rw.h delete mode 100644 vendor/cryptopp/safer.cpp delete mode 100644 vendor/cryptopp/safer.h delete mode 100644 vendor/cryptopp/salsa.cpp delete mode 100644 vendor/cryptopp/salsa.h delete mode 100644 vendor/cryptopp/scrypt.cpp delete mode 100644 vendor/cryptopp/scrypt.h delete mode 100644 vendor/cryptopp/seal.cpp delete mode 100644 vendor/cryptopp/seal.h delete mode 100644 vendor/cryptopp/secblock.h delete mode 100644 vendor/cryptopp/secblockfwd.h delete mode 100644 vendor/cryptopp/seckey.h delete mode 100644 vendor/cryptopp/seed.cpp delete mode 100644 vendor/cryptopp/seed.h delete mode 100644 vendor/cryptopp/serpent.cpp delete mode 100644 vendor/cryptopp/serpent.h delete mode 100644 vendor/cryptopp/serpentp.h delete mode 100644 vendor/cryptopp/sha.cpp delete mode 100644 vendor/cryptopp/sha.h delete mode 100644 vendor/cryptopp/sha1_armv4.S delete mode 100644 vendor/cryptopp/sha1_armv4.h delete mode 100644 vendor/cryptopp/sha256_armv4.S delete mode 100644 vendor/cryptopp/sha256_armv4.h delete mode 100644 vendor/cryptopp/sha3.cpp delete mode 100644 vendor/cryptopp/sha3.h delete mode 100644 vendor/cryptopp/sha512_armv4.S delete mode 100644 vendor/cryptopp/sha512_armv4.h delete mode 100644 vendor/cryptopp/sha_simd.cpp delete mode 100644 vendor/cryptopp/shacal2.cpp delete mode 100644 vendor/cryptopp/shacal2.h delete mode 100644 vendor/cryptopp/shacal2_simd.cpp delete mode 100644 vendor/cryptopp/shake.cpp delete mode 100644 vendor/cryptopp/shake.h delete mode 100644 vendor/cryptopp/shark.cpp delete mode 100644 vendor/cryptopp/shark.h delete mode 100644 vendor/cryptopp/sharkbox.cpp delete mode 100644 vendor/cryptopp/simeck.cpp delete mode 100644 vendor/cryptopp/simeck.h delete mode 100644 vendor/cryptopp/simon.cpp delete mode 100644 vendor/cryptopp/simon.h delete mode 100644 vendor/cryptopp/simon128_simd.cpp delete mode 100644 vendor/cryptopp/simple.cpp delete mode 100644 vendor/cryptopp/simple.h delete mode 100644 vendor/cryptopp/siphash.h delete mode 100644 vendor/cryptopp/skipjack.cpp delete mode 100644 vendor/cryptopp/skipjack.h delete mode 100644 vendor/cryptopp/sm3.cpp delete mode 100644 vendor/cryptopp/sm3.h delete mode 100644 vendor/cryptopp/sm4.cpp delete mode 100644 vendor/cryptopp/sm4.h delete mode 100644 vendor/cryptopp/sm4_simd.cpp delete mode 100644 vendor/cryptopp/smartptr.h delete mode 100644 vendor/cryptopp/sosemanuk.cpp delete mode 100644 vendor/cryptopp/sosemanuk.h delete mode 100644 vendor/cryptopp/speck.cpp delete mode 100644 vendor/cryptopp/speck.h delete mode 100644 vendor/cryptopp/speck128_simd.cpp delete mode 100644 vendor/cryptopp/square.cpp delete mode 100644 vendor/cryptopp/square.h delete mode 100644 vendor/cryptopp/squaretb.cpp delete mode 100644 vendor/cryptopp/sse_simd.cpp delete mode 100644 vendor/cryptopp/stdcpp.h delete mode 100644 vendor/cryptopp/strciphr.cpp delete mode 100644 vendor/cryptopp/strciphr.h delete mode 100644 vendor/cryptopp/tea.cpp delete mode 100644 vendor/cryptopp/tea.h delete mode 100644 vendor/cryptopp/test.cpp delete mode 100644 vendor/cryptopp/tftables.cpp delete mode 100644 vendor/cryptopp/threefish.cpp delete mode 100644 vendor/cryptopp/threefish.h delete mode 100644 vendor/cryptopp/tiger.cpp delete mode 100644 vendor/cryptopp/tiger.h delete mode 100644 vendor/cryptopp/tigertab.cpp delete mode 100644 vendor/cryptopp/trap.h delete mode 100644 vendor/cryptopp/trunhash.h delete mode 100644 vendor/cryptopp/ttmac.cpp delete mode 100644 vendor/cryptopp/ttmac.h delete mode 100644 vendor/cryptopp/tweetnacl.cpp delete mode 100644 vendor/cryptopp/tweetnacl.h delete mode 100644 vendor/cryptopp/twofish.cpp delete mode 100644 vendor/cryptopp/twofish.h delete mode 100644 vendor/cryptopp/validat0.cpp delete mode 100644 vendor/cryptopp/validat1.cpp delete mode 100644 vendor/cryptopp/validat10.cpp delete mode 100644 vendor/cryptopp/validat2.cpp delete mode 100644 vendor/cryptopp/validat3.cpp delete mode 100644 vendor/cryptopp/validat4.cpp delete mode 100644 vendor/cryptopp/validat5.cpp delete mode 100644 vendor/cryptopp/validat6.cpp delete mode 100644 vendor/cryptopp/validat7.cpp delete mode 100644 vendor/cryptopp/validat8.cpp delete mode 100644 vendor/cryptopp/validat9.cpp delete mode 100644 vendor/cryptopp/validate.h delete mode 100644 vendor/cryptopp/vmac.cpp delete mode 100644 vendor/cryptopp/vmac.h delete mode 100644 vendor/cryptopp/vs2005.zip delete mode 100644 vendor/cryptopp/wake.cpp delete mode 100644 vendor/cryptopp/wake.h delete mode 100644 vendor/cryptopp/whrlpool.cpp delete mode 100644 vendor/cryptopp/whrlpool.h delete mode 100644 vendor/cryptopp/words.h delete mode 100644 vendor/cryptopp/x64dll.asm delete mode 100644 vendor/cryptopp/x64masm.asm delete mode 100644 vendor/cryptopp/xed25519.cpp delete mode 100644 vendor/cryptopp/xed25519.h delete mode 100644 vendor/cryptopp/xtr.cpp delete mode 100644 vendor/cryptopp/xtr.h delete mode 100644 vendor/cryptopp/xtrcrypt.cpp delete mode 100644 vendor/cryptopp/xtrcrypt.h delete mode 100644 vendor/cryptopp/xts.cpp delete mode 100644 vendor/cryptopp/xts.h delete mode 100644 vendor/cryptopp/zdeflate.cpp delete mode 100644 vendor/cryptopp/zdeflate.h delete mode 100644 vendor/cryptopp/zinflate.cpp delete mode 100644 vendor/cryptopp/zinflate.h delete mode 100644 vendor/cryptopp/zlib.cpp delete mode 100644 vendor/cryptopp/zlib.h create mode 100644 vendor/libsodium/CMakeLists.txt create mode 100644 vendor/libsodium/src/Makefile.am create mode 100644 vendor/libsodium/src/Makefile.in create mode 100644 vendor/libsodium/src/libsodium/Makefile.am create mode 100644 vendor/libsodium/src/libsodium/Makefile.in create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aead_aegis128l.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_aesni.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_armcrypto.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_common.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/aegis128l_soft.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis128l/implementations.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aead_aegis256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_aesni.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_aesni.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_armcrypto.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_common.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_soft.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/aegis256_soft.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aegis256/implementations.h create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aes256gcm/aead_aes256gcm.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/chacha20poly1305/aead_chacha20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_aead/xchacha20poly1305/aead_xchacha20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_auth/crypto_auth.c create mode 100644 vendor/libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c create mode 100644 vendor/libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_box/crypto_box.c create mode 100644 vendor/libsodium/src/libsodium/crypto_box/crypto_box_easy.c create mode 100644 vendor/libsodium/src/libsodium/crypto_box/crypto_box_seal.c create mode 100644 vendor/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/core_ed25519.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/core_ristretto255.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/constants.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/base.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/base2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/constants.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h create mode 100644 vendor/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_core/softaes/softaes.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/generichash_blake2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-avx2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse41.h create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c create mode 100644 vendor/libsodium/src/libsodium/crypto_generichash/crypto_generichash.c create mode 100644 vendor/libsodium/src/libsodium/crypto_hash/crypto_hash.c create mode 100644 vendor/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c create mode 100644 vendor/libsodium/src/libsodium/crypto_hash/sha256/hash_sha256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c create mode 100644 vendor/libsodium/src/libsodium/crypto_hash/sha512/hash_sha512.c create mode 100644 vendor/libsodium/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c create mode 100644 vendor/libsodium/src/libsodium/crypto_kdf/crypto_kdf.c create mode 100644 vendor/libsodium/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha512.c create mode 100644 vendor/libsodium/src/libsodium/crypto_kx/crypto_kx.c create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.h create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx512f.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-avx2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-avx512f.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-ref.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/crypto_pwhash.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c create mode 100644 vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/crypto_scalarmult.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts.S create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_mul.S create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_pack.S create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.S create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.h create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c create mode 100644 vendor/libsodium/src/libsodium/crypto_scalarmult/ristretto255/ref10/scalarmult_ristretto255_ref10.c create mode 100644 vendor/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.c create mode 100644 vendor/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c create mode 100644 vendor/libsodium/src/libsodium/crypto_secretbox/xchacha20poly1305/secretbox_xchacha20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c create mode 100644 vendor/libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.c create mode 100644 vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash_ref.h create mode 100644 vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c create mode 100644 vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.c create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/crypto_sign.c create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h create mode 100644 vendor/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u0.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u1.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u4.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u8.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/crypto_stream.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u0.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u1.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u4.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u8.h create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208_ref.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/xchacha20/stream_xchacha20.c create mode 100644 vendor/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c create mode 100644 vendor/libsodium/src/libsodium/crypto_verify/verify.c create mode 100644 vendor/libsodium/src/libsodium/include/Makefile.am create mode 100644 vendor/libsodium/src/libsodium/include/Makefile.in create mode 100644 vendor/libsodium/src/libsodium/include/sodium.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/core.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_aead_aegis128l.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_aead_aegis256.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_aead_aes256gcm.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_aead_chacha20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_auth.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha256.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha512.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha512256.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_box.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_ed25519.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_hchacha20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_hsalsa20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_ristretto255.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_salsa20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_salsa2012.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_core_salsa208.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_generichash.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_generichash_blake2b.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_hash.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha256.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha512.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_kdf.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_kdf_blake2b.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_kdf_hkdf_sha256.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_kdf_hkdf_sha512.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_kx.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_argon2i.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_argon2id.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_curve25519.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_ed25519.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_ristretto255.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_secretstream_xchacha20poly1305.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_shorthash.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_shorthash_siphash24.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_sign.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_sign_ed25519.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream_chacha20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa2012.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa208.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream_xchacha20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_stream_xsalsa20.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_verify_16.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_verify_32.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/crypto_verify_64.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/export.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/asm_cet.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/chacha20_ietf_ext.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/common.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/ed25519_ref10.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/implementations.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/mutex.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/softaes.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/private/sse2_64_32.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/randombytes.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/randombytes_internal_random.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/randombytes_sysrandom.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/runtime.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/utils.h create mode 100644 vendor/libsodium/src/libsodium/include/sodium/version.h.in create mode 100644 vendor/libsodium/src/libsodium/randombytes/internal/randombytes_internal_random.c create mode 100644 vendor/libsodium/src/libsodium/randombytes/randombytes.c create mode 100644 vendor/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c create mode 100644 vendor/libsodium/src/libsodium/sodium/codecs.c create mode 100644 vendor/libsodium/src/libsodium/sodium/core.c create mode 100644 vendor/libsodium/src/libsodium/sodium/runtime.c create mode 100644 vendor/libsodium/src/libsodium/sodium/utils.c create mode 100644 vendor/libsodium/src/libsodium/sodium/version.c diff --git a/README.md b/README.md index 8ebb5bd..f543551 100644 --- a/README.md +++ b/README.md @@ -22,27 +22,41 @@ It builds as it is, without external dependencies. ## 📋 Changelog -### 🛠Bug Fixes -* **Horse skill grade check:** Fixed a check that required the horse skill's grade to be exactly 3 (Grand Master) in order to use skills, leaving GMs that set their skill to P unable to use riding skills -* **Quest state loading:** Fixed an issue where quest states (`when login begin`) was being loaded before character affects on `PHASE_GAME` -* **Sura's Flame Ghost mounting:** Fixed Sura's Flame Ghost when mounting. The skill now damages nearby enemies when the horse skill is more than Level 10. -* **Experience points from chests:** Fixed a bug where experience points were being replaced by Experience Rings when opening chests -* **Gold from chests:** Fixed a bug where Gold was being replaced by a Gold inventory item that had no value when opening chests +### Encryption & Security Overhaul -### â¬†ï¸ Feature Improvements -* **Nemere's Watchtower dungeon safeguards:** Added checks for automatically dismounting/prevent mounting of any kind when the character is inside the new Nemere's Watchtower dungeon -* **Conditional damage immunity system:** Added various checks for true per-hit conditional damage immunity with full control via Lua functions as well as clones of the default mob/group spawning Lua functions that return the monsters' VIDs for further manipulation from the quests. Exposed Lua functions below: - * `d.regen_file_with_immunity`: Spawn all monster/groups from a dungeon folder's regen.txt file with conditional immunity embedded from spawn - * `d.regen_file_with_vids`: The VIDs of all spawned monsters/groups from a dungeon folder's regen.txt file are being returned to Lua for further manipulation - * `d.spawn_group_with_immunity`: Spawn a group of monsters via its ID with conditional immunity embedded from spawn - * `d.spawn_group_with_vids`: The VIDs of all monsters from the group spawned are being returned to Lua for further manipulation - * `d.spawn_mob_with_immunity`: Spawn a single monster with conditional immunity embedded from spawn - * `npc.add_damage_immunity_condition`: Add a damage immunity condition to an already spawned monster - * `npc.clear_damage_immunity_conditions`: Clear all damage immunity from a monster so it can take damage normally again - * `npc.is_damage_immune`: Check if a mob has damage immunity using its VID - * `npc.set_damage_immunity`: Set damage immunity to a monster using its VID - * `npc.set_damage_immunity_with_conditions`: Set conditional damage immunity to a monster using its VID - * **Immunity vs Conditional immunity**: When a monster is immune to damage all hits are returning as MISS and it cannot be poisoned, burned, slowed or stunned. A condition is a rule that when applied, the monster's immunity is being ignored (for example, a mob is immune to damage unless the attacker is a Ninja - job 1). Multiple conditions are possible. - * More about the available conditions for damage immunity in `game/char.h` +The entire legacy encryption system has been replaced with [libsodium](https://doc.libsodium.org/). +#### Removed Legacy Crypto +* **Crypto++ (cryptopp) vendor library** — Completely removed from the project +* **Panama cipher** (`CFilterEncoder`, `CFilterDecoder`) — Removed from `NetStream` +* **TEA encryption** (`tea.h`, `tea.cpp`) — Removed from both client and server +* **DH2 key exchange** (`cipher.h`, `cipher.cpp`) — Removed from `EterBase` +* **Camellia cipher** — Removed all references +* **`_IMPROVED_PACKET_ENCRYPTION_`** — Entire system removed (XTEA key scheduling, sequence encryption, key agreement) +* **`adwClientKey[4]`** — Removed from all packet structs (`TPacketCGLogin2`, `TPacketCGLogin3`, `TPacketGDAuthLogin`, `TPacketGDLoginByKey`, `TPacketLoginOnSetup`) and all associated code on both client and server +* **`LSS_SECURITY_KEY`** — Dead code removed (`"testtesttesttest"` hardcoded key, `GetSecurityKey()` function) +#### New Encryption System (libsodium) +* **X25519 key exchange** — `SecureCipher` class handles keypair generation and session key derivation via `crypto_kx_client_session_keys` / `crypto_kx_server_session_keys` +* **XChaCha20-Poly1305 AEAD** — Used for authenticated encryption of handshake tokens (key exchange, session tokens) +* **XChaCha20 stream cipher** — Used for in-place network buffer encryption via `EncryptInPlace()` / `DecryptInPlace()` (zero overhead, nonce-counter based replay prevention) +* **Challenge-response authentication** — HMAC-based (`crypto_auth`) verification during key exchange to prove shared secret derivation +* **New handshake protocol** — `HEADER_GC_KEY_CHALLENGE` / `HEADER_CG_KEY_RESPONSE` / `HEADER_GC_KEY_COMPLETE` packet flow for secure session establishment + +#### Network Encryption Pipeline +* **Client send path** — Data is encrypted at queue time in `CNetworkStream::Send()` (prevents double-encryption on partial TCP sends) +* **Client receive path** — Data is decrypted immediately after `recv()` in `__RecvInternalBuffer()`, before being committed to the buffer +* **Server send path** — Data is encrypted in `DESC::Packet()` via `EncryptInPlace()` after encoding to the output buffer +* **Server receive path** — Newly received bytes are decrypted in `DESC::ProcessInput()` via `DecryptInPlace()` before buffer commit + +#### Login Security Hardening +* **Removed plaintext login path** — `HEADER_CG_LOGIN` (direct password to game server) has been removed. All game server logins now require a login key obtained through the auth server (`HEADER_CG_LOGIN2` / `LoginByKey`) +* **CSPRNG login keys** — `CreateLoginKey()` now uses `randombytes_uniform()` (libsodium) instead of the non-cryptographic Xoshiro128PlusPlus PRNG +* **Single-use login keys** — Keys are consumed (removed from the map) immediately after successful authentication +* **Shorter key expiry** — Expired login keys are cleaned up after 15 seconds (down from 60 seconds). Orphaned keys (descriptor gone, never expired) are also cleaned up +* **Login rate limiting** — Per-IP tracking of failed login attempts. After 5 failures within 60 seconds, the IP is blocked with a `BLOCK` status and disconnected. Counter resets after cooldown or successful login +* **Removed Brazil password bypass** — The `LC_IsBrazil()` block that unconditionally disabled password verification has been removed + +#### Pack File Encryption +* **libsodium-based pack encryption** — `PackLib` now uses XChaCha20-Poly1305 for pack file encryption, replacing the legacy Camellia/XTEA system +* **Secure key derivation** — Pack encryption keys are derived using `crypto_pwhash` (Argon2id) diff --git a/src/common/service.h b/src/common/service.h index 4e5c38c..5505031 100644 --- a/src/common/service.h +++ b/src/common/service.h @@ -3,7 +3,6 @@ #define ENABLE_AUTODETECT_INTERNAL_IP #define ENABLE_PROXY_IP -#define _IMPROVED_PACKET_ENCRYPTION_ // 패킷 암호화 개선 #define __PET_SYSTEM__ #define __UDP_BLOCK__ diff --git a/src/common/tables.h b/src/common/tables.h index 6002e9c..d34bf27 100644 --- a/src/common/tables.h +++ b/src/common/tables.h @@ -8,7 +8,6 @@ typedef uint32_t IDENT; */ enum { - HEADER_GD_LOGIN = 1, HEADER_GD_LOGOUT = 2, HEADER_GD_PLAYER_LOAD = 3, @@ -1010,7 +1009,6 @@ typedef struct SPacketGDAuthLogin uint32_t dwLoginKey; char szLogin[LOGIN_MAX_LEN + 1]; char szSocialID[SOCIAL_ID_MAX_LEN + 1]; - uint32_t adwClientKey[4]; int32_t iPremiumTimes[PREMIUM_MAX_NUM]; } TPacketGDAuthLogin; @@ -1018,7 +1016,6 @@ typedef struct SPacketGDLoginByKey { char szLogin[LOGIN_MAX_LEN + 1]; uint32_t dwLoginKey; - uint32_t adwClientKey[4]; char szIP[MAX_HOST_LENGTH + 1]; } TPacketGDLoginByKey; @@ -1130,7 +1127,6 @@ typedef struct SPacketLoginOnSetup char szSocialID[SOCIAL_ID_MAX_LEN + 1]; char szHost[MAX_HOST_LENGTH + 1]; uint32_t dwLoginKey; - uint32_t adwClientKey[4]; } TPacketLoginOnSetup; typedef struct SPacketGDCreateObject diff --git a/src/db/ClientManager.cpp b/src/db/ClientManager.cpp index 2896c0a..ccf45ed 100644 --- a/src/db/ClientManager.cpp +++ b/src/db/ClientManager.cpp @@ -1211,7 +1211,6 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD CLoginData * pkLD = new CLoginData; pkLD->SetKey(pck->dwLoginKey); - pkLD->SetClientKey(pck->adwClientKey); pkLD->SetIP(pck->szHost); TAccountTable & r = pkLD->GetAccountRef(); @@ -1748,7 +1747,6 @@ void CClientManager::QUERY_AUTH_LOGIN(CPeer * pkPeer, DWORD dwHandle, TPacketGDA CLoginData * pkLD = new CLoginData; pkLD->SetKey(p->dwLoginKey); - pkLD->SetClientKey(p->adwClientKey); pkLD->SetPremium(p->iPremiumTimes); TAccountTable & r = pkLD->GetAccountRef(); @@ -1758,9 +1756,8 @@ void CClientManager::QUERY_AUTH_LOGIN(CPeer * pkPeer, DWORD dwHandle, TPacketGDA strlcpy(r.social_id, p->szSocialID, sizeof(r.social_id)); strlcpy(r.passwd, "TEMP", sizeof(r.passwd)); - sys_log(0, "AUTH_LOGIN id(%u) login(%s) social_id(%s) login_key(%u), client_key(%u %u %u %u)", - p->dwID, p->szLogin, p->szSocialID, p->dwLoginKey, - p->adwClientKey[0], p->adwClientKey[1], p->adwClientKey[2], p->adwClientKey[3]); + sys_log(0, "AUTH_LOGIN id(%u) login(%s) social_id(%s) login_key(%u)", + p->dwID, p->szLogin, p->szSocialID, p->dwLoginKey); bResult = 1; diff --git a/src/db/ClientManagerLogin.cpp b/src/db/ClientManagerLogin.cpp index fc5a06b..62ec95e 100644 --- a/src/db/ClientManagerLogin.cpp +++ b/src/db/ClientManagerLogin.cpp @@ -110,19 +110,6 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG return; } - if (memcmp(pkLoginData->GetClientKey(), p->adwClientKey, sizeof(uint32_t) * 4)) - { - const uint32_t * pdwClientKey = pkLoginData->GetClientKey(); - - sys_log(0, "LOGIN_BY_KEY client key differ %s %lu %lu %lu %lu, %lu %lu %lu %lu", - r.login, - p->adwClientKey[0], p->adwClientKey[1], p->adwClientKey[2], p->adwClientKey[3], - pdwClientKey[0], pdwClientKey[1], pdwClientKey[2], pdwClientKey[3]); - - pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle); - return; - } - TAccountTable * pkTab = new TAccountTable; memset(pkTab, 0, sizeof(TAccountTable)); diff --git a/src/db/LoginData.cpp b/src/db/LoginData.cpp index 5187fbb..e5f05e8 100644 --- a/src/db/LoginData.cpp +++ b/src/db/LoginData.cpp @@ -5,7 +5,6 @@ CLoginData::CLoginData() { m_dwKey = 0; - memset(m_adwClientKey, 0, sizeof(m_adwClientKey)); m_dwConnectedPeerHandle = 0; m_dwLogonTime = 0; memset(m_szIP, 0, sizeof(m_szIP)); @@ -22,16 +21,6 @@ TAccountTable & CLoginData::GetAccountRef() return m_data; } -void CLoginData::SetClientKey(const uint32_t* c_pdwClientKey) -{ - thecore_memcpy(&m_adwClientKey, c_pdwClientKey, sizeof(uint32_t) * 4); -} - -const uint32_t * CLoginData::GetClientKey() -{ - return &m_adwClientKey[0]; -} - void CLoginData::SetKey(DWORD dwKey) { m_dwKey = dwKey; diff --git a/src/db/LoginData.h b/src/db/LoginData.h index eecf21f..caa6a05 100644 --- a/src/db/LoginData.h +++ b/src/db/LoginData.h @@ -8,9 +8,6 @@ class CLoginData CLoginData(); TAccountTable & GetAccountRef(); - void SetClientKey(const uint32_t * c_pdwClientKey); - - const uint32_t* GetClientKey(); void SetKey(DWORD dwKey); DWORD GetKey(); @@ -40,7 +37,6 @@ class CLoginData private: DWORD m_dwKey; - uint32_t m_adwClientKey[4]; DWORD m_dwConnectedPeerHandle; DWORD m_dwLogonTime; char m_szIP[MAX_HOST_LENGTH+1]; diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index b68cb0e..3472f80 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -4,17 +4,17 @@ add_executable(game ${GAME_SOURCES}) target_compile_definitions(game PRIVATE GIT_DESCRIBE="${GIT_DESCRIBE_VERSION}") -target_link_libraries(game - common - libgame - libpoly - libsql - libthecore +target_link_libraries(game + common + libgame + libpoly + libsql + libthecore liblua # external mariadbclient - cryptopp-static + sodium ) if (WIN32) diff --git a/src/game/ClientPackageCryptInfo.cpp b/src/game/ClientPackageCryptInfo.cpp deleted file mode 100644 index 5681df8..0000000 --- a/src/game/ClientPackageCryptInfo.cpp +++ /dev/null @@ -1,225 +0,0 @@ -#include "stdafx.h" -#include "ClientPackageCryptInfo.h" -#include "common/stl.h" - -#ifdef OS_WINDOWS -#include "libthecore/xdirent.h" -#endif - -CClientPackageCryptInfo::CClientPackageCryptInfo() : m_pSerializedCryptKeyStream(NULL), m_nCryptKeyPackageCnt(0) -{ -} - -CClientPackageCryptInfo::~CClientPackageCryptInfo() -{ - m_vecPackageCryptKeys.clear(); - m_mapPackageSDB.clear(); - if( m_pSerializedCryptKeyStream ) - { - delete[] m_pSerializedCryptKeyStream; - m_pSerializedCryptKeyStream = NULL; - } -} - -bool CClientPackageCryptInfo::LoadPackageCryptFile( const char* pCryptFile ) -{ - FILE * fp = fopen(pCryptFile, "rb"); - - if (!fp) - return false; - - int iSDBDataOffset; - fread(&iSDBDataOffset, sizeof(int), 1, fp); - - int iPackageCnt; - fread( &iPackageCnt, sizeof(int), 1, fp ); - m_nCryptKeyPackageCnt += iPackageCnt; - - int iCryptKeySize = iSDBDataOffset - 2*sizeof(int); - - { - - if (0 == iCryptKeySize) - { - sys_log(0, "[PackageCryptInfo] failed to load crypt key. (file: %s, key size: %d)", pCryptFile, iCryptKeySize); - m_nCryptKeyPackageCnt -= iPackageCnt; - } - else - { - int nCurKeySize = (int)m_vecPackageCryptKeys.size(); - m_vecPackageCryptKeys.resize( nCurKeySize + sizeof(int) + iCryptKeySize); - - memcpy( &m_vecPackageCryptKeys[nCurKeySize], &iCryptKeySize, sizeof(int)); - fread( &m_vecPackageCryptKeys[nCurKeySize + sizeof(int)], sizeof(BYTE), iCryptKeySize, fp ); - sys_log(0, "[PackageCryptInfo] %s loaded. (key size: %d, count: %d, total: %d)", pCryptFile, iCryptKeySize, iPackageCnt, m_nCryptKeyPackageCnt); - } - } - - //about SDB data - //total packagecnt (4byte) - // for packagecnt - // db name hash 4byte( stl.h stringhash ) +child node size(4byte) - - //stream to client - // sdb file cnt( 4byte ) - // for sdb file cnt - // filename hash ( stl.h stringhash ) - // related map name size(4), relate map name - // sdb block size( 1byte ) - // sdb blocks - - int iSDBPackageCnt; - fread(&iSDBPackageCnt, sizeof(int), 1, fp); - - DWORD dwPackageNameHash, dwPackageStreamSize, dwSDBFileCnt, dwFileNameHash, dwMapNameSize; - - std::string strRelatedMapName; - - if (0 == iCryptKeySize && 0 == iSDBPackageCnt) - return false; - - for( int i = 0; i < iSDBPackageCnt; ++i ) - { - fread(&dwPackageNameHash, sizeof(DWORD), 1, fp); - fread(&dwPackageStreamSize, sizeof(DWORD), 1, fp); - - fread(&dwSDBFileCnt, sizeof(DWORD), 1, fp); - - sys_log(0, "[PackageCryptInfo] SDB Loaded. (Name Hash : %d, Stream Size: %d, File Count: %d)", dwPackageNameHash,dwPackageStreamSize, dwSDBFileCnt); - - for( int j = 0; j < (int)dwSDBFileCnt; ++j ) - { - fread(&dwFileNameHash, sizeof(DWORD), 1, fp); - fread(&dwMapNameSize, sizeof(DWORD), 1, fp); - - strRelatedMapName.resize( dwMapNameSize ); - fread(&strRelatedMapName[0], sizeof(BYTE), dwMapNameSize, fp); - - sys_log(0, "[PackageCryptInfo] \t SDB each file info loaded.(MapName: %s, NameHash: %X)", strRelatedMapName.c_str(), dwFileNameHash); - - BYTE bSDBStreamSize; - std::vector vecSDBStream; - fread(&bSDBStreamSize, sizeof(BYTE), 1, fp); - - vecSDBStream.resize(bSDBStreamSize); - fread(&vecSDBStream[0], sizeof(BYTE), bSDBStreamSize, fp); - - //reconstruct it - TPackageSDBMap::iterator it = m_mapPackageSDB.find( strRelatedMapName ); - if( it == m_mapPackageSDB.end() ) - { - TPerFileSDBInfo fileSDBInfo; - m_mapPackageSDB[strRelatedMapName] = fileSDBInfo; - } - - TSupplementaryDataBlockInfo SDBInfo; - std::vector& rSDBInfos = m_mapPackageSDB[strRelatedMapName].vecSDBInfos; - { - SDBInfo.dwPackageIdentifier = dwPackageNameHash; - SDBInfo.dwFileIdentifier = dwFileNameHash; - SDBInfo.vecSDBStream.resize( bSDBStreamSize ); - - memcpy(&SDBInfo.vecSDBStream[0], &vecSDBStream[0], bSDBStreamSize ); - - rSDBInfos.push_back( SDBInfo ); - } - } - } - - fclose(fp); - return true; -} - - -bool CClientPackageCryptInfo::LoadPackageCryptInfo( const char* pCryptInfoDir ) -{ - DIR * pDir = opendir(pCryptInfoDir); - - if (!pDir) - return false; - - m_nCryptKeyPackageCnt = 0; - if( m_pSerializedCryptKeyStream ) - { - delete[] m_pSerializedCryptKeyStream; - m_pSerializedCryptKeyStream = NULL; - } - - m_mapPackageSDB.clear(); - m_vecPackageCryptKeys.clear(); - - const char szPrefixCryptInfoFile[] = "cshybridcrypt"; - - dirent * pDirEnt; - while ((pDirEnt = readdir(pDir))) - { - //if (strncmp( &(pDirEnt->d_name[0]), szPrefixCryptInfoFile, strlen(szPrefixCryptInfoFile)) ) - if (std::string::npos == std::string(pDirEnt->d_name).find(szPrefixCryptInfoFile)) - { - sys_log(0, "[PackageCryptInfo] %s is not crypt file. pass!", pDirEnt->d_name); - continue; - } - - std::string strFullPathName = std::string(pCryptInfoDir) + std::string(pDirEnt->d_name); - - sys_log(0, "[PackageCryptInfo] Try to load crypt file: %s", strFullPathName.c_str()); - - if (false == LoadPackageCryptFile( strFullPathName.c_str() )) - sys_err("[PackageCryptInfo] Failed to load %s", strFullPathName.c_str()); - } - - closedir(pDir); - return true; -} - -void CClientPackageCryptInfo::GetPackageCryptKeys( BYTE** ppData, int& iDataSize ) -{ - int nCryptKeySize = m_vecPackageCryptKeys.size(); - int iStreamSize = sizeof(int)+nCryptKeySize; - - //NOTE : Crypt Key Info isn`t updated during runtime. ( in case of file reloading all data is cleared & recreated ) - //it`s not safe but due to performance benefit we don`t do re-serialize. - if( m_pSerializedCryptKeyStream ) - { - *ppData = m_pSerializedCryptKeyStream; - iDataSize = iStreamSize; - return; - } - - if( nCryptKeySize > 0 ) - { - m_pSerializedCryptKeyStream = new BYTE[iStreamSize]; - memcpy(&m_pSerializedCryptKeyStream[0], &m_nCryptKeyPackageCnt, sizeof(int) ); - memcpy(&m_pSerializedCryptKeyStream[sizeof(int)], &m_vecPackageCryptKeys[0], nCryptKeySize ); - - *ppData = m_pSerializedCryptKeyStream; - iDataSize = iStreamSize; - } - else - { - *ppData = NULL; - iDataSize = 0; - } -} - - -bool CClientPackageCryptInfo::GetRelatedMapSDBStreams(const char* pMapName, BYTE** ppData, int& iDataSize ) -{ - std::string strLowerMapName = pMapName; - stl_lowers(strLowerMapName); - - TPackageSDBMap::iterator it = m_mapPackageSDB.find( strLowerMapName.c_str() ); - if( it == m_mapPackageSDB.end() || it->second.vecSDBInfos.size() == 0 ) - { - //sys_err("GetRelatedMapSDBStreams Failed(%s)", strLowerMapName.c_str()); - return false; - } - - *ppData = it->second.GetSerializedStream(); - iDataSize = it->second.GetSize(); - - //sys_log(0, "GetRelatedMapSDBStreams Size(%d)", iDataSize); - - return true; -} - diff --git a/src/game/ClientPackageCryptInfo.h b/src/game/ClientPackageCryptInfo.h deleted file mode 100644 index 8d6a41b..0000000 --- a/src/game/ClientPackageCryptInfo.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef __INC_CLIENTPACKAGE_CRYPTINFO_H -#define __INC_CLIENTPACKAGE_CRYPTINFO_H - -#include - -#pragma pack(1) - -typedef struct SSupplementaryDataBlockInfo -{ - DWORD dwPackageIdentifier; - DWORD dwFileIdentifier; - std::vector vecSDBStream; - - void Serialize( BYTE* pStream ) - { - memcpy(pStream, &dwPackageIdentifier, sizeof(DWORD)); - memcpy(pStream+4, &dwFileIdentifier, sizeof(DWORD)); - - BYTE bSize = vecSDBStream.size(); - memcpy(pStream+8, &bSize, sizeof(BYTE)); - memcpy(pStream+9, &vecSDBStream[0], bSize); - } - - DWORD GetSerializedSize() const - { - return sizeof(DWORD)*2 + sizeof(BYTE) + vecSDBStream.size(); - } - -} TSupplementaryDataBlockInfo; - -#pragma pack() - -class CClientPackageCryptInfo -{ -public: - CClientPackageCryptInfo(); - ~CClientPackageCryptInfo(); - - bool LoadPackageCryptInfo( const char* pCryptInfoDir ); - void GetPackageCryptKeys( BYTE** ppData, int& iDataSize ); - - bool GetRelatedMapSDBStreams(const char* pMapName, BYTE** ppData, int& iDataSize ); - -private: - bool LoadPackageCryptFile( const char* pCryptFile ); - -private: - int m_nCryptKeyPackageCnt; - std::vector m_vecPackageCryptKeys; - BYTE* m_pSerializedCryptKeyStream; - - typedef struct SPerFileSDBInfo - { - SPerFileSDBInfo() : m_pSerializedStream(NULL) {} - ~SPerFileSDBInfo() - { - if(m_pSerializedStream) - { - delete[]m_pSerializedStream; - } - } - - DWORD GetSize() const - { - DWORD dwSize = 4; //initial vecSDBInfo count - - for(int i = 0; i < (int)vecSDBInfos.size(); ++i) - { - dwSize += vecSDBInfos[i].GetSerializedSize(); - } - - return dwSize; - } - - BYTE* GetSerializedStream() - { - //NOTE : SDB Data isn`t updated during runtime. ( in case of file reloading all data is cleared & recreated ) - //it`s not safe but due to performance benefit we don`t do re-serialize. - if(m_pSerializedStream) - return m_pSerializedStream; - - m_pSerializedStream = new BYTE[GetSize()]; - - int iWrittenOffset = 0; - int iSDBInfoSize = vecSDBInfos.size(); - - //write size - memcpy( m_pSerializedStream, &iSDBInfoSize, sizeof(int) ); - iWrittenOffset += sizeof(int); - for(int i = 0; i < iSDBInfoSize; ++i) - { - vecSDBInfos[i].Serialize( m_pSerializedStream + iWrittenOffset ); - iWrittenOffset += vecSDBInfos[i].GetSerializedSize(); - } - - return m_pSerializedStream; - } - - std::vector vecSDBInfos; - - private: - BYTE* m_pSerializedStream; - - } TPerFileSDBInfo; - - typedef std::unordered_map TPackageSDBMap; //key: related map name - TPackageSDBMap m_mapPackageSDB; - - -}; - - - - - - -#endif //__INC_CLIENTPACKAGE_CRYPTINFO_H \ No newline at end of file diff --git a/src/game/SecureCipher.cpp b/src/game/SecureCipher.cpp new file mode 100644 index 0000000..e4e584f --- /dev/null +++ b/src/game/SecureCipher.cpp @@ -0,0 +1,294 @@ +#include "stdafx.h" +#include "SecureCipher.h" + +// Static initialization flag for libsodium +static bool s_sodiumInitialized = false; + +static bool EnsureSodiumInit() +{ + if (!s_sodiumInitialized) + { + if (sodium_init() < 0) + { + return false; + } + s_sodiumInitialized = true; + } + return true; +} + +SecureCipher::SecureCipher() +{ + sodium_memzero(m_pk, sizeof(m_pk)); + sodium_memzero(m_sk, sizeof(m_sk)); + sodium_memzero(m_tx_key, sizeof(m_tx_key)); + sodium_memzero(m_rx_key, sizeof(m_rx_key)); + sodium_memzero(m_session_token, sizeof(m_session_token)); +} + +SecureCipher::~SecureCipher() +{ + CleanUp(); +} + +bool SecureCipher::Initialize() +{ + if (!EnsureSodiumInit()) + { + return false; + } + + // Generate X25519 keypair + if (crypto_kx_keypair(m_pk, m_sk) != 0) + { + return false; + } + + m_tx_nonce = 0; + m_rx_nonce = 0; + m_initialized = true; + m_activated = false; + + return true; +} + +void SecureCipher::CleanUp() +{ + // Securely erase all sensitive key material + sodium_memzero(m_sk, sizeof(m_sk)); + sodium_memzero(m_tx_key, sizeof(m_tx_key)); + sodium_memzero(m_rx_key, sizeof(m_rx_key)); + sodium_memzero(m_session_token, sizeof(m_session_token)); + + m_initialized = false; + m_activated = false; + m_tx_nonce = 0; + m_rx_nonce = 0; +} + +void SecureCipher::GetPublicKey(uint8_t* out_pk) const +{ + memcpy(out_pk, m_pk, PK_SIZE); +} + +bool SecureCipher::ComputeClientKeys(const uint8_t* server_pk) +{ + if (!m_initialized) + { + return false; + } + + // Client: tx_key is for sending TO server, rx_key is for receiving FROM server + if (crypto_kx_client_session_keys(m_rx_key, m_tx_key, m_pk, m_sk, server_pk) != 0) + { + return false; + } + + return true; +} + +bool SecureCipher::ComputeServerKeys(const uint8_t* client_pk) +{ + if (!m_initialized) + { + return false; + } + + // Server: tx_key is for sending TO client, rx_key is for receiving FROM client + if (crypto_kx_server_session_keys(m_rx_key, m_tx_key, m_pk, m_sk, client_pk) != 0) + { + return false; + } + + return true; +} + +void SecureCipher::GenerateChallenge(uint8_t* out_challenge) +{ + randombytes_buf(out_challenge, CHALLENGE_SIZE); +} + +void SecureCipher::ComputeChallengeResponse(const uint8_t* challenge, uint8_t* out_response) +{ + // HMAC the challenge using our rx_key as the authentication key + // This proves we derived the correct shared secret + crypto_auth(out_response, challenge, CHALLENGE_SIZE, m_rx_key); +} + +bool SecureCipher::VerifyChallengeResponse(const uint8_t* challenge, const uint8_t* response) +{ + // Verify the HMAC - peer should have used their tx_key (our rx_key) to compute it + return crypto_auth_verify(response, challenge, CHALLENGE_SIZE, m_rx_key) == 0; +} + +void SecureCipher::BuildNonce(uint8_t* nonce, uint64_t counter, bool is_tx) +{ + // 24-byte nonce structure: + // [0]: direction flag (0x01 for tx, 0x02 for rx) + // [1-7]: reserved/zero + // [8-15]: 64-bit counter (little-endian) + // [16-23]: reserved/zero + + sodium_memzero(nonce, NONCE_SIZE); + nonce[0] = is_tx ? 0x01 : 0x02; + + // Store counter in little-endian at offset 8 + for (int i = 0; i < 8; ++i) + { + nonce[8 + i] = (uint8_t)(counter >> (i * 8)); + } +} + +size_t SecureCipher::Encrypt(const void* plaintext, size_t plaintext_len, void* ciphertext) +{ + if (!m_activated) + { + return 0; + } + + uint8_t nonce[NONCE_SIZE]; + BuildNonce(nonce, m_tx_nonce, true); + + unsigned long long ciphertext_len = 0; + + if (crypto_aead_xchacha20poly1305_ietf_encrypt( + (uint8_t*)ciphertext, &ciphertext_len, + (const uint8_t*)plaintext, plaintext_len, + nullptr, 0, // No additional data + nullptr, // No secret nonce + nonce, + m_tx_key) != 0) + { + return 0; + } + + ++m_tx_nonce; + return (size_t)ciphertext_len; +} + +size_t SecureCipher::Decrypt(const void* ciphertext, size_t ciphertext_len, void* plaintext) +{ + if (!m_activated) + { + return 0; + } + + if (ciphertext_len < TAG_SIZE) + { + return 0; + } + + uint8_t nonce[NONCE_SIZE]; + BuildNonce(nonce, m_rx_nonce, false); + + unsigned long long plaintext_len = 0; + + if (crypto_aead_xchacha20poly1305_ietf_decrypt( + (uint8_t*)plaintext, &plaintext_len, + nullptr, // No secret nonce output + (const uint8_t*)ciphertext, ciphertext_len, + nullptr, 0, // No additional data + nonce, + m_rx_key) != 0) + { + // Decryption failed - either wrong key, tampered data, or replay attack + return 0; + } + + ++m_rx_nonce; + return (size_t)plaintext_len; +} + +void SecureCipher::EncryptInPlace(void* buffer, size_t len) +{ + if (!m_activated || len == 0) + return; + + uint8_t nonce[NONCE_SIZE]; + BuildNonce(nonce, m_tx_nonce, true); + + crypto_stream_xchacha20_xor_ic( + (uint8_t*)buffer, + (const uint8_t*)buffer, + (unsigned long long)len, + nonce, + 0, + m_tx_key); + + ++m_tx_nonce; +} + +void SecureCipher::DecryptInPlace(void* buffer, size_t len) +{ + if (!m_activated || len == 0) + return; + + uint8_t nonce[NONCE_SIZE]; + BuildNonce(nonce, m_rx_nonce, false); + + crypto_stream_xchacha20_xor_ic( + (uint8_t*)buffer, + (const uint8_t*)buffer, + (unsigned long long)len, + nonce, + 0, + m_rx_key); + + ++m_rx_nonce; +} + +bool SecureCipher::EncryptToken(const uint8_t* plaintext, size_t len, + uint8_t* ciphertext, uint8_t* nonce_out) +{ + if (!m_initialized) + { + return false; + } + + // Generate random nonce for this one-time encryption + randombytes_buf(nonce_out, NONCE_SIZE); + + unsigned long long ciphertext_len = 0; + + if (crypto_aead_xchacha20poly1305_ietf_encrypt( + ciphertext, &ciphertext_len, + plaintext, len, + nullptr, 0, + nullptr, + nonce_out, + m_tx_key) != 0) + { + return false; + } + + return true; +} + +bool SecureCipher::DecryptToken(const uint8_t* ciphertext, size_t len, + const uint8_t* nonce, uint8_t* plaintext) +{ + if (!m_initialized) + { + return false; + } + + unsigned long long plaintext_len = 0; + + if (crypto_aead_xchacha20poly1305_ietf_decrypt( + plaintext, &plaintext_len, + nullptr, + ciphertext, len, + nullptr, 0, + nonce, + m_rx_key) != 0) + { + return false; + } + + return true; +} + +void SecureCipher::SetSessionToken(const uint8_t* token) +{ + memcpy(m_session_token, token, SESSION_TOKEN_SIZE); +} diff --git a/src/game/SecureCipher.h b/src/game/SecureCipher.h new file mode 100644 index 0000000..31bc71a --- /dev/null +++ b/src/game/SecureCipher.h @@ -0,0 +1,93 @@ +#pragma once + +#include +#include +#include + +class SecureCipher { +public: + // libsodium constants + static constexpr size_t PK_SIZE = crypto_kx_PUBLICKEYBYTES; // 32 + static constexpr size_t SK_SIZE = crypto_kx_SECRETKEYBYTES; // 32 + static constexpr size_t KEY_SIZE = crypto_kx_SESSIONKEYBYTES; // 32 + static constexpr size_t NONCE_SIZE = crypto_aead_xchacha20poly1305_ietf_NPUBBYTES; // 24 + static constexpr size_t TAG_SIZE = crypto_aead_xchacha20poly1305_ietf_ABYTES; // 16 + static constexpr size_t CHALLENGE_SIZE = 32; + static constexpr size_t SESSION_TOKEN_SIZE = 32; + static constexpr size_t HMAC_SIZE = crypto_auth_BYTES; // 32 + + SecureCipher(); + ~SecureCipher(); + + // Initialization - generates keypair + bool Initialize(); + void CleanUp(); + + // Key exchange + void GetPublicKey(uint8_t* out_pk) const; + + // Client computes session keys from server's public key + bool ComputeClientKeys(const uint8_t* server_pk); + + // Server computes session keys from client's public key + bool ComputeServerKeys(const uint8_t* client_pk); + + // Challenge-response for authentication + void GenerateChallenge(uint8_t* out_challenge); + void ComputeChallengeResponse(const uint8_t* challenge, uint8_t* out_response); + bool VerifyChallengeResponse(const uint8_t* challenge, const uint8_t* response); + + // AEAD encryption - output is len + TAG_SIZE bytes + // Returns actual ciphertext length (plaintext_len + TAG_SIZE) + size_t Encrypt(const void* plaintext, size_t plaintext_len, void* ciphertext); + + // AEAD decryption - input must be ciphertext_len bytes (includes TAG_SIZE) + // Returns actual plaintext length, or 0 on failure + size_t Decrypt(const void* ciphertext, size_t ciphertext_len, void* plaintext); + + // In-place stream encryption for network buffers (XChaCha20, no tag overhead) + // Same length in/out. Nonce counter prevents replay. + void EncryptInPlace(void* buffer, size_t len); + void DecryptInPlace(void* buffer, size_t len); + + // Encrypt a single token with explicit nonce (for KeyComplete packet) + bool EncryptToken(const uint8_t* plaintext, size_t len, + uint8_t* ciphertext, uint8_t* nonce_out); + bool DecryptToken(const uint8_t* ciphertext, size_t len, + const uint8_t* nonce, uint8_t* plaintext); + + // State + bool IsActivated() const { return m_activated; } + void SetActivated(bool value) { m_activated = value; } + bool IsInitialized() const { return m_initialized; } + + // Session token management + void SetSessionToken(const uint8_t* token); + const uint8_t* GetSessionToken() const { return m_session_token; } + + // Get current nonce counters (for debugging/logging) + uint64_t GetTxNonce() const { return m_tx_nonce; } + uint64_t GetRxNonce() const { return m_rx_nonce; } + +private: + bool m_initialized = false; + bool m_activated = false; + + // X25519 keypair + uint8_t m_pk[PK_SIZE]; + uint8_t m_sk[SK_SIZE]; + + // Session keys derived from key exchange + uint8_t m_tx_key[KEY_SIZE]; // Key for encrypting outgoing packets + uint8_t m_rx_key[KEY_SIZE]; // Key for decrypting incoming packets + + // Nonce counters - prevent replay attacks + uint64_t m_tx_nonce = 0; + uint64_t m_rx_nonce = 0; + + // Server-generated session token + uint8_t m_session_token[SESSION_TOKEN_SIZE]; + + // Build 24-byte nonce from counter + void BuildNonce(uint8_t* nonce, uint64_t counter, bool is_tx); +}; diff --git a/src/game/char.cpp b/src/game/char.cpp index cd03edd..b2e938f 100644 --- a/src/game/char.cpp +++ b/src/game/char.cpp @@ -5411,14 +5411,6 @@ bool CHARACTER::WarpSet(long x, long y, long lPrivateMapIndex) CMapLocation::instance().Get(GetX(), GetY(), lCurMapIndex, lCurAddr, wCurPort); - //do not send SDB files if char is in the same map - if( lCurMapIndex != lMapIndex ) - { - const TMapRegion * rMapRgn = SECTREE_MANAGER::instance().GetMapRegion(lMapIndex); - { - DESC_MANAGER::instance().SendClientPackageSDBToLoadMap( GetDesc(), rMapRgn->strMapName.c_str() ); - } - } } if (lPrivateMapIndex >= 10000) diff --git a/src/game/cipher.cpp b/src/game/cipher.cpp deleted file mode 100644 index f497bb6..0000000 --- a/src/game/cipher.cpp +++ /dev/null @@ -1,397 +0,0 @@ -#include "stdafx.h" - -#include "cipher.h" - -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - -#include -#include -#include - -// Diffie-Hellman key agreement -#include -#include - -// AES winner and candidates -//#include -#include -#include -#include -#include -#include -// Other block ciphers -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace CryptoPP; - -// Block cipher algorithm selector abstract base class. -struct BlockCipherAlgorithm { - enum { - kDefault, // to give more chances to default algorithm - // AES winner and candidates -// kAES, // Rijndael - kRC6, - kMARS, - kTwofish, - kSerpent, - kCAST256, - // Other block ciphers - kIDEA, - k3DES, // DES-EDE2 - kCamellia, - kSEED, - kRC5, - kBlowfish, - kTEA, -// kSKIPJACK, - kSHACAL2, - // End sentinel - kMaxAlgorithms - }; - - BlockCipherAlgorithm() {} - virtual ~BlockCipherAlgorithm() {} - - static BlockCipherAlgorithm* Pick(int hint); - - virtual int GetBlockSize() const = 0; - virtual int GetDefaultKeyLength() const = 0; - virtual int GetIVLength() const = 0; - - virtual SymmetricCipher* CreateEncoder(const byte* key, size_t keylen, - const byte* iv) const = 0; - virtual SymmetricCipher* CreateDecoder(const byte* key, size_t keylen, - const byte* iv) const = 0; -}; - -// Block cipher (with CTR mode) algorithm selector template class. -template -struct BlockCipherDetail : public BlockCipherAlgorithm { - BlockCipherDetail() {} - virtual ~BlockCipherDetail() {} - - virtual int GetBlockSize() const { return T::BLOCKSIZE; } - virtual int GetDefaultKeyLength() const { return T::DEFAULT_KEYLENGTH; } - virtual int GetIVLength() const { return T::IV_LENGTH; } - - virtual SymmetricCipher* CreateEncoder(const byte* key, size_t keylen, - const byte* iv) const { - return new typename CTR_Mode::Encryption(key, keylen, iv); - } - virtual SymmetricCipher* CreateDecoder(const byte* key, size_t keylen, - const byte* iv) const { - return new typename CTR_Mode::Decryption(key, keylen, iv); - } -}; - -// Key agreement scheme abstract class. -class KeyAgreement { - public: - KeyAgreement() {} - virtual ~KeyAgreement() {} - - virtual size_t Prepare(void* buffer, size_t* length) = 0; - virtual bool Agree(size_t agreed_length, const void* buffer, size_t length) = 0; - - const SecByteBlock& shared() const { return shared_; } - - protected: - SecByteBlock shared_; -}; - -// Crypto++ Unified Diffie-Hellman key agreement scheme implementation. -class DH2KeyAgreement : public KeyAgreement { - public: - DH2KeyAgreement(); - virtual ~DH2KeyAgreement(); - - virtual size_t Prepare(void* buffer, size_t* length); - virtual bool Agree(size_t agreed_length, const void* buffer, size_t length); - - private: - DH dh_; - DH2 dh2_; - SecByteBlock spriv_key_; - SecByteBlock epriv_key_; -}; - -Cipher::Cipher() - : activated_(false), encoder_(NULL), decoder_(NULL), key_agreement_(NULL) { -} - -Cipher::~Cipher() { - if (activated_) { - CleanUp(); - } -} - -void Cipher::CleanUp() { - if (encoder_ != NULL) { - delete encoder_; - encoder_ = NULL; - } - if (decoder_ != NULL) { - delete decoder_; - decoder_ = NULL; - } - if (key_agreement_ != NULL) { - delete key_agreement_; - key_agreement_ = NULL; - } - activated_ = false; -} - -size_t Cipher::Prepare(void* buffer, size_t* length) { - assert(key_agreement_ == NULL); - key_agreement_ = new DH2KeyAgreement(); - assert(key_agreement_ != NULL); - size_t agreed_length = key_agreement_->Prepare(buffer, length); - if (agreed_length == 0) { - delete key_agreement_; - key_agreement_ = NULL; - } - return agreed_length; -} - -bool Cipher::Activate(bool polarity, size_t agreed_length, - const void* buffer, size_t length) { - assert(activated_ == false); - assert(key_agreement_ != NULL); - if (activated_ != false) - return false; - - if (key_agreement_->Agree(agreed_length, buffer, length)) { - activated_ = SetUp(polarity); - } - delete key_agreement_; - key_agreement_ = NULL; - return activated_; -} - -bool Cipher::SetUp(bool polarity) { - assert(key_agreement_ != NULL); - const SecByteBlock& shared = key_agreement_->shared(); - - // Pick a block cipher algorithm - - if (shared.size() < 2) { - return false; - } - int hint_0 = shared.BytePtr()[*(shared.BytePtr()) % shared.size()]; - int hint_1 = shared.BytePtr()[*(shared.BytePtr() + 1) % shared.size()]; - BlockCipherAlgorithm* detail_0 = BlockCipherAlgorithm::Pick(hint_0); - BlockCipherAlgorithm* detail_1 = BlockCipherAlgorithm::Pick(hint_1); - assert(detail_0 != NULL); - assert(detail_1 != NULL); - std::unique_ptr algorithm_0(detail_0); - std::unique_ptr algorithm_1(detail_1); - - const size_t key_length_0 = algorithm_0->GetDefaultKeyLength(); - const size_t iv_length_0 = algorithm_0->GetBlockSize(); - if (shared.size() < key_length_0 || shared.size() < iv_length_0) { - return false; - } - const size_t key_length_1 = algorithm_1->GetDefaultKeyLength(); - const size_t iv_length_1 = algorithm_1->GetBlockSize(); - if (shared.size() < key_length_1 || shared.size() < iv_length_1) { - return false; - } - - // Pick encryption keys and initial vectors - - SecByteBlock key_0(key_length_0), iv_0(iv_length_0); - SecByteBlock key_1(key_length_1), iv_1(iv_length_1); - - size_t offset; - - key_0.Assign(shared, key_length_0); - offset = key_length_0; - offset = std::min(key_length_0, shared.size() - key_length_1); - key_1.Assign(shared.BytePtr() + offset, key_length_1); - - offset = shared.size() - iv_length_0; - iv_0.Assign(shared.BytePtr() + offset, iv_length_0); - offset = (offset < iv_length_1 ? 0 : offset - iv_length_1); - iv_1.Assign(shared.BytePtr() + offset, iv_length_1); - - // Create encryption/decryption objects - - if (polarity) { - encoder_ = algorithm_1->CreateEncoder(key_1, key_1.size(), iv_1); - decoder_ = algorithm_0->CreateDecoder(key_0, key_0.size(), iv_0); - } else { - encoder_ = algorithm_0->CreateEncoder(key_0, key_0.size(), iv_0); - decoder_ = algorithm_1->CreateDecoder(key_1, key_1.size(), iv_1); - } - assert(encoder_ != NULL); - assert(decoder_ != NULL); - return true; -} - -BlockCipherAlgorithm* BlockCipherAlgorithm::Pick(int hint) { - BlockCipherAlgorithm* detail; - int selector = hint % kMaxAlgorithms; - switch (selector) { -// case kAES: -// detail = new BlockCipherDetail(); - break; - case kRC6: - detail = new BlockCipherDetail(); - break; - case kMARS: - detail = new BlockCipherDetail(); - break; - case kTwofish: - detail = new BlockCipherDetail(); - break; - case kSerpent: - detail = new BlockCipherDetail(); - break; - case kCAST256: - detail = new BlockCipherDetail(); - break; - case kIDEA: - detail = new BlockCipherDetail(); - break; - case k3DES: - detail = new BlockCipherDetail(); - break; - case kCamellia: - detail = new BlockCipherDetail(); - break; - case kSEED: - detail = new BlockCipherDetail(); - break; - case kRC5: - detail = new BlockCipherDetail(); - break; - case kBlowfish: - detail = new BlockCipherDetail(); - break; - case kTEA: - detail = new BlockCipherDetail(); - break; -// case kSKIPJACK: -// detail = new BlockCipherDetail(); -// break; - case kSHACAL2: - detail = new BlockCipherDetail(); - break; - case kDefault: - default: - detail = new BlockCipherDetail(); // default algorithm - break; - } - return detail; -} - -DH2KeyAgreement::DH2KeyAgreement() : dh_(), dh2_(dh_) { -} - -DH2KeyAgreement::~DH2KeyAgreement() { -} - -size_t DH2KeyAgreement::Prepare(void* buffer, size_t* length) { - // RFC 5114, 1024-bit MODP Group with 160-bit Prime Order Subgroup - // http://tools.ietf.org/html/rfc5114#section-2.1 - Integer p("0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C6" - "9A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C0" - "13ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD70" - "98488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0" - "A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708" - "DF1FB2BC2E4A4371"); - - Integer g("0xA4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507F" - "D6406CFF14266D31266FEA1E5C41564B777E690F5504F213" - "160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1" - "909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28A" - "D662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24" - "855E6EEB22B3B2E5"); - - Integer q("0xF518AA8781A8DF278ABA4E7D64B7CB9D49462353"); - - // Schnorr Group primes are of the form p = rq + 1, p and q prime. They - // provide a subgroup order. In the case of 1024-bit MODP Group, the - // security level is 80 bits (based on the 160-bit prime order subgroup). - - // For a compare/contrast of using the maximum security level, see - // dh-unified.zip. Also see http://www.cryptopp.com/wiki/Diffie-Hellman - // and http://www.cryptopp.com/wiki/Security_level . - - AutoSeededRandomPool rnd; - - dh_.AccessGroupParameters().Initialize(p, q, g); - - if(!dh_.GetGroupParameters().ValidateGroup(rnd, 3)) { - // Failed to validate prime and generator - return 0; - } - - p = dh_.GetGroupParameters().GetModulus(); - q = dh_.GetGroupParameters().GetSubgroupOrder(); - g = dh_.GetGroupParameters().GetGenerator(); - - // http://groups.google.com/group/sci.crypt/browse_thread/thread/7dc7eeb04a09f0ce - Integer v = ModularExponentiation(g, q, p); - if(v != Integer::One()) { - // Failed to verify order of the subgroup - return 0; - } - - ////////////////////////////////////////////////////////////// - - spriv_key_.New(dh2_.StaticPrivateKeyLength()); - epriv_key_.New(dh2_.EphemeralPrivateKeyLength()); - SecByteBlock spub_key(dh2_.StaticPublicKeyLength()); - SecByteBlock epub_key(dh2_.EphemeralPublicKeyLength()); - - dh2_.GenerateStaticKeyPair(rnd, spriv_key_, spub_key); - dh2_.GenerateEphemeralKeyPair(rnd, epriv_key_, epub_key); - - // Prepare key agreement data - const size_t spub_key_length = spub_key.size(); - const size_t epub_key_length = epub_key.size(); - const size_t data_length = spub_key_length + epub_key_length; - if (*length < data_length) { - // Not enough data buffer length - return 0; - } - *length = data_length; - byte* buf = (byte*)buffer; - memcpy(buf, spub_key.BytePtr(), spub_key_length); - memcpy(buf + spub_key_length, epub_key.BytePtr(), epub_key_length); - - return dh2_.AgreedValueLength(); -} - -bool DH2KeyAgreement::Agree(size_t agreed_length, const void* buffer, size_t length) { - if (agreed_length != dh2_.AgreedValueLength()) { - // Shared secret size mismatch - return false; - } - const size_t spub_key_length = dh2_.StaticPublicKeyLength(); - const size_t epub_key_length = dh2_.EphemeralPublicKeyLength(); - if (length != (spub_key_length + epub_key_length)) { - // Wrong data length - return false; - } - shared_.New(dh2_.AgreedValueLength()); - const byte* buf = (const byte*)buffer; - if (!dh2_.Agree(shared_, spriv_key_, epriv_key_, buf, buf + spub_key_length)) { - // Failed to reach shared secret - return false; - } - return true; -} - -#endif // _IMPROVED_PACKET_ENCRYPTION_ - -// EOF cipher.cpp diff --git a/src/game/cipher.h b/src/game/cipher.h deleted file mode 100644 index db8c3a1..0000000 --- a/src/game/cipher.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __CIPHER_H__ -#define __CIPHER_H__ - -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - -#include - -using CryptoPP::byte; -// Forward declaration -class KeyAgreement; - -// Communication channel encryption handler. -class Cipher { - public: - Cipher(); - ~Cipher(); - - void CleanUp(); - - // Returns agreed value length in bytes, or zero on failure. - size_t Prepare(void* buffer, size_t* length); - // Try to activate cipher algorithm with agreement data received from peer. - bool Activate(bool polarity, size_t agreed_length, - const void* buffer, size_t length); - - // Encrypts the given block of data. (no padding required) - void Encrypt(void* buffer, size_t length) { - assert(activated_); - if (!activated_) { - return; - } - encoder_->ProcessData((byte*)buffer, (const byte*)buffer, length); - } - // Decrypts the given block of data. (no padding required) - void Decrypt(void* buffer, size_t length) { - assert(activated_); - if (!activated_) { - return; - } - decoder_->ProcessData((byte*)buffer, (const byte*)buffer, length); - } - - bool activated() const { return activated_; } - void set_activated(bool value) { activated_ = value; } - - bool IsKeyPrepared() { return key_agreement_ != NULL; } - - private: - bool SetUp(bool polarity); - - bool activated_; - - CryptoPP::SymmetricCipher* encoder_; - CryptoPP::SymmetricCipher* decoder_; - - KeyAgreement* key_agreement_; -}; - -#endif // _IMPROVED_PACKET_ENCRYPTION_ - -#endif // __CIPHER_H__ diff --git a/src/game/db.cpp b/src/game/db.cpp index 66233d4..0e83915 100644 --- a/src/game/db.cpp +++ b/src/game/db.cpp @@ -13,6 +13,7 @@ #include "item_manager.h" #include "p2p.h" #include "log.h" +#include "input.h" #include "login_data.h" #include "locale_service.h" #include "spam.h" @@ -206,7 +207,6 @@ void DBManager::SendAuthLogin(LPDESC d) ptod.dwLoginKey = d->GetLoginKey(); thecore_memcpy(ptod.iPremiumTimes, pkLD->GetPremiumPtr(), sizeof(ptod.iPremiumTimes)); - thecore_memcpy(&ptod.adwClientKey, pkLD->GetClientKey(), sizeof(DWORD) * 4); db_clientdesc->DBPacket(HEADER_GD_AUTH_LOGIN, d->GetHandle(), &ptod, sizeof(TPacketGDAuthLogin)); sys_log(0, "SendAuthLogin %s key %u", ptod.szLogin, ptod.dwID); @@ -214,7 +214,7 @@ void DBManager::SendAuthLogin(LPDESC d) SendLoginPing(r.login); } -void DBManager::LoginPrepare(LPDESC d, uint32_t * pdwClientKey, int * paiPremiumTimes) +void DBManager::LoginPrepare(LPDESC d, int * paiPremiumTimes) { const TAccountTable & r = d->GetAccountTable(); @@ -223,7 +223,6 @@ void DBManager::LoginPrepare(LPDESC d, uint32_t * pdwClientKey, int * paiPremium pkLD->SetKey(d->GetLoginKey()); pkLD->SetLogin(r.login); pkLD->SetIP(d->GetHostName()); - pkLD->SetClientKey(pdwClientKey); if (paiPremiumTimes) pkLD->SetPremium(paiPremiumTimes); @@ -257,6 +256,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg) if (pMsg->Get()->uiNumRows == 0) { sys_log(0, " NOID"); + RecordLoginFailure(d->GetHostName()); LoginFailure(d, "NOID"); M2_DELETE(pinfo); } @@ -362,13 +362,9 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg) int nPasswordDiff = strcmp(szEncrytPassword, szPassword); - if (true == LC_IsBrazil()) - { - nPasswordDiff = 0; // 브ë¼ì§ˆ 버전ì—서는 비밀번호 ì²´í¬ë¥¼ 하지 않는다. - } - if (nPasswordDiff) { + RecordLoginFailure(d->GetHostName()); LoginFailure(d, "WRONGPWD"); sys_log(0, " WRONGPWD"); M2_DELETE(pinfo); @@ -416,8 +412,10 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg) strlcpy(r.passwd, pinfo->passwd, sizeof(r.passwd)); strlcpy(r.social_id, szSocialID, sizeof(r.social_id)); DESC_MANAGER::instance().ConnectAccount(r.login, d); + DESC_MANAGER::instance().ConsumeLoginKey(d->GetLoginKey()); + ClearLoginFailure(d->GetHostName()); - LoginPrepare(d, pinfo->adwClientKey, aiPremiumTimes); + LoginPrepare(d, aiPremiumTimes); M2_DELETE(pinfo); sys_log(0, "QID_AUTH_LOGIN: SUCCESS %s", pinfo->login); diff --git a/src/game/db.h b/src/game/db.h index 4adb2a8..731a7b1 100644 --- a/src/game/db.h +++ b/src/game/db.h @@ -80,7 +80,7 @@ class DBManager : public singleton void SendMoneyLog(BYTE type, DWORD vnum, int gold); - void LoginPrepare(LPDESC d, uint32_t * pdwClientKey, int * paiPremiumTimes = NULL); + void LoginPrepare(LPDESC d, int * paiPremiumTimes = NULL); void SendAuthLogin(LPDESC d); void SendLoginPing(const char * c_pszLogin); diff --git a/src/game/desc.cpp b/src/game/desc.cpp index f207b44..fabfde5 100644 --- a/src/game/desc.cpp +++ b/src/game/desc.cpp @@ -66,10 +66,6 @@ void DESC::Initialize() m_pLogFile = NULL; -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - m_bEncrypted = false; -#endif - m_wP2PPort = 0; m_bP2PChannel = 0; @@ -83,12 +79,6 @@ void DESC::Initialize() m_pkLoginKey = NULL; m_dwLoginKey = 0; - m_dwPanamaKey = 0; - -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - memset( m_adwDecryptionKey, 0, sizeof(m_adwDecryptionKey) ); - memset( m_adwEncryptionKey, 0, sizeof(m_adwEncryptionKey) ); -#endif m_bCRCMagicCubeIdx = 0; m_dwProcCRC = 0; @@ -152,9 +142,7 @@ void DESC::Destroy() Log("SYSTEM: closing socket. DESC #%d", m_sock); fdwatch_del_fd(m_lpFdw, m_sock); -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - cipher_.CleanUp(); -#endif + m_secureCipher.CleanUp(); socket_close(m_sock); m_sock = INVALID_SOCKET; @@ -237,19 +225,6 @@ bool DESC::Setup(LPFDWATCH _fdw, socket_t _fd, const struct sockaddr_in & c_rSoc m_pkPingEvent = event_create(ping_event, info, ping_event_second_cycle); -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - if (LC_IsEurope()) - { - thecore_memcpy(m_adwEncryptionKey, "1234abcd5678efgh", sizeof(DWORD) * 4); - thecore_memcpy(m_adwDecryptionKey, "1234abcd5678efgh", sizeof(DWORD) * 4); - } - else - { - thecore_memcpy(m_adwEncryptionKey, "testtesttesttest", sizeof(DWORD) * 4); - thecore_memcpy(m_adwDecryptionKey, "testtesttesttest", sizeof(DWORD) * 4); - } -#endif // _IMPROVED_PACKET_ENCRYPTION_ - // Set Phase to handshake SetPhase(PHASE_HANDSHAKE); StartHandshake(_handshake); @@ -279,30 +254,16 @@ int DESC::ProcessInput() else if (bytes_read == 0) return 0; + // Decrypt only the newly received bytes before committing to the buffer + if (m_secureCipher.IsActivated()) { + m_secureCipher.DecryptInPlace((void*)buffer_write_peek(m_lpInputBuffer), bytes_read); + } + buffer_write_proceed(m_lpInputBuffer, bytes_read); if (!m_pInputProcessor) sys_err("no input processor"); -#ifdef _IMPROVED_PACKET_ENCRYPTION_ else - { - if (cipher_.activated()) { - cipher_.Decrypt(const_cast(buffer_read_peek(m_lpInputBuffer)), buffer_size(m_lpInputBuffer)); - } - - int iBytesProceed = 0; - - // falseê°€ 리턴 ë˜ë©´ 다른 phase로 ë°”ë€ ê²ƒì´ë¯€ë¡œ 다시 프로세스로 ëŒìž…한다! - while (!m_pInputProcessor->Process(this, buffer_read_peek(m_lpInputBuffer), buffer_size(m_lpInputBuffer), iBytesProceed)) - { - buffer_read_proceed(m_lpInputBuffer, iBytesProceed); - iBytesProceed = 0; - } - - buffer_read_proceed(m_lpInputBuffer, iBytesProceed); - } -#else - else if (!m_bEncrypted) { int iBytesProceed = 0; @@ -315,52 +276,6 @@ int DESC::ProcessInput() buffer_read_proceed(m_lpInputBuffer, iBytesProceed); } - else - { - int iSizeBuffer = buffer_size(m_lpInputBuffer); - - // 8ë°”ì´íЏ 단위로만 처리한다. 8ë°”ì´íЏ ë‹¨ìœ„ì— ë¶€ì¡±í•˜ë©´ ìž˜ëª»ëœ ì•”í˜¸í™” 버í¼ë¥¼ 복호화 - // í•  ê°€ëŠ¥ì„±ì´ ìžˆìœ¼ë¯€ë¡œ 짤ë¼ì„œ 처리하기로 한다. - if (iSizeBuffer & 7) // & 7ì€ % 8ê³¼ 같다. 2ì˜ ìŠ¹ìˆ˜ì—서만 가능 - iSizeBuffer -= iSizeBuffer & 7; - - if (iSizeBuffer > 0) - { - TEMP_BUFFER tempbuf; - LPBUFFER lpBufferDecrypt = tempbuf.getptr(); - buffer_adjust_size(lpBufferDecrypt, iSizeBuffer); - - int iSizeAfter = TEA_Decrypt((DWORD *) buffer_write_peek(lpBufferDecrypt), - (DWORD *) buffer_read_peek(m_lpInputBuffer), - GetDecryptionKey(), - iSizeBuffer); - - buffer_write_proceed(lpBufferDecrypt, iSizeAfter); - - int iBytesProceed = 0; - - // falseê°€ 리턴 ë˜ë©´ 다른 phase로 ë°”ë€ ê²ƒì´ë¯€ë¡œ 다시 프로세스로 ëŒìž…한다! - while (!m_pInputProcessor->Process(this, buffer_read_peek(lpBufferDecrypt), buffer_size(lpBufferDecrypt), iBytesProceed)) - { - if (iBytesProceed > iSizeBuffer) - { - buffer_read_proceed(m_lpInputBuffer, iSizeBuffer); - iSizeBuffer = 0; - iBytesProceed = 0; - break; - } - - buffer_read_proceed(m_lpInputBuffer, iBytesProceed); - iSizeBuffer -= iBytesProceed; - - buffer_read_proceed(lpBufferDecrypt, iBytesProceed); - iBytesProceed = 0; - } - - buffer_read_proceed(m_lpInputBuffer, iBytesProceed); - } - } -#endif // _IMPROVED_PACKET_ENCRYPTION_ return (bytes_read); } @@ -475,52 +390,18 @@ void DESC::Packet(const void * c_pvData, int iSize) TrafficProfiler::instance().Report(TrafficProfiler::IODIR_OUTPUT, *(BYTE *) c_pvData, iSize); // END_OF_TRAFFIC_PROFILER -#ifdef _IMPROVED_PACKET_ENCRYPTION_ int write_point_pos = m_lpOutputBuffer->write_point_pos; if (packet_encode(m_lpOutputBuffer, c_pvData, iSize)) { void* buf = m_lpOutputBuffer->mem_data + write_point_pos; - if (cipher_.activated()) { - cipher_.Encrypt(buf, iSize); + if (m_secureCipher.IsActivated()) { + m_secureCipher.EncryptInPlace(buf, iSize); } } else { m_iPhase = PHASE_CLOSE; } -#else - if (!m_bEncrypted) - { - if (!packet_encode(m_lpOutputBuffer, c_pvData, iSize)) - { - m_iPhase = PHASE_CLOSE; - } - } - else - { - if (buffer_has_space(m_lpOutputBuffer) < iSize + 8) - { - sys_err("desc buffer mem_size overflow. memsize(%u) write_pos(%u) iSize(%d)", - m_lpOutputBuffer->mem_size, m_lpOutputBuffer->write_point_pos, iSize); - - m_iPhase = PHASE_CLOSE; - } - else - { - // ì•”í˜¸í™”ì— í•„ìš”í•œ 충분한 ë²„í¼ í¬ê¸°ë¥¼ 확보한다. - /* buffer_adjust_size(m_lpOutputBuffer, iSize + 8); */ - DWORD * pdwWritePoint = (DWORD *) buffer_write_peek(m_lpOutputBuffer); - - if (packet_encode(m_lpOutputBuffer, c_pvData, iSize)) - { - int iSize2 = TEA_Encrypt(pdwWritePoint, pdwWritePoint, GetEncryptionKey(), iSize); - - if (iSize2 > iSize) - buffer_write_proceed(m_lpOutputBuffer, iSize2 - iSize); - } - } - } -#endif // _IMPROVED_PACKET_ENCRYPTION_ SAFE_BUFFER_DELETE(m_lpBufferedOutputBuffer); } @@ -564,24 +445,15 @@ void DESC::SetPhase(int _phase) //MessengerManager::instance().Logout(GetAccountTable().login); // ì˜ë„ì ìœ¼ë¡œ break 안검 case PHASE_LOGIN: case PHASE_LOADING: -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - m_bEncrypted = true; -#endif m_pInputProcessor = &m_inputLogin; break; case PHASE_GAME: case PHASE_DEAD: -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - m_bEncrypted = true; -#endif m_pInputProcessor = &m_inputMain; break; case PHASE_AUTH: -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - m_bEncrypted = true; -#endif m_pInputProcessor = &m_inputAuth; sys_log(0, "AUTH_PHASE %p", this); break; @@ -731,46 +603,81 @@ DWORD DESC::GetClientTime() return m_dwClientTime; } -#ifdef _IMPROVED_PACKET_ENCRYPTION_ -void DESC::SendKeyAgreement() +// Secure key exchange methods (libsodium/XChaCha20-Poly1305) +void DESC::SendKeyChallenge() { - TPacketKeyAgreement packet; - - size_t data_length = TPacketKeyAgreement::MAX_DATA_LEN; - size_t agreed_length = cipher_.Prepare(packet.data, &data_length); - if (agreed_length == 0) { - // Initialization failure + // Initialize cipher and generate keypair + if (!m_secureCipher.Initialize()) + { + sys_err("Failed to initialize SecureCipher"); SetPhase(PHASE_CLOSE); return; } - assert(data_length <= TPacketKeyAgreement::MAX_DATA_LEN); - packet.bHeader = HEADER_GC_KEY_AGREEMENT; - packet.wAgreedLength = (WORD)agreed_length; - packet.wDataLength = (WORD)data_length; + // Generate challenge + m_secureCipher.GenerateChallenge(m_challenge); + + // Build and send challenge packet + TPacketGCKeyChallenge packet; + packet.bHeader = HEADER_GC_KEY_CHALLENGE; + m_secureCipher.GetPublicKey(packet.server_pk); + memcpy(packet.challenge, m_challenge, SecureCipher::CHALLENGE_SIZE); Packet(&packet, sizeof(packet)); + + sys_log(0, "SECURE KEY_CHALLENGE sent to %s", GetHostName()); } -void DESC::SendKeyAgreementCompleted() +bool DESC::HandleKeyResponse(const uint8_t* client_pk, const uint8_t* challenge_response) { - TPacketKeyAgreementCompleted packet; + // Compute session keys from client's public key + if (!m_secureCipher.ComputeServerKeys(client_pk)) + { + sys_err("Failed to compute server session keys for %s", GetHostName()); + return false; + } - packet.bHeader = HEADER_GC_KEY_AGREEMENT_COMPLETED; + // Verify challenge response + if (!m_secureCipher.VerifyChallengeResponse(m_challenge, challenge_response)) + { + sys_err("Challenge response verification failed for %s", GetHostName()); + return false; + } + + sys_log(0, "SECURE KEY_RESPONSE verified for %s", GetHostName()); + return true; +} + +void DESC::SendKeyComplete() +{ + // Generate session token + uint8_t session_token[SecureCipher::SESSION_TOKEN_SIZE]; + randombytes_buf(session_token, sizeof(session_token)); + m_secureCipher.SetSessionToken(session_token); + + // Build and send complete packet + TPacketGCKeyComplete packet; + packet.bHeader = HEADER_GC_KEY_COMPLETE; + + // Encrypt the session token + if (!m_secureCipher.EncryptToken(session_token, sizeof(session_token), + packet.encrypted_token, packet.nonce)) + { + sys_err("Failed to encrypt session token for %s", GetHostName()); + SetPhase(PHASE_CLOSE); + return; + } Packet(&packet, sizeof(packet)); -} -bool DESC::FinishHandshake(size_t agreed_length, const void* buffer, size_t length) -{ - return cipher_.Activate(false, agreed_length, buffer, length); -} + // Flush before activating encryption + ProcessOutput(); -bool DESC::IsCipherPrepared() -{ - return cipher_.IsKeyPrepared(); + // Activate encryption + m_secureCipher.SetActivated(true); + + sys_log(0, "SECURE CIPHER ACTIVATED for %s", GetHostName()); } -#endif // #ifdef _IMPROVED_PACKET_ENCRYPTION_ void DESC::SetRelay(const char * c_pszName) { @@ -1005,45 +912,6 @@ DWORD DESC::GetLoginKey() return m_dwLoginKey; } -const BYTE* GetKey_20050304Myevan() -{ - static bool bGenerated = false; - static DWORD s_adwKey[1938]; - - if (!bGenerated) - { - bGenerated = true; - DWORD seed = 1491971513; - - for (UINT i = 0; i < BYTE(seed); ++i) - { - seed ^= 2148941891ul; - seed += 3592385981ul; - - s_adwKey[i] = seed; - } - } - - return (const BYTE*)s_adwKey; -} - -#ifndef _IMPROVED_PACKET_ENCRYPTION_ -void DESC::SetSecurityKey(const DWORD * c_pdwKey) -{ - const BYTE * c_pszKey = (const BYTE *) "JyTxtHljHJlVJHorRM301vf@4fvj10-v"; - - if (g_iUseLocale && !LC_IsKorea()) - c_pszKey = GetKey_20050304Myevan() + 37; - - thecore_memcpy(&m_adwDecryptionKey, c_pdwKey, 16); - TEA_Encrypt(&m_adwEncryptionKey[0], &m_adwDecryptionKey[0], (const DWORD *) c_pszKey, 16); - - sys_log(0, "SetSecurityKey decrypt %u %u %u %u encrypt %u %u %u %u", - m_adwDecryptionKey[0], m_adwDecryptionKey[1], m_adwDecryptionKey[2], m_adwDecryptionKey[3], - m_adwEncryptionKey[0], m_adwEncryptionKey[1], m_adwEncryptionKey[2], m_adwEncryptionKey[3]); -} -#endif // _IMPROVED_PACKET_ENCRYPTION_ - void DESC::AssembleCRCMagicCube(BYTE bProcPiece, BYTE bFilePiece) { static BYTE abXORTable[32] = diff --git a/src/game/desc.h b/src/game/desc.h index 0230599..15a6a5e 100644 --- a/src/game/desc.h +++ b/src/game/desc.h @@ -3,9 +3,7 @@ #include "constants.h" #include "input.h" -#ifdef _IMPROVED_PACKET_ENCRYPTION_ -#include "cipher.h" -#endif +#include "SecureCipher.h" #include @@ -128,17 +126,13 @@ class DESC DWORD GetHandshake() const { return m_dwHandshake; } DWORD GetClientTime(); -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - void SendKeyAgreement(); - void SendKeyAgreementCompleted(); - bool FinishHandshake(size_t agreed_length, const void* buffer, size_t length); - bool IsCipherPrepared(); -#else - // Obsolete encryption stuff here - void SetSecurityKey(const DWORD * c_pdwKey); - const DWORD * GetEncryptionKey() const { return &m_adwEncryptionKey[0]; } - const DWORD * GetDecryptionKey() const { return &m_adwDecryptionKey[0]; } -#endif + // Secure key exchange (libsodium/XChaCha20-Poly1305) + void SendKeyChallenge(); + bool HandleKeyResponse(const uint8_t* client_pk, const uint8_t* challenge_response); + void SendKeyComplete(); + SecureCipher& GetSecureCipher() { return m_secureCipher; } + const uint8_t* GetSessionToken() const { return m_secureCipher.GetSessionToken(); } + bool IsSecureCipherActivated() const { return m_secureCipher.IsActivated(); } // 제국 BYTE GetEmpire(); @@ -159,8 +153,6 @@ class DESC void SendLoginSuccessPacket(); //void SendServerStatePacket(int nIndex); - void SetPanamaKey(DWORD dwKey) {m_dwPanamaKey = dwKey;} - DWORD GetPanamaKey() const { return m_dwPanamaKey; } void SetLoginKey(DWORD dwKey); void SetLoginKey(CLoginKey * pkKey); @@ -234,7 +226,6 @@ class DESC CLoginKey * m_pkLoginKey; DWORD m_dwLoginKey; - DWORD m_dwPanamaKey; BYTE m_bCRCMagicCubeIdx; DWORD m_dwProcCRC; @@ -254,14 +245,9 @@ class DESC // Handshake timeout protection uint32_t m_handshake_time; -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - Cipher cipher_; -#else - // Obsolete encryption stuff here - bool m_bEncrypted; - DWORD m_adwDecryptionKey[4]; - DWORD m_adwEncryptionKey[4]; -#endif + // Secure cipher (libsodium/XChaCha20-Poly1305) + SecureCipher m_secureCipher; + uint8_t m_challenge[SecureCipher::CHALLENGE_SIZE]; public: LPEVENT m_pkDisconnectEvent; diff --git a/src/game/desc_client.cpp b/src/game/desc_client.cpp index 3bcc0fb..4a1c0df 100644 --- a/src/game/desc_client.cpp +++ b/src/game/desc_client.cpp @@ -189,9 +189,6 @@ void CLIENT_DESC::SetPhase(int iPhase) strlcpy(pck.szSocialID, r.social_id, sizeof(pck.szSocialID)); strlcpy(pck.szHost, d->GetHostName(), sizeof(pck.szHost)); pck.dwLoginKey = d->GetLoginKey(); -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - thecore_memcpy(pck.adwClientKey, d->GetDecryptionKey(), 16); -#endif buf.write(&pck, sizeof(TPacketLoginOnSetup)); } diff --git a/src/game/desc_manager.cpp b/src/game/desc_manager.cpp index bf4fbf2..2bb0459 100644 --- a/src/game/desc_manager.cpp +++ b/src/game/desc_manager.cpp @@ -10,20 +10,15 @@ #include "protocol.h" #include "messenger_manager.h" #include "p2p.h" -#include "ClientPackageCryptInfo.h" DESC_MANAGER::DESC_MANAGER() : m_bDestroyed(false) { Initialize(); - //NOTE : Destroy ëì—서 Initialize 를 부르는건 ë˜ ë¬´ìŠ¨ ì§“ì´ëƒ..-_-; ì •ë§ - - m_pPackageCrypt = new CClientPackageCryptInfo; } DESC_MANAGER::~DESC_MANAGER() { Destroy(); - delete m_pPackageCrypt; } void DESC_MANAGER::Initialize() @@ -427,7 +422,7 @@ DWORD DESC_MANAGER::CreateLoginKey(LPDESC d) do { - dwKey = number(1, INT_MAX); + dwKey = randombytes_uniform(INT_MAX) + 1; // CSPRNG: [1, INT_MAX] if (m_map_pkLoginKey.find(dwKey) != m_map_pkLoginKey.end()) continue; @@ -441,6 +436,17 @@ DWORD DESC_MANAGER::CreateLoginKey(LPDESC d) return dwKey; } +void DESC_MANAGER::ConsumeLoginKey(DWORD dwKey) +{ + std::map::iterator it = m_map_pkLoginKey.find(dwKey); + + if (it != m_map_pkLoginKey.end()) + { + M2_DELETE(it->second); + m_map_pkLoginKey.erase(it); + } +} + void DESC_MANAGER::ProcessExpiredLoginKey() { DWORD dwCurrentTime = get_dword_time(); @@ -453,10 +459,18 @@ void DESC_MANAGER::ProcessExpiredLoginKey() { it2 = it++; + // Clean up orphaned keys (descriptor gone but never expired) + if (it2->second->m_dwExpireTime == 0 && it2->second->m_pkDesc == NULL) + { + M2_DELETE(it2->second); + m_map_pkLoginKey.erase(it2); + continue; + } + if (it2->second->m_dwExpireTime == 0) continue; - if (dwCurrentTime - it2->second->m_dwExpireTime > 60000) + if (dwCurrentTime - it2->second->m_dwExpireTime > 15000) { M2_DELETE(it2->second); m_map_pkLoginKey.erase(it2); @@ -464,47 +478,4 @@ void DESC_MANAGER::ProcessExpiredLoginKey() } } -bool DESC_MANAGER::LoadClientPackageCryptInfo(const char* pDirName) -{ - return m_pPackageCrypt->LoadPackageCryptInfo(pDirName); -} - -void DESC_MANAGER::SendClientPackageCryptKey( LPDESC desc ) -{ - if( !desc ) - { - return; - } - - TPacketGCHybridCryptKeys packet; - { - packet.bHeader = HEADER_GC_HYBRIDCRYPT_KEYS; - m_pPackageCrypt->GetPackageCryptKeys( &(packet.pDataKeyStream), packet.KeyStreamLen ); - } - - if( packet.KeyStreamLen > 0 ) - { - desc->Packet( packet.GetStreamData(), packet.GetStreamSize() ); - } -} - -void DESC_MANAGER::SendClientPackageSDBToLoadMap( LPDESC desc, const char* pMapName ) -{ - if( !desc ) - { - return; - } - - TPacketGCPackageSDB packet; - { - packet.bHeader = HEADER_GC_HYBRIDCRYPT_SDB; - if( !m_pPackageCrypt->GetRelatedMapSDBStreams( pMapName, &(packet.m_pDataSDBStream), packet.iStreamLen ) ) - return; - } - - if( packet.iStreamLen > 0 ) - { - desc->Packet( packet.GetStreamData(), packet.GetStreamSize()); - } -} diff --git a/src/game/desc_manager.h b/src/game/desc_manager.h index 1bc44d0..3de49ac 100644 --- a/src/game/desc_manager.h +++ b/src/game/desc_manager.h @@ -7,7 +7,6 @@ #include "common/length.h" class CLoginKey; -class CClientPackageCryptInfo; class DESC_MANAGER : public singleton { @@ -57,6 +56,7 @@ class DESC_MANAGER : public singleton DWORD CreateLoginKey(LPDESC d); LPDESC FindByLoginKey(DWORD dwKey); + void ConsumeLoginKey(DWORD dwKey); void ProcessExpiredLoginKey(); bool IsDisconnectInvalidCRC() { return m_bDisconnectInvalidCRC; } @@ -64,11 +64,6 @@ class DESC_MANAGER : public singleton bool IsP2PDescExist(const char * szHost, WORD wPort); - // for C/S hybrid crypt - bool LoadClientPackageCryptInfo(const char* pDirName); - void SendClientPackageCryptKey( LPDESC desc ); - void SendClientPackageSDBToLoadMap( LPDESC desc, const char* pMapName ); - private: bool m_bDisconnectInvalidCRC; @@ -91,8 +86,6 @@ class DESC_MANAGER : public singleton int m_aiEmpireUserCount[EMPIRE_MAX_NUM]; bool m_bDestroyed; - - CClientPackageCryptInfo* m_pPackageCrypt; }; #endif diff --git a/src/game/input.cpp b/src/game/input.cpp index d1b78f6..f268066 100644 --- a/src/game/input.cpp +++ b/src/game/input.cpp @@ -178,14 +178,8 @@ void CInputProcessor::Handshake(LPDESC d, const char * c_pData) { if (d->HandshakeProcess(p->dwTime, p->lDelta, false)) { -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - d->SendKeyAgreement(); -#else - if (g_bAuthServer) - d->SetPhase(PHASE_AUTH); - else - d->SetPhase(PHASE_LOGIN); -#endif // #ifdef _IMPROVED_PACKET_ENCRYPTION_ + // Use secure key exchange (libsodium/XChaCha20-Poly1305) + d->SendKeyChallenge(); } } else @@ -570,36 +564,37 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) Pong(d); else if (bHeader == HEADER_CG_HANDSHAKE) Handshake(d, c_pData); -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - else if (bHeader == HEADER_CG_KEY_AGREEMENT) + // Secure key exchange (libsodium/XChaCha20-Poly1305) + else if (bHeader == HEADER_CG_KEY_RESPONSE) { - // Send out the key agreement completion packet first - // to help client to enter encryption mode - d->SendKeyAgreementCompleted(); - // Flush socket output before going encrypted - d->ProcessOutput(); + TPacketCGKeyResponse* p = (TPacketCGKeyResponse*)c_pData; - TPacketKeyAgreement* p = (TPacketKeyAgreement*)c_pData; - if (!d->IsCipherPrepared()) + if (!d->GetSecureCipher().IsInitialized()) { - sys_err ("Cipher isn't prepared. %s maybe a Hacker.", inet_ntoa(d->GetAddr().sin_addr)); + sys_err("SecureCipher not initialized. %s maybe a Hacker.", inet_ntoa(d->GetAddr().sin_addr)); d->DelayedDisconnect(5); return 0; } - if (d->FinishHandshake(p->wAgreedLength, p->data, p->wDataLength)) { - // Handshaking succeeded + + if (d->HandleKeyResponse(p->client_pk, p->challenge_response)) + { + // Key exchange succeeded, send completion + d->SendKeyComplete(); + + // Move to next phase if (g_bAuthServer) { d->SetPhase(PHASE_AUTH); } else { d->SetPhase(PHASE_LOGIN); } - } else { - sys_log(0, "[CInputHandshake] Key agreement failed: al=%u dl=%u", - p->wAgreedLength, p->wDataLength); + } + else + { + sys_err("[CInputHandshake] Secure key response verification failed for %s", + inet_ntoa(d->GetAddr().sin_addr)); d->SetPhase(PHASE_CLOSE); } } -#endif // _IMPROVED_PACKET_ENCRYPTION_ else sys_err("Handshake phase does not handle packet %d (fd %d)", bHeader, d->GetSocket()); diff --git a/src/game/input.h b/src/game/input.h index 62ff72a..5c7d347 100644 --- a/src/game/input.h +++ b/src/game/input.h @@ -17,6 +17,8 @@ enum }; void LoginFailure(LPDESC d, const char * c_pszStatus); +void RecordLoginFailure(const char* hostName); +void ClearLoginFailure(const char* hostName); void BroadcastGuildMarkUpdate(DWORD dwGuildID, WORD wImgIdx); @@ -78,7 +80,6 @@ class CInputLogin : public CInputProcessor virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData); protected: - void Login(LPDESC d, const char * data); void LoginByKey(LPDESC d, const char * data); void CharacterSelect(LPDESC d, const char * data); diff --git a/src/game/input_auth.cpp b/src/game/input_auth.cpp index 01efedc..9c1a6fc 100644 --- a/src/game/input_auth.cpp +++ b/src/game/input_auth.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "constants.h" #include "config.h" #include "input.h" @@ -8,8 +8,61 @@ #include "locale_service.h" #include "db.h" +#include + extern time_t get_global_time(); +static const int LOGIN_MAX_ATTEMPTS = 5; +static const DWORD LOGIN_BLOCK_DURATION_MS = 60000; + +struct LoginAttemptInfo +{ + int failCount; + DWORD lastAttemptTime; +}; + +static std::unordered_map s_loginAttempts; + +void RecordLoginFailure(const char* hostName) +{ + DWORD now = get_dword_time(); + auto it = s_loginAttempts.find(hostName); + + if (it == s_loginAttempts.end()) + { + s_loginAttempts[hostName] = { 1, now }; + } + else + { + if (now - it->second.lastAttemptTime >= LOGIN_BLOCK_DURATION_MS) + it->second.failCount = 0; + + it->second.failCount++; + it->second.lastAttemptTime = now; + } +} + +void ClearLoginFailure(const char* hostName) +{ + s_loginAttempts.erase(hostName); +} + +static bool IsLoginRateLimited(const char* hostName) +{ + auto it = s_loginAttempts.find(hostName); + if (it == s_loginAttempts.end()) + return false; + + DWORD now = get_dword_time(); + if (now - it->second.lastAttemptTime >= LOGIN_BLOCK_DURATION_MS) + { + s_loginAttempts.erase(it); + return false; + } + + return it->second.failCount >= LOGIN_MAX_ATTEMPTS; +} + bool FN_IS_VALID_LOGIN_STRING(const char *str) { const char* tmp; @@ -105,12 +158,21 @@ void CInputAuth::Login(LPDESC d, const char * c_pData) if (!g_bAuthServer) { - sys_err ("CInputAuth class is not for game server. IP %s might be a hacker.", + sys_err ("CInputAuth class is not for game server. IP %s might be a hacker.", inet_ntoa(d->GetAddr().sin_addr)); d->DelayedDisconnect(5); return; } + // Rate limiting: block IPs with too many failed attempts + if (IsLoginRateLimited(d->GetHostName())) + { + sys_log(0, "InputAuth::Login : RATE LIMITED IP %s", d->GetHostName()); + LoginFailure(d, "BLOCK"); + d->DelayedDisconnect(3); + return; + } + // string ë¬´ê²°ì„±ì„ ìœ„í•´ 복사 char login[LOGIN_MAX_LEN + 1]; trim_and_lower(pinfo->login, login, sizeof(login)); @@ -148,10 +210,8 @@ void CInputAuth::Login(LPDESC d, const char * c_pData) } DWORD dwKey = DESC_MANAGER::instance().CreateLoginKey(d); - DWORD dwPanamaKey = dwKey ^ pinfo->adwClientKey[0] ^ pinfo->adwClientKey[1] ^ pinfo->adwClientKey[2] ^ pinfo->adwClientKey[3]; - d->SetPanamaKey(dwPanamaKey); - sys_log(0, "InputAuth::Login : key %u:0x%x login %s", dwKey, dwPanamaKey, login); + sys_log(0, "InputAuth::Login : key %u login %s", dwKey, login); TPacketCGLogin3 * p = M2_NEW TPacketCGLogin3; thecore_memcpy(p, pinfo, sizeof(TPacketCGLogin3)); diff --git a/src/game/input_db.cpp b/src/game/input_db.cpp index 2b9f33f..49e18c9 100644 --- a/src/game/input_db.cpp +++ b/src/game/input_db.cpp @@ -38,7 +38,6 @@ #include "horsename_manager.h" #include "gm.h" -#include "panama.h" #include "map_location.h" #include "DragonSoul.h" @@ -435,12 +434,6 @@ void CInputDB::PlayerLoad(LPDESC d, const char * data) long lPublicMapIndex = lMapIndex >= 10000 ? lMapIndex / 10000 : lMapIndex; - //Send Supplementary Data Block if new map requires security packages in loading this map - const TMapRegion * rMapRgn = SECTREE_MANAGER::instance().GetMapRegion(lPublicMapIndex); - if( rMapRgn ) - { - DESC_MANAGER::instance().SendClientPackageSDBToLoadMap( d, rMapRgn->strMapName.c_str() ); - } //if (!map_allow_find(lMapIndex >= 10000 ? lMapIndex / 10000 : lMapIndex) || !CheckEmpire(ch, lMapIndex)) if (!map_allow_find(lPublicMapIndex)) { @@ -1721,16 +1714,7 @@ void CInputDB::AuthLogin(LPDESC d, const char * c_pData) if (bResult) { - // Panama 암호화 íŒ©ì— í•„ìš”í•œ 키 보내기 - SendPanamaList(d); ptoc.dwLoginKey = d->GetLoginKey(); - - //NOTE: AuthSucess보다 먼저 보내야지 안그러면 PHASE Closeê°€ ë˜ì„œ 보내지지 않는다.-_- - //Send Client Package CryptKey - { - DESC_MANAGER::instance().SendClientPackageCryptKey(d); - DESC_MANAGER::instance().SendClientPackageSDBToLoadMap(d, MAPNAME_DEFAULT); - } } else { diff --git a/src/game/input_login.cpp b/src/game/input_login.cpp index 5bc3a64..b7a441f 100644 --- a/src/game/input_login.cpp +++ b/src/game/input_login.cpp @@ -80,58 +80,6 @@ static bool FN_is_battle_zone(LPCHARACTER ch) return true; } -void CInputLogin::Login(LPDESC d, const char * data) -{ - TPacketCGLogin * pinfo = (TPacketCGLogin *) data; - - char login[LOGIN_MAX_LEN + 1]; - trim_and_lower(pinfo->login, login, sizeof(login)); - - sys_log(0, "InputLogin::Login : %s", login); - - TPacketGCLoginFailure failurePacket; - - if (g_iUseLocale && !test_server) - { - failurePacket.header = HEADER_GC_LOGIN_FAILURE; - strlcpy(failurePacket.szStatus, "VERSION", sizeof(failurePacket.szStatus)); - d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure)); - return; - } - - if (g_bNoMoreClient) - { - failurePacket.header = HEADER_GC_LOGIN_FAILURE; - strlcpy(failurePacket.szStatus, "SHUTDOWN", sizeof(failurePacket.szStatus)); - d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure)); - return; - } - - if (g_iUserLimit > 0) - { - int iTotal; - int * paiEmpireUserCount; - int iLocal; - - DESC_MANAGER::instance().GetUserCount(iTotal, &paiEmpireUserCount, iLocal); - - if (g_iUserLimit <= iTotal) - { - failurePacket.header = HEADER_GC_LOGIN_FAILURE; - strlcpy(failurePacket.szStatus, "FULL", sizeof(failurePacket.szStatus)); - d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure)); - return; - } - } - - TLoginPacket login_packet; - - strlcpy(login_packet.login, login, sizeof(login_packet.login)); - strlcpy(login_packet.passwd, pinfo->passwd, sizeof(login_packet.passwd)); - - db_clientdesc->DBPacket(HEADER_GD_LOGIN, d->GetHandle(), &login_packet, sizeof(TLoginPacket)); -} - void CInputLogin::LoginByKey(LPDESC d, const char * data) { TPacketCGLogin2 * pinfo = (TPacketCGLogin2 *) data; @@ -172,15 +120,11 @@ void CInputLogin::LoginByKey(LPDESC d, const char * data) sys_log(0, "LOGIN_BY_KEY: %s key %u", login, pinfo->dwLoginKey); d->SetLoginKey(pinfo->dwLoginKey); -#ifndef _IMPROVED_PACKET_ENCRYPTION_ - d->SetSecurityKey(pinfo->adwClientKey); -#endif TPacketGDLoginByKey ptod; strlcpy(ptod.szLogin, login, sizeof(ptod.szLogin)); ptod.dwLoginKey = pinfo->dwLoginKey; - thecore_memcpy(ptod.adwClientKey, pinfo->adwClientKey, sizeof(DWORD) * 4); strlcpy(ptod.szIP, d->GetHostName(), sizeof(ptod.szIP)); db_clientdesc->DBPacket(HEADER_GD_LOGIN_BY_KEY, d->GetHandle(), &ptod, sizeof(TPacketGDLoginByKey)); @@ -1054,10 +998,6 @@ int CInputLogin::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) Handshake(d, c_pData); break; - case HEADER_CG_LOGIN: - Login(d, c_pData); - break; - case HEADER_CG_LOGIN2: LoginByKey(d, c_pData); break; diff --git a/src/game/login_data.cpp b/src/game/login_data.cpp index c69a81a..c6618bf 100644 --- a/src/game/login_data.cpp +++ b/src/game/login_data.cpp @@ -7,7 +7,6 @@ extern std::string g_stBlockDate; CLoginData::CLoginData() { m_dwKey = 0; - memset(m_adwClientKey, 0, sizeof(m_adwClientKey)); m_dwConnectedPeerHandle = 0; m_dwLogonTime = 0; m_lRemainSecs = 0; @@ -16,16 +15,6 @@ CLoginData::CLoginData() memset(m_aiPremiumTimes, 0, sizeof(m_aiPremiumTimes)); } -void CLoginData::SetClientKey(const uint32_t * c_pdwClientKey) -{ - thecore_memcpy(&m_adwClientKey, c_pdwClientKey, sizeof(uint32_t) * 4); -} - -const uint32_t* CLoginData::GetClientKey() -{ - return &m_adwClientKey[0]; -} - void CLoginData::SetKey(uint32_t dwKey) { m_dwKey = dwKey; diff --git a/src/game/login_data.h b/src/game/login_data.h index 3bbc6b1..fb11ae0 100644 --- a/src/game/login_data.h +++ b/src/game/login_data.h @@ -6,9 +6,6 @@ class CLoginData public: CLoginData(); - void SetClientKey(const uint32_t * c_pdwClientKey); - - const uint32_t * GetClientKey(); void SetKey(uint32_t dwKey); uint32_t GetKey(); @@ -37,7 +34,6 @@ class CLoginData private: uint32_t m_dwKey; - uint32_t m_adwClientKey[4]; uint32_t m_dwConnectedPeerHandle; uint32_t m_dwLogonTime; long m_lRemainSecs; diff --git a/src/game/main.cpp b/src/game/main.cpp index 3cd8b61..31b6956 100644 --- a/src/game/main.cpp +++ b/src/game/main.cpp @@ -51,7 +51,6 @@ #include "horsename_manager.h" #include "MarkManager.h" #include "spam.h" -#include "panama.h" #include "threeway_war.h" #include "DragonLair.h" #include "skill_power.h" @@ -394,18 +393,10 @@ int main(int argc, char **argv) Cube_init(); Blend_Item_init(); ani_init(); - PanamaLoad(); if ( g_bTrafficProfileOn ) TrafficProfiler::instance().Initialize( TRAFFIC_PROFILE_FLUSH_CYCLE, "ProfileLog" ); - //TODO : make it config - const std::string strPackageCryptInfoDir = "package/"; - if( !desc_manager.LoadClientPackageCryptInfo( strPackageCryptInfoDir.c_str() ) ) - { - sys_err("Failed to Load ClientPackageCryptInfo File(%s)", strPackageCryptInfoDir.c_str()); - } - while (idle()); sys_log(0, " Starting..."); diff --git a/src/game/packet.h b/src/game/packet.h index 19719e1..e3657cb 100644 --- a/src/game/packet.h +++ b/src/game/packet.h @@ -5,9 +5,9 @@ enum HEADER_CG_HANDSHAKE = 0xff, HEADER_CG_PONG = 0xfe, HEADER_CG_TIME_SYNC = 0xfc, - HEADER_CG_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_ + HEADER_CG_KEY_RESPONSE = 0xf9, // Secure key exchange response (libsodium) + HEADER_CG_LOGIN_SECURE = 0xf6, // Secure login packet - HEADER_CG_LOGIN = 1, HEADER_CG_ATTACK = 2, HEADER_CG_CHAT = 3, HEADER_CG_CHARACTER_CREATE = 4, @@ -106,8 +106,8 @@ enum HEADER_CG_CLIENT_VERSION2 = 0xf1, /********************************************************/ - HEADER_GC_KEY_AGREEMENT_COMPLETED = 0xfa, // _IMPROVED_PACKET_ENCRYPTION_ - HEADER_GC_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_ + HEADER_GC_KEY_CHALLENGE = 0xf8, // Secure key exchange challenge (libsodium) + HEADER_GC_KEY_COMPLETE = 0xf7, // Secure key exchange complete (libsodium) HEADER_GC_TIME_SYNC = 0xfc, HEADER_GC_PHASE = 0xfd, HEADER_GC_BINDUDP = 0xfe, @@ -264,13 +264,6 @@ enum HEADER_GC_AUTH_SUCCESS = 150, - HEADER_GC_PANAMA_PACK = 151, - - //HYBRID CRYPT - HEADER_GC_HYBRIDCRYPT_KEYS = 152, - HEADER_GC_HYBRIDCRYPT_SDB = 153, // SDB means Supplmentary Data Blocks - //HYBRID CRYPT - // ROULETTE HEADER_GC_ROULETTE = 200, // END_ROULETTE @@ -540,19 +533,11 @@ typedef struct command_handshake int32_t lDelta; } TPacketCGHandshake; -typedef struct command_login -{ - uint8_t header; - char login[LOGIN_MAX_LEN + 1]; - char passwd[PASSWD_MAX_LEN + 1]; -} TPacketCGLogin; - typedef struct command_login2 { uint8_t header; char login[LOGIN_MAX_LEN + 1]; uint32_t dwLoginKey; - uint32_t adwClientKey[4]; } TPacketCGLogin2; typedef struct command_login3 @@ -560,7 +545,6 @@ typedef struct command_login3 uint8_t header; char login[LOGIN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; - uint32_t adwClientKey[4]; } TPacketCGLogin3; typedef struct packet_login_key @@ -2157,127 +2141,43 @@ typedef struct SPacketGGCheckAwakeness uint8_t bHeader; } TPacketGGCheckAwakeness; -typedef struct SPacketGCPanamaPack +// Secure authentication packets (libsodium/XChaCha20-Poly1305) +#pragma pack(push, 1) + +// Server -> Client: Key exchange challenge +struct TPacketGCKeyChallenge { - uint8_t bHeader; - char szPackName[256]; - uint8_t abIV[32]; -} TPacketGCPanamaPack; - -//TODO : ì•„ìš° 짱나..가변패킷 사ì´ì¦ˆ 받아들ì¼ìˆ˜ 있게 패킷 핸들러 Refactoring 하ìž. -typedef struct SPacketGCHybridCryptKeys -{ - SPacketGCHybridCryptKeys() : m_pStream(NULL) {} - ~SPacketGCHybridCryptKeys() - { - //GCC ì—ì„  NULL delete í•´ë„ ê´œì°®ë‚˜? ì¼ë‹¨ 안전하게 NULL ì²´í¬ í•˜ìž. ( ê·¼ë° ì´ê±° C++ 표준아니었나 --a ) - if( m_pStream ) - { - delete[] m_pStream; - m_pStream = NULL; - } - } - - uint32_t GetStreamSize() - { - return sizeof(bHeader) + sizeof(uint16_t) + sizeof(int32_t) + KeyStreamLen; - } - - uint8_t* GetStreamData() - { - if( m_pStream ) - delete[] m_pStream; - - uDynamicPacketSize = (uint16_t)GetStreamSize(); - - m_pStream = new uint8_t[ uDynamicPacketSize ]; - - memcpy( m_pStream, &bHeader, 1 ); - memcpy( m_pStream+1, &uDynamicPacketSize, 2 ); - memcpy( m_pStream+3, &KeyStreamLen, 4 ); - - if( KeyStreamLen > 0 ) - memcpy( m_pStream+7, pDataKeyStream, KeyStreamLen ); - - return m_pStream; - } - - uint8_t bHeader; - uint16_t uDynamicPacketSize; // ë¹Œì–´ë¨¹ì„ í´ë¼ DynamicPacketHeader êµ¬ì¡°ë•Œë¬¸ì— ë§žì¶°ì¤˜ì•¼í•œë‹¤ -_-; - int32_t KeyStreamLen; - uint8_t* pDataKeyStream; - -private: - uint8_t* m_pStream; - - -} TPacketGCHybridCryptKeys; - - -typedef struct SPacketGCPackageSDB -{ - SPacketGCPackageSDB() : m_pDataSDBStream(NULL), m_pStream(NULL) {} - ~SPacketGCPackageSDB() - { - if( m_pStream ) - { - delete[] m_pStream; - m_pStream = NULL; - } - } - - uint32_t GetStreamSize() - { - return sizeof(bHeader) + sizeof(uint16_t) + sizeof(int32_t) + iStreamLen; - } - - uint8_t* GetStreamData() - { - if( m_pStream ) - delete[] m_pStream; - - uDynamicPacketSize = GetStreamSize(); - - m_pStream = new uint8_t[ uDynamicPacketSize ]; - - memcpy( m_pStream, &bHeader, 1 ); - memcpy( m_pStream+1, &uDynamicPacketSize, 2 ); - memcpy( m_pStream+3, &iStreamLen, 4 ); - - if( iStreamLen > 0 ) - memcpy( m_pStream+7, m_pDataSDBStream, iStreamLen ); - - return m_pStream; - } - - uint8_t bHeader; - uint16_t uDynamicPacketSize; // ë¹Œì–´ë¨¹ì„ í´ë¼ DynamicPacketHeader êµ¬ì¡°ë•Œë¬¸ì— ë§žì¶°ì¤˜ì•¼í•œë‹¤ -_-; - int32_t iStreamLen; - uint8_t* m_pDataSDBStream; - -private: - uint8_t* m_pStream; - - -} TPacketGCPackageSDB; - -#ifdef _IMPROVED_PACKET_ENCRYPTION_ -struct TPacketKeyAgreement -{ - static const int32_t MAX_DATA_LEN = 256; - uint8_t bHeader; - uint16_t wAgreedLength; - uint16_t wDataLength; - uint8_t data[MAX_DATA_LEN]; + uint8_t bHeader; // HEADER_GC_KEY_CHALLENGE (0xf8) + uint8_t server_pk[32]; // Server's X25519 public key + uint8_t challenge[32]; // Random challenge bytes }; -struct TPacketKeyAgreementCompleted +// Client -> Server: Key exchange response +struct TPacketCGKeyResponse { - uint8_t bHeader; - uint8_t data[3]; // dummy (not used) + uint8_t bHeader; // HEADER_CG_KEY_RESPONSE (0xf9) + uint8_t client_pk[32]; // Client's X25519 public key + uint8_t challenge_response[32]; // HMAC(challenge, rx_key) }; -#endif // _IMPROVED_PACKET_ENCRYPTION_ +// Server -> Client: Key exchange complete +struct TPacketGCKeyComplete +{ + uint8_t bHeader; // HEADER_GC_KEY_COMPLETE (0xf7) + uint8_t encrypted_token[32 + 16]; // Session token + Poly1305 tag + uint8_t nonce[24]; // XChaCha20 nonce +}; + +// Client -> Server: Secure login +struct TPacketCGLoginSecure +{ + uint8_t bHeader; // HEADER_CG_LOGIN_SECURE (0xf6) + char name[LOGIN_MAX_LEN + 1]; + char pwd[PASSWD_MAX_LEN + 1]; + uint8_t session_token[32]; // Session token from KeyComplete +}; + +#pragma pack(pop) #define MAX_EFFECT_FILE_NAME 128 typedef struct SPacketGCSpecificEffect diff --git a/src/game/packet_info.cpp b/src/game/packet_info.cpp index afa1278..3c87ed3 100644 --- a/src/game/packet_info.cpp +++ b/src/game/packet_info.cpp @@ -137,13 +137,10 @@ CPacketInfoCG::CPacketInfoCG() Set(HEADER_CG_MARK_IDXLIST, sizeof(TPacketCGMarkIDXList), "MarkIdxList", false); Set(HEADER_CG_MARK_CRCLIST, sizeof(TPacketCGMarkCRCList), "MarkCrcList", false); Set(HEADER_CG_MARK_UPLOAD, sizeof(TPacketCGMarkUpload), "MarkUpload", false); -#ifdef _IMPROVED_PACKET_ENCRYPTION_ - Set(HEADER_CG_KEY_AGREEMENT, sizeof(TPacketKeyAgreement), "KeyAgreement", false); -#endif + Set(HEADER_CG_KEY_RESPONSE, sizeof(TPacketCGKeyResponse), "KeyResponse", false); Set(HEADER_CG_GUILD_SYMBOL_UPLOAD, sizeof(TPacketCGGuildSymbolUpload), "SymbolUpload", false); Set(HEADER_CG_SYMBOL_CRC, sizeof(TPacketCGSymbolCRC), "SymbolCRC", false); - Set(HEADER_CG_LOGIN, sizeof(TPacketCGLogin), "Login", true); Set(HEADER_CG_LOGIN2, sizeof(TPacketCGLogin2), "Login2", true); Set(HEADER_CG_LOGIN3, sizeof(TPacketCGLogin3), "Login3", true); Set(HEADER_CG_ATTACK, sizeof(TPacketCGAttack), "Attack", true); diff --git a/src/game/panama.cpp b/src/game/panama.cpp deleted file mode 100644 index 3ed42ee..0000000 --- a/src/game/panama.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "stdafx.h" -#include "desc.h" -#include "packet.h" - -typedef std::vector > PanamaVectorType; -static PanamaVectorType s_panamaVector; - -size_t PanamaLoad() -{ - FILE* fp; - - fp = fopen("panama/panama.lst", "r"); - - if (!fp) - return 0; - - char buf[256]; - - while (fgets(buf, 256, fp)) - { - char szPackName[256]; - char szIVFileName[256]; - char szIVFileNameConfig[256]; - - sscanf(buf, " %s %s ", szPackName, szIVFileNameConfig); - snprintf(szIVFileName, sizeof(szIVFileName), "panama/%s", szIVFileNameConfig); - - FILE * fpIV = fopen(szIVFileName, "rb"); - - if (!fpIV) - { - sys_err("cannot open iv file %s", szIVFileName); - continue; - } - - BYTE abIV[32]; - - if (32 != fread(abIV, sizeof(BYTE), 32, fpIV)) - sys_err("IV file format error! %s", szIVFileName); - else - { - char szHex[64 + 1]; - - for (int i = 0; i < 32; ++i) - snprintf(szHex + i * 2, sizeof(szHex) - i * 2, "%02x", abIV[i]); - - sys_log(0, "PANAMA: %s %s", szPackName, szHex); - - s_panamaVector.push_back(std::make_pair(szPackName, M2_NEW BYTE[32])); - memcpy(s_panamaVector[s_panamaVector.size() - 1].second, abIV, 32); - } - - fclose(fpIV); - } - - fclose(fp); - return s_panamaVector.size(); -} - -void PanamaDestroy() -{ - PanamaVectorType::iterator it = s_panamaVector.begin(); - - while (it != s_panamaVector.end()) { - M2_DELETE_ARRAY(it->second); - ++it; - } -} - -void SendPanamaList(LPDESC d) -{ - TPacketGCPanamaPack pack; - - pack.bHeader = HEADER_GC_PANAMA_PACK; - - PanamaVectorType::iterator it = s_panamaVector.begin(); - - while (it != s_panamaVector.end()) - { - strlcpy(pack.szPackName, it->first.c_str(), sizeof(pack.szPackName)); - memcpy(pack.abIV, it->second, sizeof(pack.abIV)); - - - DWORD* ivs = (DWORD*)pack.abIV; - for (int i = 0; i != 32 / sizeof(DWORD); i++) - { - ivs[i] ^= d->GetPanamaKey() + i * 16777619; // ë”블워드단위로 ë³€í˜•ëœ íŒŒë‚˜ë§ˆ 키를 XOR 해준다 - } - ++it; - - d->Packet(&pack, sizeof(pack)); - } -} diff --git a/src/game/panama.h b/src/game/panama.h deleted file mode 100644 index 7002a78..0000000 --- a/src/game/panama.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __INC_METIN_II_PANAMA_H__ -#define __INC_METIN_II_PANAMA_H__ - -extern size_t PanamaLoad(); -extern void SendPanamaList(LPDESC d); - -#endif diff --git a/src/libthecore/crypt.h b/src/libthecore/crypt.h index 43218f0..2444626 100644 --- a/src/libthecore/crypt.h +++ b/src/libthecore/crypt.h @@ -1,16 +1,5 @@ #pragma once -/* TEA is a 64-bit symmetric block cipher with a 128-bit key, developed - by David J. Wheeler and Roger M. Needham, and described in their - paper at . - - This implementation is based on their code in - -*/ - -int TEA_Encrypt(DWORD *dest, const DWORD *src, const DWORD *key, int size); -int TEA_Decrypt(DWORD *dest, const DWORD *src, const DWORD *key, int size); - int GOST_Encrypt(DWORD * DstBuffer, const DWORD * SrcBuffer, const DWORD * KeyAddress, DWORD Length, DWORD *IVector); int GOST_Decrypt(DWORD * DstBuffer, const DWORD * SrcBuffer, const DWORD * KeyAddress, DWORD Length, DWORD *IVector); diff --git a/src/libthecore/tea.cpp b/src/libthecore/tea.cpp deleted file mode 100644 index 2b34321..0000000 --- a/src/libthecore/tea.cpp +++ /dev/null @@ -1,314 +0,0 @@ -#include "stdafx.h" - -#define TEA_ROUND 32 -#define DELTA 0x9E3779B9 - -char tea_nilbuf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - -INLINE void tea_code(const DWORD sz, const DWORD sy, const DWORD *key, DWORD *dest) -{ - DWORD y = sy, z = sz, sum = 0; - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 1 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 2 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 3 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 4 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 5 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 6 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 7 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 8 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 9 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 10 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 11 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 12 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 13 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 14 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 15 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 16 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 17 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 18 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 19 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 20 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 21 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 22 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 23 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 24 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 25 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 26 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 27 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 28 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 29 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 30 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 31 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - y += ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); // 32 - sum += DELTA; - z += ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); - - *(dest++) = y; - *dest = z; -} - -INLINE void tea_decode(const DWORD sz, const DWORD sy, const DWORD *key, DWORD *dest) -{ - DWORD y = sy, z = sz, sum = DELTA * TEA_ROUND; - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 1 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 2 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 3 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 4 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 5 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 6 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 7 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 8 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 9 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 10 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 11 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 12 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 13 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 14 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 15 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 16 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 17 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 18 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 19 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 20 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 21 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 22 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 23 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 24 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 25 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 26 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 27 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 28 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 29 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 30 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 31 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - z -= ((y << 4 ^ y >> 5) + y) ^ (sum + key[sum >> 11 & 3]); // 32 - sum -= DELTA; - y -= ((z << 4 ^ z >> 5) + z) ^ (sum + key[sum & 3]); - - *(dest++) = y; - *dest = z; -} - -int TEA_Encrypt(DWORD *dest, const DWORD *src, const DWORD * key, int size) -{ - int i; - int resize; - - if (size % 8 != 0) - { - resize = size + 8 - (size % 8); - memset((char *) src + size, 0, resize - size); - } - else - resize = size; - - for (i = 0; i < resize >> 3; i++, dest += 2, src += 2) - tea_code(*(src + 1), *src, key, dest); - - return (resize); -} - -int TEA_Decrypt(DWORD *dest, const DWORD *src, const DWORD * key, int size) -{ - int i; - int resize; - - if (size % 8 != 0) - resize = size + 8 - (size % 8); - else - resize = size; - - for (i = 0; i < resize >> 3; i++, dest += 2, src += 2) - tea_decode(*(src + 1), *src, key, dest); - - return (resize); -} - diff --git a/src/libthecore/tea.s b/src/libthecore/tea.s deleted file mode 100644 index 220350b..0000000 --- a/src/libthecore/tea.s +++ /dev/null @@ -1,8682 +0,0 @@ - .file "tea.c" - .file 1 "tea.c" - .section .debug_abbrev,"",@progbits -.Ldebug_abbrev0: - .section .debug_info,"",@progbits -.Ldebug_info0: - .section .debug_line,"",@progbits -.Ldebug_line0: - .text -.Ltext0: - .file 2 "/usr/include/machine/_types.h" - .file 3 "/usr/include/sys/_types.h" - .file 4 "/usr/include/stdio.h" - .file 5 "/usr/include/stdlib.h" - .file 6 "/usr/include/sys/types.h" - .file 7 "/usr/include/sys/_sigset.h" - .file 8 "/usr/include/sys/_timeval.h" - .file 9 "/usr/include/sys/timespec.h" - .file 10 "/usr/include/sys/select.h" - .file 11 "/usr/include/fcntl.h" - .file 12 "/usr/include/runetype.h" - .file 13 "/usr/include/sys/dirent.h" - .file 14 "/usr/include/dirent.h" - .file 15 "/usr/include/sys/time.h" - .file 16 "/usr/include/time.h" - .file 17 "/usr/include/sys/stat.h" - .file 18 "/usr/include/sys/_iovec.h" - .file 19 "/usr/include/sys/socket.h" - .file 20 "/usr/include/netinet/in.h" - .file 21 "/usr/include/netinet6/in6.h" - .file 22 "/usr/include/netdb.h" - .file 23 "/usr/include/machine/signal.h" - .file 24 "/usr/include/sys/signal.h" - .file 25 "/usr/include/sched.h" - .file 26 "/usr/include/pthread.h" - .file 27 "/usr/include/semaphore.h" - .file 28 "/usr/include/sys/event.h" - .file 29 "../include/typedef.h" - .file 30 "../include/heart.h" - .file 31 "../include/fdwatch.h" - .file 32 "../include/buffer.h" - .file 33 "../include/main.h" - .file 34 "../include/hash.h" -.globl tea_nilbuf - .section .bss - .type tea_nilbuf, @object - .size tea_nilbuf, 8 -tea_nilbuf: - .zero 8 - .text - .p2align 4,,15 -.globl tea_code - .type tea_code, @function -tea_code: -.LFB19: - .loc 1 33 0 - pushl %ebp -.LCFI0: - movl %esp, %ebp -.LCFI1: - pushl %edi -.LCFI2: - pushl %esi -.LCFI3: - pushl %ebx -.LCFI4: - subl $12, %esp -.LCFI5: - movl 8(%ebp), %ecx - movl 16(%ebp), %esi - .loc 1 36 0 - movl %ecx, %edx - movl %ecx, %eax -.LBB2: - shrl $5, %eax - .loc 1 40 0 - movl 4(%esi), %edi - .loc 1 36 0 - sall $4, %edx - xorl %eax, %edx - movl (%esi), %eax - addl %ecx, %edx - movl %eax, -16(%ebp) - xorl %eax, %edx - movl 12(%ebp), %eax - addl %eax, %edx - .loc 1 38 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl 12(%esi), %ebx - addl %edx, %eax - .loc 1 42 0 - movl 8(%esi), %esi - .loc 1 38 0 - movl %ebx, -20(%ebp) - subl $1640531527, %ebx - xorl %ebx, %eax - .loc 1 42 0 - movl %esi, -24(%ebp) - .loc 1 38 0 - addl %eax, %ecx - .loc 1 40 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - .loc 1 42 0 - addl $1013904242, %esi - .loc 1 40 0 - addl %ecx, %eax - leal -1640531527(%edi), %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 42 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 44 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 50 0 - movl -16(%ebp), %esi - .loc 1 46 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - .loc 1 50 0 - addl $2027808484, %esi - .loc 1 46 0 - addl %edx, %eax - leal -626627285(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 48 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - subl $626627285, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 50 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 52 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 78 0 - movl -20(%ebp), %esi - .loc 1 54 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $387276957, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 56 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %ecx, %eax - leal 387276957(%edi), %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 58 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $1253254570, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 60 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - subl $1253254570, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 62 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - addl $1401181199, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 64 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - addl $1401181199, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 66 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - leal -239350328(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 68 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - subl $239350328, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 70 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - subl $1879881855, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 72 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal -1879881855(%edi), %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 74 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $774553914, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 76 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - .loc 1 78 0 - subl $865977613, %esi - .loc 1 76 0 - movl -24(%ebp), %ebx - addl %ecx, %eax - addl $774553914, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 78 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 80 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 86 0 - leal 147926629(%edi), %esi - .loc 1 82 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - addl $1788458156, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 84 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - addl $1788458156, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 86 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 88 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 90 0 - movl %edx, %eax - movl %edx, %ebx - .loc 1 114 0 - movl -16(%ebp), %esi - .loc 1 90 0 - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -1492604898(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 92 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - subl $1492604898, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 94 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $1161830871, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 96 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - addl $1161830871, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 98 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $478700656, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 100 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - subl $478700656, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 102 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - subl $2119232183, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 104 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal -2119232183(%edi), %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 114 0 - addl $1549107828, %esi - .loc 1 106 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - leal 535203586(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 108 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - addl $535203586, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 110 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -1105327941(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 112 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - subl $1105327941, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 114 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 116 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 122 0 - movl -24(%ebp), %esi - .loc 1 118 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - .loc 1 122 0 - subl $1731955226, %esi - .loc 1 118 0 - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $91423699, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 120 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %ecx, %eax - leal -91423699(%edi), %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 122 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 124 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 126 0 - movl %edx, %eax - movl %edx, %ebx - .loc 1 158 0 - movl -20(%ebp), %esi - .loc 1 126 0 - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal 922480543(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 128 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - addl $922480543, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 130 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - leal -718050984(%edi), %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 132 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - subl $718050984, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 134 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $1936384785, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 136 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal 1936384785(%edi), %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 138 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - addl $295853258, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 140 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - addl $295853258, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 142 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - subl $1344678269, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 144 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - subl $1344678269, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 150 0 - subl $330774027, %edi - .loc 1 146 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - addl $1309757500, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 148 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - addl $1309757500, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 150 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - xorl %edi, %eax - addl %eax, %ecx - .loc 1 152 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %edi, %eax - addl %eax, %edx - .loc 1 154 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - subl $1971305554, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 158 0 - addl $683130215, %esi - .loc 1 156 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - subl $1971305554, %ebx - xorl %ebx, %eax - addl %eax, %edx - .loc 1 158 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - addl %eax, %ecx - .loc 1 160 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - addl %eax, %edx - .loc 1 162 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - subl $957401312, %ebx - xorl %ebx, %eax - addl %eax, %ecx - .loc 1 164 0 - movl 20(%ebp), %eax - movl %edx, (%eax) - .loc 1 165 0 - movl %ecx, 4(%eax) - .loc 1 166 0 - addl $12, %esp - popl %ebx - popl %esi - popl %edi - popl %ebp - ret -.LBE2: -.LFE19: - .size tea_code, .-tea_code - .p2align 4,,15 -.globl tea_decode - .type tea_decode, @function -tea_decode: -.LFB21: - .loc 1 169 0 - pushl %ebp -.LCFI6: - movl %esp, %ebp -.LCFI7: - pushl %edi -.LCFI8: - pushl %esi -.LCFI9: - pushl %ebx -.LCFI10: - subl $12, %esp -.LCFI11: - movl 12(%ebp), %edx - movl 16(%ebp), %edi - movl 8(%ebp), %ecx - .loc 1 172 0 - movl %edx, %eax - movl %edx, %ebx -.LBB3: - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl 8(%edi), %ebx - addl %edx, %eax - movl %ebx, -16(%ebp) - subl $957401312, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 174 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl 12(%edi), %ebx - addl %ecx, %eax - movl %ebx, %esi - movl %ebx, -20(%ebp) - addl $683130215, %esi - xorl %esi, %eax - subl %eax, %edx - .loc 1 176 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 178 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - subl $1971305554, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 180 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl (%edi), %ebx - addl %edx, %eax - .loc 1 182 0 - movl 4(%edi), %edi - .loc 1 180 0 - movl %ebx, -24(%ebp) - subl $1971305554, %ebx - .loc 1 182 0 - leal -330774027(%edi), %esi - .loc 1 180 0 - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 182 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - subl %eax, %edx - .loc 1 184 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 186 0 - movl %ecx, %eax - movl %ecx, %ebx - .loc 1 210 0 - movl -16(%ebp), %esi - .loc 1 186 0 - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - addl $1309757500, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 188 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $1309757500, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 190 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - subl $1344678269, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 192 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - subl $1344678269, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 194 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - addl $295853258, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 196 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - addl $295853258, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 198 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal 1936384785(%edi), %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 200 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - addl $1936384785, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 202 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - subl $718050984, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 204 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -718050984(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 206 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - addl $922480543, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 208 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal 922480543(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 210 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - subl $1731955226, %esi - xorl %esi, %eax - subl %eax, %edx - .loc 1 212 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 214 0 - movl %ecx, %eax - movl %ecx, %ebx - .loc 1 218 0 - movl -24(%ebp), %esi - .loc 1 214 0 - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal -91423699(%edi), %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 218 0 - addl $1549107828, %esi - .loc 1 216 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $91423699, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 218 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - subl %eax, %edx - .loc 1 220 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 246 0 - leal 147926629(%edi), %esi - .loc 1 222 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - subl $1105327941, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 224 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -1105327941(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 226 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - addl $535203586, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 228 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal 535203586(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 230 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal -2119232183(%edi), %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 232 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - subl $2119232183, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 234 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - subl $478700656, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 236 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $478700656, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 238 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - addl $1161830871, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 240 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - addl $1161830871, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 242 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - subl $1492604898, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 244 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -1492604898(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 246 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - subl %eax, %edx - .loc 1 248 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 254 0 - movl -20(%ebp), %esi - .loc 1 250 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - addl $1788458156, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 254 0 - subl $865977613, %esi - .loc 1 252 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $1788458156, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 254 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - subl %eax, %edx - .loc 1 256 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 282 0 - movl -24(%ebp), %esi - .loc 1 258 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - addl $774553914, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 260 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - addl $774553914, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 262 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal -1879881855(%edi), %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 264 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - subl $1879881855, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 266 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - subl $239350328, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 268 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -239350328(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 270 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - addl $1401181199, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 272 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %edx, %eax - addl $1401181199, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 274 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -16(%ebp), %ebx - addl %ecx, %eax - subl $1253254570, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 276 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $1253254570, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 278 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - leal 387276957(%edi), %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 280 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %edx, %eax - .loc 1 282 0 - addl $2027808484, %esi - .loc 1 280 0 - addl $387276957, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 282 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %esi, %eax - subl %eax, %edx - .loc 1 284 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 290 0 - movl -16(%ebp), %esi - .loc 1 286 0 - movl %ecx, %eax - movl %ecx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %ecx, %eax - subl $626627285, %ebx - xorl %ebx, %eax - subl %eax, %edx - .loc 1 288 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - leal -626627285(%edi), %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 290 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - addl $1013904242, %esi - .loc 1 294 0 - subl $1640531527, %edi - .loc 1 290 0 - xorl %esi, %eax - subl %eax, %edx - .loc 1 292 0 - movl %edx, %eax - movl %edx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %edx, %eax - xorl %esi, %eax - subl %eax, %ecx - .loc 1 294 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - addl %ecx, %eax - xorl %edi, %eax - subl %eax, %edx - .loc 1 296 0 - movl %edx, %eax - movl %edx, %ebx - sall $4, %eax - shrl $5, %ebx - xorl %ebx, %eax - movl -20(%ebp), %ebx - addl %edx, %eax - subl $1640531527, %ebx - xorl %ebx, %eax - subl %eax, %ecx - .loc 1 298 0 - movl %ecx, %eax - movl %ecx, %ebx - shrl $5, %ebx - sall $4, %eax - xorl %ebx, %eax - movl -24(%ebp), %ebx - addl %ecx, %eax - xorl %ebx, %eax - subl %eax, %edx - .loc 1 300 0 - movl 20(%ebp), %eax - movl %edx, (%eax) - .loc 1 301 0 - movl %ecx, 4(%eax) - .loc 1 302 0 - addl $12, %esp - popl %ebx - popl %esi - popl %edi - popl %ebp - ret -.LBE3: -.LFE21: - .size tea_decode, .-tea_decode - .p2align 4,,15 -.globl tea_encrypt - .type tea_encrypt, @function -tea_encrypt: -.LFB23: - .loc 1 305 0 - pushl %ebp -.LCFI12: - movl %esp, %ebp -.LCFI13: - pushl %edi -.LCFI14: - pushl %esi -.LCFI15: - pushl %ebx -.LCFI16: - subl $28, %esp -.LCFI17: - movl 20(%ebp), %edx - movl 8(%ebp), %edi - movl 12(%ebp), %esi - .loc 1 315 0 -.LBB4: - testb $7, %dl - movl %edx, -16(%ebp) - je .L6 - .loc 1 311 0 - testl %edx, %edx - movl %edx, %eax - js .L14 -.L5: - andl $-8, %eax - addl $8, %eax - movl %eax, -16(%ebp) - .loc 1 312 0 - subl %edx, %eax - leal (%edx,%esi), %edx - movl %eax, 8(%esp) - xorl %eax, %eax - movl %eax, 4(%esp) - movl %edx, (%esp) - call memset -.L6: - .loc 1 317 0 - movl -16(%ebp), %eax - sarl $3, %eax - testl %eax, %eax - jle .L13 - movl %eax, %ebx - .p2align 4,,15 -.L11: - .loc 1 318 0 - movl %edi, 12(%esp) - movl 16(%ebp), %eax - .loc 1 317 0 - addl $8, %edi - .loc 1 318 0 - movl %eax, 8(%esp) - movl (%esi), %eax - movl %eax, 4(%esp) - movl 4(%esi), %eax - .loc 1 317 0 - addl $8, %esi - .loc 1 318 0 - movl %eax, (%esp) - call tea_code - .loc 1 317 0 - decl %ebx - jne .L11 -.L13: - .loc 1 321 0 -.LBE4: - movl -16(%ebp), %eax - addl $28, %esp - popl %ebx - popl %esi - popl %edi - popl %ebp - ret -.L14: -.LBB5: - leal 7(%edx), %eax - jmp .L5 -.LBE5: -.LFE23: - .size tea_encrypt, .-tea_encrypt - .p2align 4,,15 -.globl tea_decrypt - .type tea_decrypt, @function -tea_decrypt: -.LFB25: - .loc 1 324 0 - pushl %ebp -.LCFI18: - movl %esp, %ebp -.LCFI19: - pushl %edi -.LCFI20: - pushl %esi -.LCFI21: - pushl %ebx -.LCFI22: - subl $28, %esp -.LCFI23: - movl 20(%ebp), %edx - movl 8(%ebp), %edi - movl 12(%ebp), %esi - .loc 1 331 0 -.LBB6: - testb $7, %dl - movl %edx, -16(%ebp) - je .L18 - .loc 1 329 0 - testl %edx, %edx - movl %edx, %eax - js .L26 -.L17: - andl $-8, %eax - addl $8, %eax - movl %eax, -16(%ebp) -.L18: - .loc 1 333 0 - movl -16(%ebp), %eax - sarl $3, %eax - testl %eax, %eax - jle .L25 - movl %eax, %ebx - .p2align 4,,15 -.L23: - .loc 1 334 0 - movl %edi, 12(%esp) - movl 16(%ebp), %eax - .loc 1 333 0 - addl $8, %edi - .loc 1 334 0 - movl %eax, 8(%esp) - movl (%esi), %eax - movl %eax, 4(%esp) - movl 4(%esi), %eax - .loc 1 333 0 - addl $8, %esi - .loc 1 334 0 - movl %eax, (%esp) - call tea_decode - .loc 1 333 0 - decl %ebx - jne .L23 -.L25: - .loc 1 337 0 -.LBE6: - movl -16(%ebp), %eax - addl $28, %esp - popl %ebx - popl %esi - popl %edi - popl %ebp - ret -.L26: -.LBB7: - leal 7(%edx), %eax - jmp .L17 -.LBE7: -.LFE25: - .size tea_decrypt, .-tea_decrypt - .section .debug_frame,"",@progbits -.Lframe0: - .long .LECIE0-.LSCIE0 -.LSCIE0: - .long 0xffffffff - .byte 0x1 - .string "" - .uleb128 0x1 - .sleb128 -4 - .byte 0x8 - .byte 0xc - .uleb128 0x4 - .uleb128 0x4 - .byte 0x88 - .uleb128 0x1 - .p2align 2 -.LECIE0: -.LSFDE0: - .long .LEFDE0-.LASFDE0 -.LASFDE0: - .long .Lframe0 - .long .LFB19 - .long .LFE19-.LFB19 - .byte 0x4 - .long .LCFI0-.LFB19 - .byte 0xe - .uleb128 0x8 - .byte 0x85 - .uleb128 0x2 - .byte 0x4 - .long .LCFI1-.LCFI0 - .byte 0xd - .uleb128 0x5 - .byte 0x4 - .long .LCFI5-.LCFI1 - .byte 0x83 - .uleb128 0x5 - .byte 0x86 - .uleb128 0x4 - .byte 0x87 - .uleb128 0x3 - .p2align 2 -.LEFDE0: -.LSFDE2: - .long .LEFDE2-.LASFDE2 -.LASFDE2: - .long .Lframe0 - .long .LFB21 - .long .LFE21-.LFB21 - .byte 0x4 - .long .LCFI6-.LFB21 - .byte 0xe - .uleb128 0x8 - .byte 0x85 - .uleb128 0x2 - .byte 0x4 - .long .LCFI7-.LCFI6 - .byte 0xd - .uleb128 0x5 - .byte 0x4 - .long .LCFI11-.LCFI7 - .byte 0x83 - .uleb128 0x5 - .byte 0x86 - .uleb128 0x4 - .byte 0x87 - .uleb128 0x3 - .p2align 2 -.LEFDE2: -.LSFDE4: - .long .LEFDE4-.LASFDE4 -.LASFDE4: - .long .Lframe0 - .long .LFB23 - .long .LFE23-.LFB23 - .byte 0x4 - .long .LCFI12-.LFB23 - .byte 0xe - .uleb128 0x8 - .byte 0x85 - .uleb128 0x2 - .byte 0x4 - .long .LCFI13-.LCFI12 - .byte 0xd - .uleb128 0x5 - .byte 0x4 - .long .LCFI17-.LCFI13 - .byte 0x83 - .uleb128 0x5 - .byte 0x86 - .uleb128 0x4 - .byte 0x87 - .uleb128 0x3 - .p2align 2 -.LEFDE4: -.LSFDE6: - .long .LEFDE6-.LASFDE6 -.LASFDE6: - .long .Lframe0 - .long .LFB25 - .long .LFE25-.LFB25 - .byte 0x4 - .long .LCFI18-.LFB25 - .byte 0xe - .uleb128 0x8 - .byte 0x85 - .uleb128 0x2 - .byte 0x4 - .long .LCFI19-.LCFI18 - .byte 0xd - .uleb128 0x5 - .byte 0x4 - .long .LCFI23-.LCFI19 - .byte 0x83 - .uleb128 0x5 - .byte 0x86 - .uleb128 0x4 - .byte 0x87 - .uleb128 0x3 - .p2align 2 -.LEFDE6: - .text -.Letext0: - .section .debug_info - .long 0x25ff - .value 0x2 - .long .Ldebug_abbrev0 - .byte 0x4 - .uleb128 0x1 - .long .Ldebug_line0 - .long .Letext0 - .long .Ltext0 - .long .LC587 - .long .LC588 - .long .LC589 - .byte 0x1 - .uleb128 0x2 - .long .LC0 - .byte 0x2 - .byte 0x2d - .long 0x30 - .uleb128 0x3 - .long .LC2 - .byte 0x1 - .byte 0x6 - .uleb128 0x2 - .long .LC1 - .byte 0x2 - .byte 0x2e - .long 0x42 - .uleb128 0x3 - .long .LC3 - .byte 0x1 - .byte 0x8 - .uleb128 0x2 - .long .LC4 - .byte 0x2 - .byte 0x2f - .long 0x54 - .uleb128 0x3 - .long .LC5 - .byte 0x2 - .byte 0x5 - .uleb128 0x2 - .long .LC6 - .byte 0x2 - .byte 0x30 - .long 0x66 - .uleb128 0x3 - .long .LC7 - .byte 0x2 - .byte 0x7 - .uleb128 0x2 - .long .LC8 - .byte 0x2 - .byte 0x31 - .long 0x78 - .uleb128 0x4 - .string "int" - .byte 0x4 - .byte 0x5 - .uleb128 0x2 - .long .LC9 - .byte 0x2 - .byte 0x32 - .long 0x8a - .uleb128 0x3 - .long .LC10 - .byte 0x4 - .byte 0x7 - .uleb128 0x2 - .long .LC11 - .byte 0x2 - .byte 0x3a - .long 0x9c - .uleb128 0x3 - .long .LC12 - .byte 0x8 - .byte 0x5 - .uleb128 0x2 - .long .LC13 - .byte 0x2 - .byte 0x3b - .long 0xae - .uleb128 0x3 - .long .LC14 - .byte 0x8 - .byte 0x7 - .uleb128 0x2 - .long .LC15 - .byte 0x2 - .byte 0x46 - .long 0xc0 - .uleb128 0x3 - .long .LC16 - .byte 0x4 - .byte 0x7 - .uleb128 0x2 - .long .LC17 - .byte 0x2 - .byte 0x47 - .long 0x6d - .uleb128 0x2 - .long .LC18 - .byte 0x2 - .byte 0x48 - .long 0xdd - .uleb128 0x3 - .long .LC19 - .byte 0x8 - .byte 0x4 - .uleb128 0x2 - .long .LC20 - .byte 0x2 - .byte 0x49 - .long 0xdd - .uleb128 0x2 - .long .LC21 - .byte 0x2 - .byte 0x4a - .long 0x6d - .uleb128 0x2 - .long .LC22 - .byte 0x2 - .byte 0x4b - .long 0x91 - .uleb128 0x2 - .long .LC23 - .byte 0x2 - .byte 0x4c - .long 0x6d - .uleb128 0x2 - .long .LC24 - .byte 0x2 - .byte 0x4d - .long 0x6d - .uleb128 0x2 - .long .LC25 - .byte 0x2 - .byte 0x4e - .long 0x6d - .uleb128 0x2 - .long .LC26 - .byte 0x2 - .byte 0x4f - .long 0x6d - .uleb128 0x2 - .long .LC27 - .byte 0x2 - .byte 0x50 - .long 0x91 - .uleb128 0x2 - .long .LC28 - .byte 0x2 - .byte 0x51 - .long 0x25 - .uleb128 0x2 - .long .LC29 - .byte 0x2 - .byte 0x52 - .long 0x49 - .uleb128 0x2 - .long .LC30 - .byte 0x2 - .byte 0x53 - .long 0x6d - .uleb128 0x2 - .long .LC31 - .byte 0x2 - .byte 0x54 - .long 0x91 - .uleb128 0x2 - .long .LC32 - .byte 0x2 - .byte 0x55 - .long 0x6d - .uleb128 0x2 - .long .LC33 - .byte 0x2 - .byte 0x56 - .long 0x6d - .uleb128 0x2 - .long .LC34 - .byte 0x2 - .byte 0x57 - .long 0x6d - .uleb128 0x2 - .long .LC35 - .byte 0x2 - .byte 0x58 - .long 0x7f - .uleb128 0x2 - .long .LC36 - .byte 0x2 - .byte 0x59 - .long 0x6d - .uleb128 0x2 - .long .LC37 - .byte 0x2 - .byte 0x5a - .long 0x6d - .uleb128 0x2 - .long .LC38 - .byte 0x2 - .byte 0x5b - .long 0x7f - .uleb128 0x2 - .long .LC39 - .byte 0x2 - .byte 0x5c - .long 0xa3 - .uleb128 0x2 - .long .LC40 - .byte 0x2 - .byte 0x5d - .long 0x7f - .uleb128 0x2 - .long .LC41 - .byte 0x2 - .byte 0x5e - .long 0x7f - .uleb128 0x2 - .long .LC42 - .byte 0x2 - .byte 0x5f - .long 0x7f - .uleb128 0x2 - .long .LC43 - .byte 0x2 - .byte 0x60 - .long 0x7f - .uleb128 0x2 - .long .LC44 - .byte 0x2 - .byte 0x61 - .long 0xa3 - .uleb128 0x2 - .long .LC45 - .byte 0x2 - .byte 0x62 - .long 0x37 - .uleb128 0x2 - .long .LC46 - .byte 0x2 - .byte 0x63 - .long 0x5b - .uleb128 0x2 - .long .LC47 - .byte 0x2 - .byte 0x64 - .long 0x7f - .uleb128 0x2 - .long .LC48 - .byte 0x2 - .byte 0x65 - .long 0xa3 - .uleb128 0x2 - .long .LC49 - .byte 0x2 - .byte 0x66 - .long 0x7f - .uleb128 0x2 - .long .LC50 - .byte 0x2 - .byte 0x67 - .long 0x7f - .uleb128 0x2 - .long .LC51 - .byte 0x2 - .byte 0x68 - .long 0x91 - .uleb128 0x2 - .long .LC52 - .byte 0x2 - .byte 0x6c - .long 0x7f - .uleb128 0x2 - .long .LC53 - .byte 0x2 - .byte 0x6e - .long 0xa3 - .uleb128 0x2 - .long .LC54 - .byte 0x2 - .byte 0x6f - .long 0x7f - .uleb128 0x2 - .long .LC55 - .byte 0x2 - .byte 0x75 - .long 0x270 - .uleb128 0x5 - .byte 0x4 - .long 0x276 - .uleb128 0x3 - .long .LC56 - .byte 0x1 - .byte 0x6 - .uleb128 0x2 - .long .LC57 - .byte 0x2 - .byte 0x7b - .long 0x265 - .uleb128 0x2 - .long .LC58 - .byte 0x3 - .byte 0x26 - .long 0x6d - .uleb128 0x2 - .long .LC59 - .byte 0x3 - .byte 0x27 - .long 0x7f - .uleb128 0x2 - .long .LC60 - .byte 0x3 - .byte 0x28 - .long 0xa3 - .uleb128 0x2 - .long .LC61 - .byte 0x3 - .byte 0x29 - .long 0xa3 - .uleb128 0x2 - .long .LC62 - .byte 0x3 - .byte 0x2a - .long 0x7f - .uleb128 0x2 - .long .LC63 - .byte 0x3 - .byte 0x2b - .long 0x91 - .uleb128 0x2 - .long .LC64 - .byte 0x3 - .byte 0x2c - .long 0x7f - .uleb128 0x2 - .long .LC65 - .byte 0x3 - .byte 0x2d - .long 0x2e0 - .uleb128 0x3 - .long .LC66 - .byte 0x4 - .byte 0x5 - .uleb128 0x2 - .long .LC67 - .byte 0x3 - .byte 0x2e - .long 0x5b - .uleb128 0x2 - .long .LC68 - .byte 0x3 - .byte 0x2f - .long 0x78 - .uleb128 0x2 - .long .LC69 - .byte 0x3 - .byte 0x30 - .long 0x5b - .uleb128 0x2 - .long .LC70 - .byte 0x3 - .byte 0x31 - .long 0x91 - .uleb128 0x2 - .long .LC71 - .byte 0x3 - .byte 0x32 - .long 0x6d - .uleb128 0x2 - .long .LC72 - .byte 0x3 - .byte 0x33 - .long 0x91 - .uleb128 0x2 - .long .LC73 - .byte 0x3 - .byte 0x34 - .long 0x37 - .uleb128 0x2 - .long .LC74 - .byte 0x3 - .byte 0x35 - .long 0x7f - .uleb128 0x2 - .long .LC75 - .byte 0x3 - .byte 0x36 - .long 0x2e0 - .uleb128 0x2 - .long .LC76 - .byte 0x3 - .byte 0x37 - .long 0x6d - .uleb128 0x2 - .long .LC77 - .byte 0x3 - .byte 0x38 - .long 0x7f - .uleb128 0x2 - .long .LC78 - .byte 0x3 - .byte 0x39 - .long 0x7f - .uleb128 0x2 - .long .LC79 - .byte 0x3 - .byte 0x3a - .long 0x8a - .uleb128 0x2 - .long .LC80 - .byte 0x3 - .byte 0x4e - .long 0x78 - .uleb128 0x2 - .long .LC81 - .byte 0x3 - .byte 0x4f - .long 0x376 - .uleb128 0x2 - .long .LC82 - .byte 0x3 - .byte 0x50 - .long 0x376 - .uleb128 0x2 - .long .LC83 - .byte 0x3 - .byte 0x51 - .long 0x376 - .uleb128 0x2 - .long .LC84 - .byte 0x3 - .byte 0x5a - .long 0x355 - .uleb128 0x6 - .long 0x3cc - .byte 0x80 - .byte 0x3 - .byte 0x64 - .uleb128 0x7 - .long .LC85 - .byte 0x3 - .byte 0x62 - .long 0x3cc - .uleb128 0x7 - .long .LC86 - .byte 0x3 - .byte 0x63 - .long 0x91 - .byte 0x0 - .uleb128 0x8 - .long 0x3dc - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0x7f - .byte 0x0 - .uleb128 0x3 - .long .LC10 - .byte 0x4 - .byte 0x7 - .uleb128 0x2 - .long .LC87 - .byte 0x3 - .byte 0x64 - .long 0x3ad - .uleb128 0x2 - .long .LC88 - .byte 0x4 - .byte 0x2f - .long 0x308 - .uleb128 0x2 - .long .LC89 - .byte 0x4 - .byte 0x32 - .long 0x189 - .uleb128 0x2 - .long .LC90 - .byte 0x4 - .byte 0x38 - .long 0x265 - .uleb128 0xa - .long 0x438 - .long .LC93 - .byte 0x8 - .byte 0x4 - .byte 0x46 - .uleb128 0xb - .long .LC91 - .byte 0x4 - .byte 0x47 - .long 0x438 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC92 - .byte 0x4 - .byte 0x48 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x42 - .uleb128 0xa - .long 0x560 - .long .LC94 - .byte 0x58 - .byte 0x4 - .byte 0x68 - .uleb128 0xc - .string "_p" - .byte 0x4 - .byte 0x69 - .long 0x438 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xc - .string "_r" - .byte 0x4 - .byte 0x6a - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xc - .string "_w" - .byte 0x4 - .byte 0x6b - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC95 - .byte 0x4 - .byte 0x6c - .long 0x54 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC96 - .byte 0x4 - .byte 0x6d - .long 0x54 - .byte 0x2 - .byte 0x23 - .uleb128 0xe - .uleb128 0xc - .string "_bf" - .byte 0x4 - .byte 0x6e - .long 0x40f - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC97 - .byte 0x4 - .byte 0x6f - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC98 - .byte 0x4 - .byte 0x72 - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC99 - .byte 0x4 - .byte 0x73 - .long 0x572 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC100 - .byte 0x4 - .byte 0x74 - .long 0x598 - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .uleb128 0xb - .long .LC101 - .byte 0x4 - .byte 0x75 - .long 0x5b8 - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .uleb128 0xb - .long .LC102 - .byte 0x4 - .byte 0x76 - .long 0x5e3 - .byte 0x2 - .byte 0x23 - .uleb128 0x2c - .uleb128 0xc - .string "_ub" - .byte 0x4 - .byte 0x79 - .long 0x40f - .byte 0x2 - .byte 0x23 - .uleb128 0x30 - .uleb128 0xb - .long .LC103 - .byte 0x4 - .byte 0x7a - .long 0x5ef - .byte 0x2 - .byte 0x23 - .uleb128 0x38 - .uleb128 0xc - .string "_ur" - .byte 0x4 - .byte 0x7b - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x3c - .uleb128 0xb - .long .LC104 - .byte 0x4 - .byte 0x7e - .long 0x5f5 - .byte 0x2 - .byte 0x23 - .uleb128 0x40 - .uleb128 0xb - .long .LC105 - .byte 0x4 - .byte 0x7f - .long 0x605 - .byte 0x2 - .byte 0x23 - .uleb128 0x43 - .uleb128 0xc - .string "_lb" - .byte 0x4 - .byte 0x82 - .long 0x40f - .byte 0x2 - .byte 0x23 - .uleb128 0x44 - .uleb128 0xb - .long .LC106 - .byte 0x4 - .byte 0x85 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4c - .uleb128 0xb - .long .LC107 - .byte 0x4 - .byte 0x86 - .long 0x3ee - .byte 0x2 - .byte 0x23 - .uleb128 0x50 - .byte 0x0 - .uleb128 0xd - .byte 0x4 - .uleb128 0xe - .long 0x572 - .byte 0x1 - .long 0x78 - .uleb128 0xf - .long 0x560 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x562 - .uleb128 0xe - .long 0x592 - .byte 0x1 - .long 0x78 - .uleb128 0xf - .long 0x560 - .uleb128 0xf - .long 0x592 - .uleb128 0xf - .long 0x78 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x276 - .uleb128 0x5 - .byte 0x4 - .long 0x578 - .uleb128 0xe - .long 0x5b8 - .byte 0x1 - .long 0x3ee - .uleb128 0xf - .long 0x560 - .uleb128 0xf - .long 0x3ee - .uleb128 0xf - .long 0x78 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x59e - .uleb128 0xe - .long 0x5d8 - .byte 0x1 - .long 0x78 - .uleb128 0xf - .long 0x560 - .uleb128 0xf - .long 0x5d8 - .uleb128 0xf - .long 0x78 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x5de - .uleb128 0x10 - .long 0x276 - .uleb128 0x5 - .byte 0x4 - .long 0x5be - .uleb128 0x11 - .long .LC231 - .byte 0x1 - .uleb128 0x5 - .byte 0x4 - .long 0x5e9 - .uleb128 0x8 - .long 0x605 - .long 0x42 - .uleb128 0x9 - .long 0x3dc - .byte 0x2 - .byte 0x0 - .uleb128 0x8 - .long 0x615 - .long 0x42 - .uleb128 0x9 - .long 0x3dc - .byte 0x0 - .byte 0x0 - .uleb128 0x2 - .long .LC108 - .byte 0x4 - .byte 0x87 - .long 0x43e - .uleb128 0x2 - .long .LC109 - .byte 0x5 - .byte 0x2e - .long 0x381 - .uleb128 0x2 - .long .LC110 - .byte 0x5 - .byte 0x3a - .long 0x38c - .uleb128 0x12 - .long 0x65b - .byte 0x8 - .byte 0x5 - .byte 0x42 - .uleb128 0xb - .long .LC111 - .byte 0x5 - .byte 0x40 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xc - .string "rem" - .byte 0x5 - .byte 0x41 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x2 - .long .LC112 - .byte 0x5 - .byte 0x42 - .long 0x636 - .uleb128 0x12 - .long 0x68b - .byte 0x8 - .byte 0x5 - .byte 0x47 - .uleb128 0xb - .long .LC111 - .byte 0x5 - .byte 0x45 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xc - .string "rem" - .byte 0x5 - .byte 0x46 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x2 - .long .LC113 - .byte 0x5 - .byte 0x47 - .long 0x666 - .uleb128 0x12 - .long 0x6bb - .byte 0x10 - .byte 0x5 - .byte 0x85 - .uleb128 0xb - .long .LC111 - .byte 0x5 - .byte 0x83 - .long 0x9c - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xc - .string "rem" - .byte 0x5 - .byte 0x84 - .long 0x9c - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x2 - .long .LC114 - .byte 0x5 - .byte 0x85 - .long 0x696 - .uleb128 0x2 - .long .LC115 - .byte 0x6 - .byte 0x34 - .long 0x42 - .uleb128 0x2 - .long .LC116 - .byte 0x6 - .byte 0x35 - .long 0x66 - .uleb128 0x2 - .long .LC117 - .byte 0x6 - .byte 0x36 - .long 0x8a - .uleb128 0x2 - .long .LC118 - .byte 0x6 - .byte 0x37 - .long 0xc0 - .uleb128 0x2 - .long .LC119 - .byte 0x6 - .byte 0x38 - .long 0x66 - .uleb128 0x2 - .long .LC120 - .byte 0x6 - .byte 0x39 - .long 0x8a - .uleb128 0x2 - .long .LC121 - .byte 0x6 - .byte 0x40 - .long 0x25 - .uleb128 0x2 - .long .LC122 - .byte 0x6 - .byte 0x45 - .long 0x49 - .uleb128 0x2 - .long .LC123 - .byte 0x6 - .byte 0x4a - .long 0x6d - .uleb128 0x2 - .long .LC124 - .byte 0x6 - .byte 0x4f - .long 0x91 - .uleb128 0x2 - .long .LC125 - .byte 0x6 - .byte 0x54 - .long 0x37 - .uleb128 0x2 - .long .LC126 - .byte 0x6 - .byte 0x59 - .long 0x5b - .uleb128 0x2 - .long .LC127 - .byte 0x6 - .byte 0x5e - .long 0x7f - .uleb128 0x2 - .long .LC128 - .byte 0x6 - .byte 0x63 - .long 0xa3 - .uleb128 0x2 - .long .LC129 - .byte 0x6 - .byte 0x68 - .long 0x105 - .uleb128 0x2 - .long .LC130 - .byte 0x6 - .byte 0x69 - .long 0x1c0 - .uleb128 0x2 - .long .LC131 - .byte 0x6 - .byte 0x6d - .long 0x37 - .uleb128 0x2 - .long .LC132 - .byte 0x6 - .byte 0x6e - .long 0x5b - .uleb128 0x2 - .long .LC133 - .byte 0x6 - .byte 0x6f - .long 0x7f - .uleb128 0x2 - .long .LC134 - .byte 0x6 - .byte 0x70 - .long 0xa3 - .uleb128 0x2 - .long .LC135 - .byte 0x6 - .byte 0x72 - .long 0xa3 - .uleb128 0x2 - .long .LC136 - .byte 0x6 - .byte 0x73 - .long 0x91 - .uleb128 0x2 - .long .LC137 - .byte 0x6 - .byte 0x74 - .long 0x7c3 - .uleb128 0x5 - .byte 0x4 - .long 0x7ad - .uleb128 0x2 - .long .LC138 - .byte 0x6 - .byte 0x76 - .long 0x592 - .uleb128 0x2 - .long .LC139 - .byte 0x6 - .byte 0x77 - .long 0x5d8 - .uleb128 0x2 - .long .LC140 - .byte 0x6 - .byte 0x78 - .long 0x7ea - .uleb128 0x5 - .byte 0x4 - .long 0x7f0 - .uleb128 0x13 - .long 0x276 - .uleb128 0x2 - .long .LC141 - .byte 0x6 - .byte 0x7b - .long 0xb5 - .uleb128 0x2 - .long .LC142 - .byte 0x6 - .byte 0x80 - .long 0x288 - .uleb128 0x2 - .long .LC143 - .byte 0x6 - .byte 0x84 - .long 0xc7 - .uleb128 0x2 - .long .LC144 - .byte 0x6 - .byte 0x85 - .long 0x91 - .uleb128 0x2 - .long .LC145 - .byte 0x6 - .byte 0x88 - .long 0x3a2 - .uleb128 0x2 - .long .LC146 - .byte 0x6 - .byte 0x8d - .long 0x293 - .uleb128 0x2 - .long .LC147 - .byte 0x6 - .byte 0x91 - .long 0x7f - .uleb128 0x2 - .long .LC148 - .byte 0x6 - .byte 0x94 - .long 0x29e - .uleb128 0x2 - .long .LC149 - .byte 0x6 - .byte 0x95 - .long 0x2a9 - .uleb128 0x2 - .long .LC150 - .byte 0x6 - .byte 0x9a - .long 0x2b4 - .uleb128 0x2 - .long .LC151 - .byte 0x6 - .byte 0x9f - .long 0x7f - .uleb128 0x2 - .long .LC152 - .byte 0x6 - .byte 0xa4 - .long 0x5b - .uleb128 0x2 - .long .LC153 - .byte 0x6 - .byte 0xa9 - .long 0x2bf - .uleb128 0x2 - .long .LC154 - .byte 0x6 - .byte 0xae - .long 0x2ca - .uleb128 0x2 - .long .LC155 - .byte 0x6 - .byte 0xb3 - .long 0x2d5 - .uleb128 0x2 - .long .LC156 - .byte 0x6 - .byte 0xb8 - .long 0x2e7 - .uleb128 0x2 - .long .LC157 - .byte 0x6 - .byte 0xbd - .long 0x2fd - .uleb128 0x2 - .long .LC158 - .byte 0x6 - .byte 0xc2 - .long 0x308 - .uleb128 0x2 - .long .LC159 - .byte 0x6 - .byte 0xc7 - .long 0x313 - .uleb128 0x2 - .long .LC160 - .byte 0x6 - .byte 0xcb - .long 0x173 - .uleb128 0x2 - .long .LC161 - .byte 0x6 - .byte 0xce - .long 0x31e - .uleb128 0x2 - .long .LC162 - .byte 0x6 - .byte 0xd2 - .long 0x17e - .uleb128 0x2 - .long .LC163 - .byte 0x6 - .byte 0xda - .long 0x194 - .uleb128 0x2 - .long .LC164 - .byte 0x6 - .byte 0xdf - .long 0x33f - .uleb128 0x2 - .long .LC165 - .byte 0x6 - .byte 0xe4 - .long 0x19f - .uleb128 0x2 - .long .LC166 - .byte 0x6 - .byte 0xe9 - .long 0x34a - .uleb128 0x2 - .long .LC167 - .byte 0x6 - .byte 0xed - .long 0x223 - .uleb128 0x2 - .long .LC168 - .byte 0x6 - .byte 0xee - .long 0x355 - .uleb128 0x2 - .long .LC169 - .byte 0x6 - .byte 0xf1 - .long 0x360 - .uleb128 0x2 - .long .LC170 - .byte 0x6 - .byte 0xf6 - .long 0x36b - .uleb128 0x2 - .long .LC171 - .byte 0x6 - .byte 0xfa - .long 0x22e - .uleb128 0x2 - .long .LC172 - .byte 0x6 - .byte 0xfb - .long 0x239 - .uleb128 0x2 - .long .LC173 - .byte 0x6 - .byte 0xfc - .long 0x244 - .uleb128 0x2 - .long .LC174 - .byte 0x6 - .byte 0xfd - .long 0x24f - .uleb128 0x2 - .long .LC175 - .byte 0x6 - .byte 0xfe - .long 0x25a - .uleb128 0xa - .long 0x991 - .long .LC176 - .byte 0x10 - .byte 0x7 - .byte 0x37 - .uleb128 0xb - .long .LC177 - .byte 0x7 - .byte 0x38 - .long 0x991 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .byte 0x0 - .uleb128 0x8 - .long 0x9a1 - .long 0x7f - .uleb128 0x9 - .long 0x3dc - .byte 0x3 - .byte 0x0 - .uleb128 0x2 - .long .LC178 - .byte 0x7 - .byte 0x39 - .long 0x976 - .uleb128 0xa - .long 0x9d5 - .long .LC179 - .byte 0x8 - .byte 0x8 - .byte 0x2f - .uleb128 0xb - .long .LC180 - .byte 0x8 - .byte 0x30 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC181 - .byte 0x8 - .byte 0x31 - .long 0x8f2 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0xa - .long 0x9fe - .long .LC182 - .byte 0x8 - .byte 0x9 - .byte 0x32 - .uleb128 0xb - .long .LC180 - .byte 0x9 - .byte 0x33 - .long 0x8fd - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC183 - .byte 0x9 - .byte 0x34 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x2 - .long .LC184 - .byte 0xa - .byte 0x2e - .long 0xc0 - .uleb128 0x2 - .long .LC185 - .byte 0xa - .byte 0x30 - .long 0x9fe - .uleb128 0x2 - .long .LC186 - .byte 0xa - .byte 0x35 - .long 0x9a1 - .uleb128 0xa - .long 0xa3a - .long .LC187 - .byte 0x80 - .byte 0xa - .byte 0x4b - .uleb128 0xb - .long .LC188 - .byte 0xa - .byte 0x4c - .long 0xa3a - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .byte 0x0 - .uleb128 0x8 - .long 0xa4a - .long 0x9fe - .uleb128 0x9 - .long 0x3dc - .byte 0x1f - .byte 0x0 - .uleb128 0x2 - .long .LC187 - .byte 0xa - .byte 0x4d - .long 0xa1f - .uleb128 0xa - .long 0xaa8 - .long .LC189 - .byte 0x18 - .byte 0xb - .byte 0xc9 - .uleb128 0xb - .long .LC190 - .byte 0xb - .byte 0xca - .long 0x8b0 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC191 - .byte 0xb - .byte 0xcb - .long 0x8b0 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC192 - .byte 0xb - .byte 0xcc - .long 0x8bb - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC193 - .byte 0xb - .byte 0xcd - .long 0x54 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC194 - .byte 0xb - .byte 0xce - .long 0x54 - .byte 0x2 - .byte 0x23 - .uleb128 0x16 - .byte 0x0 - .uleb128 0x12 - .long 0xae9 - .byte 0x10 - .byte 0xc - .byte 0x39 - .uleb128 0xc - .string "min" - .byte 0xc - .byte 0x35 - .long 0x381 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xc - .string "max" - .byte 0xc - .byte 0x36 - .long 0x381 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xc - .string "map" - .byte 0xc - .byte 0x37 - .long 0x381 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC195 - .byte 0xc - .byte 0x38 - .long 0xae9 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0xc0 - .uleb128 0x2 - .long .LC196 - .byte 0xc - .byte 0x39 - .long 0xaa8 - .uleb128 0x12 - .long 0xb1f - .byte 0x8 - .byte 0xc - .byte 0x3e - .uleb128 0xb - .long .LC197 - .byte 0xc - .byte 0x3c - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC198 - .byte 0xc - .byte 0x3d - .long 0xb1f - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0xaef - .uleb128 0x2 - .long .LC199 - .byte 0xc - .byte 0x3e - .long 0xafa - .uleb128 0x14 - .long 0xbf7 - .value 0xc54 - .byte 0xc - .byte 0x57 - .uleb128 0xb - .long .LC200 - .byte 0xc - .byte 0x41 - .long 0xbf7 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC201 - .byte 0xc - .byte 0x42 - .long 0xc07 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC202 - .byte 0xc - .byte 0x44 - .long 0xc37 - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .uleb128 0xb - .long .LC203 - .byte 0xc - .byte 0x45 - .long 0xc62 - .byte 0x2 - .byte 0x23 - .uleb128 0x2c - .uleb128 0xb - .long .LC204 - .byte 0xc - .byte 0x46 - .long 0x381 - .byte 0x2 - .byte 0x23 - .uleb128 0x30 - .uleb128 0xb - .long .LC205 - .byte 0xc - .byte 0x48 - .long 0xc68 - .byte 0x2 - .byte 0x23 - .uleb128 0x34 - .uleb128 0xb - .long .LC206 - .byte 0xc - .byte 0x49 - .long 0xc78 - .byte 0x3 - .byte 0x23 - .uleb128 0x434 - .uleb128 0xb - .long .LC207 - .byte 0xc - .byte 0x4a - .long 0xc78 - .byte 0x3 - .byte 0x23 - .uleb128 0x834 - .uleb128 0xb - .long .LC208 - .byte 0xc - .byte 0x51 - .long 0xb25 - .byte 0x3 - .byte 0x23 - .uleb128 0xc34 - .uleb128 0xb - .long .LC209 - .byte 0xc - .byte 0x52 - .long 0xb25 - .byte 0x3 - .byte 0x23 - .uleb128 0xc3c - .uleb128 0xb - .long .LC210 - .byte 0xc - .byte 0x53 - .long 0xb25 - .byte 0x3 - .byte 0x23 - .uleb128 0xc44 - .uleb128 0xb - .long .LC211 - .byte 0xc - .byte 0x55 - .long 0x560 - .byte 0x3 - .byte 0x23 - .uleb128 0xc4c - .uleb128 0xb - .long .LC212 - .byte 0xc - .byte 0x56 - .long 0x78 - .byte 0x3 - .byte 0x23 - .uleb128 0xc50 - .byte 0x0 - .uleb128 0x8 - .long 0xc07 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0x7 - .byte 0x0 - .uleb128 0x8 - .long 0xc17 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0x1f - .byte 0x0 - .uleb128 0xe - .long 0xc31 - .byte 0x1 - .long 0x381 - .uleb128 0xf - .long 0x5d8 - .uleb128 0xf - .long 0x189 - .uleb128 0xf - .long 0xc31 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x5d8 - .uleb128 0x5 - .byte 0x4 - .long 0xc17 - .uleb128 0xe - .long 0xc5c - .byte 0x1 - .long 0x78 - .uleb128 0xf - .long 0x381 - .uleb128 0xf - .long 0x592 - .uleb128 0xf - .long 0x189 - .uleb128 0xf - .long 0xc5c - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x592 - .uleb128 0x5 - .byte 0x4 - .long 0xc3d - .uleb128 0x8 - .long 0xc78 - .long 0xc0 - .uleb128 0x9 - .long 0x3dc - .byte 0xff - .byte 0x0 - .uleb128 0x8 - .long 0xc88 - .long 0x381 - .uleb128 0x9 - .long 0x3dc - .byte 0xff - .byte 0x0 - .uleb128 0x2 - .long .LC213 - .byte 0xc - .byte 0x57 - .long 0xb30 - .uleb128 0x15 - .long 0xce7 - .long .LC214 - .value 0x108 - .byte 0xd - .byte 0x36 - .uleb128 0xb - .long .LC215 - .byte 0xd - .byte 0x37 - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC216 - .byte 0xd - .byte 0x38 - .long 0x5b - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC217 - .byte 0xd - .byte 0x39 - .long 0x37 - .byte 0x2 - .byte 0x23 - .uleb128 0x6 - .uleb128 0xb - .long .LC218 - .byte 0xd - .byte 0x3a - .long 0x37 - .byte 0x2 - .byte 0x23 - .uleb128 0x7 - .uleb128 0xb - .long .LC219 - .byte 0xd - .byte 0x3d - .long 0xce7 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x8 - .long 0xcf7 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0xff - .byte 0x0 - .uleb128 0xa - .long 0xd90 - .long .LC220 - .byte 0x28 - .byte 0xe - .byte 0x41 - .uleb128 0xb - .long .LC221 - .byte 0xe - .byte 0x42 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC222 - .byte 0xe - .byte 0x43 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC223 - .byte 0xe - .byte 0x44 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC224 - .byte 0xe - .byte 0x45 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC225 - .byte 0xe - .byte 0x46 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC226 - .byte 0xe - .byte 0x47 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC227 - .byte 0xe - .byte 0x48 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC228 - .byte 0xe - .byte 0x49 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC229 - .byte 0xe - .byte 0x4a - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC230 - .byte 0xe - .byte 0x4b - .long 0xd96 - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .byte 0x0 - .uleb128 0x11 - .long .LC232 - .byte 0x1 - .uleb128 0x5 - .byte 0x4 - .long 0xd90 - .uleb128 0x16 - .string "DIR" - .byte 0xe - .byte 0x4c - .long 0xcf7 - .uleb128 0xa - .long 0xdd0 - .long .LC233 - .byte 0x8 - .byte 0xf - .byte 0x2c - .uleb128 0xb - .long .LC234 - .byte 0xf - .byte 0x2d - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC235 - .byte 0xf - .byte 0x2e - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0xa - .long 0xdf9 - .long .LC236 - .byte 0xc - .byte 0xf - .byte 0x39 - .uleb128 0xc - .string "sec" - .byte 0xf - .byte 0x3a - .long 0x8fd - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC237 - .byte 0xf - .byte 0x3b - .long 0x755 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0xa - .long 0xe22 - .long .LC238 - .byte 0x10 - .byte 0xf - .byte 0xdf - .uleb128 0xb - .long .LC239 - .byte 0xf - .byte 0xe0 - .long 0x9ac - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC240 - .byte 0xf - .byte 0xe1 - .long 0x9ac - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0xa - .long 0xe74 - .long .LC241 - .byte 0x14 - .byte 0xf - .byte 0xe7 - .uleb128 0xc - .string "hz" - .byte 0xf - .byte 0xe8 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC242 - .byte 0xf - .byte 0xe9 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC243 - .byte 0xf - .byte 0xea - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC244 - .byte 0xf - .byte 0xeb - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC245 - .byte 0xf - .byte 0xec - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0x17 - .long 0xf1a - .string "tm" - .byte 0x2c - .byte 0x10 - .byte 0x5f - .uleb128 0xb - .long .LC246 - .byte 0x10 - .byte 0x60 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC247 - .byte 0x10 - .byte 0x61 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC248 - .byte 0x10 - .byte 0x62 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC249 - .byte 0x10 - .byte 0x63 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC250 - .byte 0x10 - .byte 0x64 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC251 - .byte 0x10 - .byte 0x65 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC252 - .byte 0x10 - .byte 0x66 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC253 - .byte 0x10 - .byte 0x67 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC254 - .byte 0x10 - .byte 0x68 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC255 - .byte 0x10 - .byte 0x69 - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .uleb128 0xb - .long .LC256 - .byte 0x10 - .byte 0x6a - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .byte 0x0 - .uleb128 0xa - .long 0xff9 - .long .LC257 - .byte 0x40 - .byte 0x11 - .byte 0x6c - .uleb128 0xb - .long .LC258 - .byte 0x11 - .byte 0x6d - .long 0x5b - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC259 - .byte 0x11 - .byte 0x6e - .long 0x884 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC260 - .byte 0x11 - .byte 0x6f - .long 0x89a - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC261 - .byte 0x11 - .byte 0x70 - .long 0x8a5 - .byte 0x2 - .byte 0x23 - .uleb128 0xa - .uleb128 0xb - .long .LC262 - .byte 0x11 - .byte 0x71 - .long 0x5b - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC263 - .byte 0x11 - .byte 0x72 - .long 0x5b - .byte 0x2 - .byte 0x23 - .uleb128 0xe - .uleb128 0xb - .long .LC264 - .byte 0x11 - .byte 0x73 - .long 0x5b - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC265 - .byte 0x11 - .byte 0x74 - .long 0x6d - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC266 - .byte 0x11 - .byte 0x75 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC267 - .byte 0x11 - .byte 0x76 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC268 - .byte 0x11 - .byte 0x77 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .uleb128 0xb - .long .LC269 - .byte 0x11 - .byte 0x78 - .long 0x6d - .byte 0x2 - .byte 0x23 - .uleb128 0x30 - .uleb128 0xb - .long .LC270 - .byte 0x11 - .byte 0x79 - .long 0x6d - .byte 0x2 - .byte 0x23 - .uleb128 0x34 - .uleb128 0xb - .long .LC271 - .byte 0x11 - .byte 0x7a - .long 0x82c - .byte 0x2 - .byte 0x23 - .uleb128 0x38 - .uleb128 0xb - .long .LC272 - .byte 0x11 - .byte 0x7b - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x3c - .byte 0x0 - .uleb128 0xa - .long 0x10f4 - .long .LC273 - .byte 0x60 - .byte 0x11 - .byte 0x7f - .uleb128 0xb - .long .LC258 - .byte 0x11 - .byte 0x80 - .long 0x355 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC259 - .byte 0x11 - .byte 0x81 - .long 0x884 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC260 - .byte 0x11 - .byte 0x82 - .long 0x89a - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC261 - .byte 0x11 - .byte 0x83 - .long 0x8a5 - .byte 0x2 - .byte 0x23 - .uleb128 0xa - .uleb128 0xb - .long .LC262 - .byte 0x11 - .byte 0x84 - .long 0x929 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC263 - .byte 0x11 - .byte 0x85 - .long 0x858 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC264 - .byte 0x11 - .byte 0x86 - .long 0x355 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC266 - .byte 0x11 - .byte 0x88 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC267 - .byte 0x11 - .byte 0x89 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC268 - .byte 0x11 - .byte 0x8a - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .uleb128 0xb - .long .LC265 - .byte 0x11 - .byte 0x93 - .long 0x8b0 - .byte 0x2 - .byte 0x23 - .uleb128 0x30 - .uleb128 0xb - .long .LC270 - .byte 0x11 - .byte 0x94 - .long 0x91 - .byte 0x2 - .byte 0x23 - .uleb128 0x38 - .uleb128 0xb - .long .LC269 - .byte 0x11 - .byte 0x95 - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x40 - .uleb128 0xb - .long .LC271 - .byte 0x11 - .byte 0x96 - .long 0x82c - .byte 0x2 - .byte 0x23 - .uleb128 0x44 - .uleb128 0xb - .long .LC272 - .byte 0x11 - .byte 0x97 - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x48 - .uleb128 0xb - .long .LC274 - .byte 0x11 - .byte 0x98 - .long 0x6d - .byte 0x2 - .byte 0x23 - .uleb128 0x4c - .uleb128 0xb - .long .LC275 - .byte 0x11 - .byte 0x9a - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x50 - .byte 0x0 - .uleb128 0xa - .long 0x11e1 - .long .LC276 - .byte 0x60 - .byte 0x11 - .byte 0xae - .uleb128 0xb - .long .LC258 - .byte 0x11 - .byte 0xaf - .long 0x355 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC259 - .byte 0x11 - .byte 0xb0 - .long 0x884 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC260 - .byte 0x11 - .byte 0xb1 - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC261 - .byte 0x11 - .byte 0xb2 - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC262 - .byte 0x11 - .byte 0xb3 - .long 0x929 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC263 - .byte 0x11 - .byte 0xb4 - .long 0x858 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC264 - .byte 0x11 - .byte 0xb5 - .long 0x355 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC266 - .byte 0x11 - .byte 0xb6 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC267 - .byte 0x11 - .byte 0xb7 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .uleb128 0xb - .long .LC268 - .byte 0x11 - .byte 0xb8 - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x2c - .uleb128 0xb - .long .LC265 - .byte 0x11 - .byte 0xb9 - .long 0x8b0 - .byte 0x2 - .byte 0x23 - .uleb128 0x34 - .uleb128 0xb - .long .LC270 - .byte 0x11 - .byte 0xba - .long 0x91 - .byte 0x2 - .byte 0x23 - .uleb128 0x3c - .uleb128 0xb - .long .LC269 - .byte 0x11 - .byte 0xbb - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x44 - .uleb128 0xb - .long .LC271 - .byte 0x11 - .byte 0xbc - .long 0x82c - .byte 0x2 - .byte 0x23 - .uleb128 0x48 - .uleb128 0xb - .long .LC272 - .byte 0x11 - .byte 0xbd - .long 0x7f - .byte 0x2 - .byte 0x23 - .uleb128 0x4c - .uleb128 0xb - .long .LC275 - .byte 0x11 - .byte 0xbe - .long 0x9d5 - .byte 0x2 - .byte 0x23 - .uleb128 0x50 - .byte 0x0 - .uleb128 0xa - .long 0x120a - .long .LC277 - .byte 0x8 - .byte 0x12 - .byte 0x2f - .uleb128 0xb - .long .LC278 - .byte 0x12 - .byte 0x30 - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC279 - .byte 0x12 - .byte 0x31 - .long 0x3f9 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x2 - .long .LC280 - .byte 0x13 - .byte 0x48 - .long 0x329 - .uleb128 0x2 - .long .LC281 - .byte 0x13 - .byte 0x4d - .long 0x334 - .uleb128 0xa - .long 0x1249 - .long .LC282 - .byte 0x8 - .byte 0x13 - .byte 0x90 - .uleb128 0xb - .long .LC283 - .byte 0x13 - .byte 0x91 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC284 - .byte 0x13 - .byte 0x92 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x15 - .long 0x1273 - .long .LC285 - .value 0x100 - .byte 0x13 - .byte 0x96 - .uleb128 0xb - .long .LC286 - .byte 0x13 - .byte 0x97 - .long 0x1273 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC287 - .byte 0x13 - .byte 0x98 - .long 0x1283 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0x8 - .long 0x1283 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0xf - .byte 0x0 - .uleb128 0x8 - .long 0x1293 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0xef - .byte 0x0 - .uleb128 0xa - .long 0x12ca - .long .LC288 - .byte 0x10 - .byte 0x13 - .byte 0xd8 - .uleb128 0xb - .long .LC289 - .byte 0x13 - .byte 0xd9 - .long 0x42 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC290 - .byte 0x13 - .byte 0xda - .long 0x120a - .byte 0x2 - .byte 0x23 - .uleb128 0x1 - .uleb128 0xb - .long .LC291 - .byte 0x13 - .byte 0xdb - .long 0x12ca - .byte 0x2 - .byte 0x23 - .uleb128 0x2 - .byte 0x0 - .uleb128 0x8 - .long 0x12da - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0xd - .byte 0x0 - .uleb128 0xa - .long 0x1303 - .long .LC292 - .byte 0x4 - .byte 0x13 - .byte 0xe4 - .uleb128 0xb - .long .LC293 - .byte 0x13 - .byte 0xe5 - .long 0x66 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC294 - .byte 0x13 - .byte 0xe6 - .long 0x66 - .byte 0x2 - .byte 0x23 - .uleb128 0x2 - .byte 0x0 - .uleb128 0xa - .long 0x1356 - .long .LC295 - .byte 0x80 - .byte 0x13 - .byte 0xf4 - .uleb128 0xb - .long .LC296 - .byte 0x13 - .byte 0xf5 - .long 0x42 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC297 - .byte 0x13 - .byte 0xf6 - .long 0x120a - .byte 0x2 - .byte 0x23 - .uleb128 0x1 - .uleb128 0xb - .long .LC298 - .byte 0x13 - .byte 0xf7 - .long 0x1356 - .byte 0x2 - .byte 0x23 - .uleb128 0x2 - .uleb128 0xb - .long .LC299 - .byte 0x13 - .byte 0xf8 - .long 0x91 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC300 - .byte 0x13 - .byte 0xf9 - .long 0x1366 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0x8 - .long 0x1366 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0x5 - .byte 0x0 - .uleb128 0x8 - .long 0x1376 - .long 0x276 - .uleb128 0x9 - .long 0x3dc - .byte 0x6f - .byte 0x0 - .uleb128 0x18 - .long 0x13ed - .long .LC301 - .byte 0x1c - .byte 0x13 - .value 0x177 - .uleb128 0x19 - .long .LC302 - .byte 0x13 - .value 0x178 - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC303 - .byte 0x13 - .value 0x179 - .long 0x1215 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC304 - .byte 0x13 - .value 0x17a - .long 0x13ed - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0x19 - .long .LC305 - .byte 0x13 - .value 0x17b - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0x19 - .long .LC306 - .byte 0x13 - .value 0x17c - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0x19 - .long .LC307 - .byte 0x13 - .value 0x17d - .long 0x1215 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0x19 - .long .LC308 - .byte 0x13 - .value 0x17e - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x11e1 - .uleb128 0x18 - .long 0x142e - .long .LC309 - .byte 0xc - .byte 0x13 - .value 0x194 - .uleb128 0x19 - .long .LC310 - .byte 0x13 - .value 0x195 - .long 0x1215 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC311 - .byte 0x13 - .value 0x196 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC312 - .byte 0x13 - .value 0x197 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x18 - .long 0x1496 - .long .LC313 - .byte 0x54 - .byte 0x13 - .value 0x1aa - .uleb128 0x19 - .long .LC314 - .byte 0x13 - .value 0x1ab - .long 0x8bb - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC315 - .byte 0x13 - .value 0x1ac - .long 0x929 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC316 - .byte 0x13 - .value 0x1ad - .long 0x929 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0x19 - .long .LC317 - .byte 0x13 - .value 0x1ae - .long 0x858 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0x19 - .long .LC318 - .byte 0x13 - .value 0x1af - .long 0x54 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0x19 - .long .LC319 - .byte 0x13 - .value 0x1b0 - .long 0x1496 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .byte 0x0 - .uleb128 0x8 - .long 0x14a6 - .long 0x858 - .uleb128 0x9 - .long 0x3dc - .byte 0xf - .byte 0x0 - .uleb128 0x18 - .long 0x14d2 - .long .LC320 - .byte 0x10 - .byte 0x13 - .value 0x1d7 - .uleb128 0x19 - .long .LC290 - .byte 0x13 - .value 0x1d8 - .long 0x66 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC291 - .byte 0x13 - .value 0x1d9 - .long 0x12ca - .byte 0x2 - .byte 0x23 - .uleb128 0x2 - .byte 0x0 - .uleb128 0x18 - .long 0x153a - .long .LC321 - .byte 0x18 - .byte 0x13 - .value 0x1df - .uleb128 0x19 - .long .LC302 - .byte 0x13 - .value 0x1e0 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC303 - .byte 0x13 - .value 0x1e1 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC304 - .byte 0x13 - .value 0x1e2 - .long 0x13ed - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0x19 - .long .LC305 - .byte 0x13 - .value 0x1e3 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0x19 - .long .LC322 - .byte 0x13 - .value 0x1e4 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0x19 - .long .LC323 - .byte 0x13 - .value 0x1e5 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .byte 0x0 - .uleb128 0x18 - .long 0x1584 - .long .LC324 - .byte 0x10 - .byte 0x13 - .value 0x1f4 - .uleb128 0x19 - .long .LC325 - .byte 0x13 - .value 0x1f5 - .long 0x13ed - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC326 - .byte 0x13 - .value 0x1f6 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC327 - .byte 0x13 - .value 0x1f7 - .long 0x13ed - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0x19 - .long .LC328 - .byte 0x13 - .value 0x1f8 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .byte 0x0 - .uleb128 0xa - .long 0x159f - .long .LC329 - .byte 0x4 - .byte 0x14 - .byte 0x55 - .uleb128 0xb - .long .LC330 - .byte 0x14 - .byte 0x56 - .long 0x863 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .byte 0x0 - .uleb128 0xa - .long 0x15f2 - .long .LC331 - .byte 0x10 - .byte 0x14 - .byte 0x5c - .uleb128 0xb - .long .LC332 - .byte 0x14 - .byte 0x5d - .long 0x734 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC333 - .byte 0x14 - .byte 0x5e - .long 0x120a - .byte 0x2 - .byte 0x23 - .uleb128 0x1 - .uleb128 0xb - .long .LC334 - .byte 0x14 - .byte 0x5f - .long 0x86e - .byte 0x2 - .byte 0x23 - .uleb128 0x2 - .uleb128 0xb - .long .LC335 - .byte 0x14 - .byte 0x60 - .long 0x1584 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC336 - .byte 0x14 - .byte 0x61 - .long 0xbf7 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x18 - .long 0x161e - .long .LC337 - .byte 0x8 - .byte 0x14 - .value 0x1a1 - .uleb128 0x19 - .long .LC338 - .byte 0x14 - .value 0x1a2 - .long 0x1584 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC339 - .byte 0x14 - .value 0x1a3 - .long 0x1584 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x6 - .long 0x1648 - .byte 0x10 - .byte 0x15 - .byte 0x7e - .uleb128 0x7 - .long .LC340 - .byte 0x15 - .byte 0x7b - .long 0x1648 - .uleb128 0x7 - .long .LC341 - .byte 0x15 - .byte 0x7c - .long 0x1658 - .uleb128 0x7 - .long .LC342 - .byte 0x15 - .byte 0x7d - .long 0x1668 - .byte 0x0 - .uleb128 0x8 - .long 0x1658 - .long 0x734 - .uleb128 0x9 - .long 0x3dc - .byte 0xf - .byte 0x0 - .uleb128 0x8 - .long 0x1668 - .long 0x73f - .uleb128 0x9 - .long 0x3dc - .byte 0x7 - .byte 0x0 - .uleb128 0x8 - .long 0x1678 - .long 0x74a - .uleb128 0x9 - .long 0x3dc - .byte 0x3 - .byte 0x0 - .uleb128 0xa - .long 0x1693 - .long .LC343 - .byte 0x10 - .byte 0x15 - .byte 0x79 - .uleb128 0xb - .long .LC344 - .byte 0x15 - .byte 0x7e - .long 0x161e - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .byte 0x0 - .uleb128 0xa - .long 0x16f4 - .long .LC345 - .byte 0x1c - .byte 0x15 - .byte 0x95 - .uleb128 0xb - .long .LC346 - .byte 0x15 - .byte 0x96 - .long 0x734 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC347 - .byte 0x15 - .byte 0x97 - .long 0x120a - .byte 0x2 - .byte 0x23 - .uleb128 0x1 - .uleb128 0xb - .long .LC348 - .byte 0x15 - .byte 0x98 - .long 0x86e - .byte 0x2 - .byte 0x23 - .uleb128 0x2 - .uleb128 0xb - .long .LC349 - .byte 0x15 - .byte 0x99 - .long 0x74a - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC350 - .byte 0x15 - .byte 0x9a - .long 0x1678 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC351 - .byte 0x15 - .byte 0x9b - .long 0x74a - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .byte 0x0 - .uleb128 0x18 - .long 0x1720 - .long .LC352 - .byte 0x20 - .byte 0x15 - .value 0x190 - .uleb128 0x19 - .long .LC353 - .byte 0x15 - .value 0x191 - .long 0x1726 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC354 - .byte 0x15 - .value 0x192 - .long 0x1693 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x11 - .long .LC355 - .byte 0x1 - .uleb128 0x5 - .byte 0x4 - .long 0x1720 - .uleb128 0x18 - .long 0x1758 - .long .LC356 - .byte 0x14 - .byte 0x15 - .value 0x205 - .uleb128 0x19 - .long .LC357 - .byte 0x15 - .value 0x206 - .long 0x1678 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC358 - .byte 0x15 - .value 0x207 - .long 0x8a - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0x18 - .long 0x1784 - .long .LC359 - .byte 0x14 - .byte 0x15 - .value 0x20d - .uleb128 0x19 - .long .LC360 - .byte 0x15 - .value 0x20e - .long 0x1678 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC361 - .byte 0x15 - .value 0x20f - .long 0x8a - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0x18 - .long 0x17b0 - .long .LC362 - .byte 0x20 - .byte 0x15 - .value 0x215 - .uleb128 0x19 - .long .LC363 - .byte 0x15 - .value 0x216 - .long 0x1693 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC364 - .byte 0x15 - .value 0x217 - .long 0x74a - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .byte 0x0 - .uleb128 0xa - .long 0x1803 - .long .LC365 - .byte 0x14 - .byte 0x16 - .byte 0x5c - .uleb128 0xb - .long .LC366 - .byte 0x16 - .byte 0x5d - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC367 - .byte 0x16 - .byte 0x5e - .long 0xc5c - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC368 - .byte 0x16 - .byte 0x5f - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC369 - .byte 0x16 - .byte 0x60 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC370 - .byte 0x16 - .byte 0x61 - .long 0xc5c - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0xa - .long 0x1848 - .long .LC371 - .byte 0x10 - .byte 0x16 - .byte 0x69 - .uleb128 0xb - .long .LC372 - .byte 0x16 - .byte 0x6a - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC373 - .byte 0x16 - .byte 0x6b - .long 0xc5c - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC374 - .byte 0x16 - .byte 0x6c - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC375 - .byte 0x16 - .byte 0x6d - .long 0xc0 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .byte 0x0 - .uleb128 0xa - .long 0x188d - .long .LC376 - .byte 0x10 - .byte 0x16 - .byte 0x70 - .uleb128 0xb - .long .LC377 - .byte 0x16 - .byte 0x71 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC378 - .byte 0x16 - .byte 0x72 - .long 0xc5c - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC379 - .byte 0x16 - .byte 0x73 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC380 - .byte 0x16 - .byte 0x74 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .byte 0x0 - .uleb128 0xa - .long 0x18c4 - .long .LC381 - .byte 0xc - .byte 0x16 - .byte 0x77 - .uleb128 0xb - .long .LC382 - .byte 0x16 - .byte 0x78 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC383 - .byte 0x16 - .byte 0x79 - .long 0xc5c - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC384 - .byte 0x16 - .byte 0x7a - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0xa - .long 0x1941 - .long .LC385 - .byte 0x20 - .byte 0x16 - .byte 0x7d - .uleb128 0xb - .long .LC386 - .byte 0x16 - .byte 0x7e - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC387 - .byte 0x16 - .byte 0x7f - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC388 - .byte 0x16 - .byte 0x80 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC389 - .byte 0x16 - .byte 0x81 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC390 - .byte 0x16 - .byte 0x82 - .long 0x3f9 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC391 - .byte 0x16 - .byte 0x83 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC392 - .byte 0x16 - .byte 0x84 - .long 0x1941 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC393 - .byte 0x16 - .byte 0x85 - .long 0x1947 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x1293 - .uleb128 0x5 - .byte 0x4 - .long 0x18c4 - .uleb128 0x2 - .long .LC394 - .byte 0x17 - .byte 0x2f - .long 0x78 - .uleb128 0x15 - .long 0x1ae1 - .long .LC395 - .value 0x290 - .byte 0x17 - .byte 0x64 - .uleb128 0xb - .long .LC396 - .byte 0x17 - .byte 0x65 - .long 0x976 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC397 - .byte 0x17 - .byte 0x66 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC398 - .byte 0x17 - .byte 0x67 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC399 - .byte 0x17 - .byte 0x68 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC400 - .byte 0x17 - .byte 0x69 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC401 - .byte 0x17 - .byte 0x6a - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC402 - .byte 0x17 - .byte 0x6b - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .uleb128 0xb - .long .LC403 - .byte 0x17 - .byte 0x6c - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x28 - .uleb128 0xb - .long .LC404 - .byte 0x17 - .byte 0x6d - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x2c - .uleb128 0xb - .long .LC405 - .byte 0x17 - .byte 0x6e - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x30 - .uleb128 0xb - .long .LC406 - .byte 0x17 - .byte 0x6f - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x34 - .uleb128 0xb - .long .LC407 - .byte 0x17 - .byte 0x70 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x38 - .uleb128 0xb - .long .LC408 - .byte 0x17 - .byte 0x71 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x3c - .uleb128 0xb - .long .LC409 - .byte 0x17 - .byte 0x72 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x40 - .uleb128 0xb - .long .LC410 - .byte 0x17 - .byte 0x73 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x44 - .uleb128 0xb - .long .LC411 - .byte 0x17 - .byte 0x74 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x48 - .uleb128 0xb - .long .LC412 - .byte 0x17 - .byte 0x75 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4c - .uleb128 0xb - .long .LC413 - .byte 0x17 - .byte 0x76 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x50 - .uleb128 0xb - .long .LC414 - .byte 0x17 - .byte 0x77 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x54 - .uleb128 0xb - .long .LC415 - .byte 0x17 - .byte 0x78 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x58 - .uleb128 0xb - .long .LC416 - .byte 0x17 - .byte 0x79 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x5c - .uleb128 0xb - .long .LC417 - .byte 0x17 - .byte 0x7a - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x60 - .uleb128 0xb - .long .LC418 - .byte 0x17 - .byte 0x7f - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x64 - .uleb128 0xb - .long .LC419 - .byte 0x17 - .byte 0x80 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x68 - .uleb128 0xb - .long .LC420 - .byte 0x17 - .byte 0x81 - .long 0x1ae1 - .byte 0x2 - .byte 0x23 - .uleb128 0x6c - .uleb128 0xb - .long .LC421 - .byte 0x17 - .byte 0x82 - .long 0x1af1 - .byte 0x2 - .byte 0x23 - .uleb128 0x70 - .uleb128 0xb - .long .LC422 - .byte 0x17 - .byte 0x83 - .long 0x1b01 - .byte 0x3 - .byte 0x23 - .uleb128 0x270 - .byte 0x0 - .uleb128 0x8 - .long 0x1af1 - .long 0x78 - .uleb128 0x9 - .long 0x3dc - .byte 0x0 - .byte 0x0 - .uleb128 0x8 - .long 0x1b01 - .long 0x78 - .uleb128 0x9 - .long 0x3dc - .byte 0x7f - .byte 0x0 - .uleb128 0x8 - .long 0x1b11 - .long 0x78 - .uleb128 0x9 - .long 0x3dc - .byte 0x7 - .byte 0x0 - .uleb128 0x2 - .long .LC423 - .byte 0x18 - .byte 0x90 - .long 0x1b1c - .uleb128 0x1a - .long 0x1b28 - .byte 0x1 - .uleb128 0xf - .long 0x78 - .byte 0x0 - .uleb128 0x1b - .long 0x1b4b - .long .LC590 - .byte 0x4 - .byte 0x18 - .byte 0x9a - .uleb128 0x7 - .long .LC424 - .byte 0x18 - .byte 0x9c - .long 0x78 - .uleb128 0x7 - .long .LC425 - .byte 0x18 - .byte 0x9d - .long 0x560 - .byte 0x0 - .uleb128 0x6 - .long 0x1b6a - .byte 0x4 - .byte 0x18 - .byte 0xa7 - .uleb128 0x7 - .long .LC426 - .byte 0x18 - .byte 0xa5 - .long 0x78 - .uleb128 0x7 - .long .LC427 - .byte 0x18 - .byte 0xa6 - .long 0x78 - .byte 0x0 - .uleb128 0xa - .long 0x1ba1 - .long .LC428 - .byte 0xc - .byte 0x18 - .byte 0xa2 - .uleb128 0xb - .long .LC429 - .byte 0x18 - .byte 0xa3 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC430 - .byte 0x18 - .byte 0xa7 - .long 0x1b4b - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC431 - .byte 0x18 - .byte 0xa8 - .long 0x1b28 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0xa - .long 0x1c3a - .long .LC432 - .byte 0x40 - .byte 0x18 - .byte 0xbd - .uleb128 0xb - .long .LC433 - .byte 0x18 - .byte 0xbe - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC434 - .byte 0x18 - .byte 0xbf - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC435 - .byte 0x18 - .byte 0xc6 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC436 - .byte 0x18 - .byte 0xc7 - .long 0x313 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC437 - .byte 0x18 - .byte 0xc8 - .long 0x360 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC438 - .byte 0x18 - .byte 0xc9 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC439 - .byte 0x18 - .byte 0xca - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC440 - .byte 0x18 - .byte 0xcb - .long 0x1b28 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC441 - .byte 0x18 - .byte 0xcc - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .uleb128 0xb - .long .LC442 - .byte 0x18 - .byte 0xcd - .long 0x1c3a - .byte 0x2 - .byte 0x23 - .uleb128 0x24 - .byte 0x0 - .uleb128 0x8 - .long 0x1c4a - .long 0x78 - .uleb128 0x9 - .long 0x3dc - .byte 0x6 - .byte 0x0 - .uleb128 0x2 - .long .LC443 - .byte 0x18 - .byte 0xce - .long 0x1ba1 - .uleb128 0x6 - .long 0x1c74 - .byte 0x4 - .byte 0x18 - .byte 0xdb - .uleb128 0x7 - .long .LC444 - .byte 0x18 - .byte 0xd9 - .long 0x1c74 - .uleb128 0x7 - .long .LC445 - .byte 0x18 - .byte 0xda - .long 0x1c96 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x1b1c - .uleb128 0x1a - .long 0x1c90 - .byte 0x1 - .uleb128 0xf - .long 0x78 - .uleb128 0xf - .long 0x1c90 - .uleb128 0xf - .long 0x560 - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x1ba1 - .uleb128 0x5 - .byte 0x4 - .long 0x1c7a - .uleb128 0xa - .long 0x1cd3 - .long .LC446 - .byte 0x18 - .byte 0x18 - .byte 0xd7 - .uleb128 0xb - .long .LC447 - .byte 0x18 - .byte 0xdb - .long 0x1c55 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC448 - .byte 0x18 - .byte 0xdc - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC449 - .byte 0x18 - .byte 0xdd - .long 0xa14 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x1c - .long .LC450 - .byte 0x18 - .value 0x10b - .long 0x1cdf - .uleb128 0x5 - .byte 0x4 - .long 0x1b11 - .uleb128 0x1c - .long .LC451 - .byte 0x18 - .value 0x10c - .long 0x1c7a - .uleb128 0x18 - .long 0x1d2c - .long .LC452 - .byte 0xc - .byte 0x18 - .value 0x114 - .uleb128 0x19 - .long .LC453 - .byte 0x18 - .value 0x118 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC454 - .byte 0x18 - .value 0x119 - .long 0x189 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC455 - .byte 0x18 - .value 0x11a - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x1c - .long .LC456 - .byte 0x18 - .value 0x11b - .long 0x1cf1 - .uleb128 0x18 - .long 0x1d73 - .long .LC457 - .byte 0xc - .byte 0x18 - .value 0x127 - .uleb128 0x19 - .long .LC458 - .byte 0x18 - .value 0x128 - .long 0x1cdf - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC459 - .byte 0x18 - .value 0x129 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0x19 - .long .LC460 - .byte 0x18 - .value 0x12a - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x18 - .long 0x1d9f - .long .LC461 - .byte 0x8 - .byte 0x18 - .value 0x142 - .uleb128 0x19 - .long .LC453 - .byte 0x18 - .value 0x144 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0x19 - .long .LC462 - .byte 0x18 - .value 0x145 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0xa - .long 0x1dba - .long .LC463 - .byte 0x4 - .byte 0x19 - .byte 0x37 - .uleb128 0xb - .long .LC464 - .byte 0x19 - .byte 0x38 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .byte 0x0 - .uleb128 0x2 - .long .LC465 - .byte 0x1a - .byte 0x6e - .long 0x1dc5 - .uleb128 0x5 - .byte 0x4 - .long 0x1dcb - .uleb128 0x11 - .long .LC466 - .byte 0x1 - .uleb128 0x2 - .long .LC467 - .byte 0x1a - .byte 0x6f - .long 0x1ddc - .uleb128 0x5 - .byte 0x4 - .long 0x1de2 - .uleb128 0x11 - .long .LC468 - .byte 0x1 - .uleb128 0x2 - .long .LC469 - .byte 0x1a - .byte 0x70 - .long 0x1df3 - .uleb128 0x5 - .byte 0x4 - .long 0x1df9 - .uleb128 0x11 - .long .LC470 - .byte 0x1 - .uleb128 0x2 - .long .LC471 - .byte 0x1a - .byte 0x71 - .long 0x1e0a - .uleb128 0x5 - .byte 0x4 - .long 0x1e10 - .uleb128 0x11 - .long .LC472 - .byte 0x1 - .uleb128 0x2 - .long .LC473 - .byte 0x1a - .byte 0x72 - .long 0x1e21 - .uleb128 0x5 - .byte 0x4 - .long 0x1e27 - .uleb128 0x11 - .long .LC474 - .byte 0x1 - .uleb128 0x2 - .long .LC475 - .byte 0x1a - .byte 0x73 - .long 0x1e38 - .uleb128 0x5 - .byte 0x4 - .long 0x1e3e - .uleb128 0x11 - .long .LC476 - .byte 0x1 - .uleb128 0x2 - .long .LC477 - .byte 0x1a - .byte 0x74 - .long 0x78 - .uleb128 0x2 - .long .LC478 - .byte 0x1a - .byte 0x75 - .long 0x1e5a - .uleb128 0xa - .long 0x1e83 - .long .LC479 - .byte 0x8 - .byte 0x1a - .byte 0x60 - .uleb128 0xb - .long .LC480 - .byte 0x1a - .byte 0x89 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC481 - .byte 0x1a - .byte 0x8a - .long 0x1de8 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .byte 0x0 - .uleb128 0x2 - .long .LC482 - .byte 0x1a - .byte 0x76 - .long 0x1e8e - .uleb128 0x5 - .byte 0x4 - .long 0x1e94 - .uleb128 0x11 - .long .LC483 - .byte 0x1 - .uleb128 0x2 - .long .LC484 - .byte 0x1a - .byte 0x77 - .long 0x1ea5 - .uleb128 0x5 - .byte 0x4 - .long 0x1eab - .uleb128 0x11 - .long .LC485 - .byte 0x1 - .uleb128 0x2 - .long .LC486 - .byte 0x1a - .byte 0x78 - .long 0x1ebc - .uleb128 0x5 - .byte 0x4 - .long 0x1ec2 - .uleb128 0x11 - .long .LC487 - .byte 0x1 - .uleb128 0x2 - .long .LC488 - .byte 0x1a - .byte 0x79 - .long 0x1ed3 - .uleb128 0x5 - .byte 0x4 - .long 0x1ed9 - .uleb128 0x11 - .long .LC489 - .byte 0x1 - .uleb128 0x2 - .long .LC490 - .byte 0x1a - .byte 0x7a - .long 0x1eea - .uleb128 0x5 - .byte 0x4 - .long 0x1ef0 - .uleb128 0x11 - .long .LC491 - .byte 0x1 - .uleb128 0x2 - .long .LC492 - .byte 0x1a - .byte 0x82 - .long 0x560 - .uleb128 0x2 - .long .LC493 - .byte 0x1a - .byte 0x83 - .long 0x1f0c - .uleb128 0x5 - .byte 0x4 - .long 0x1f12 - .uleb128 0xe - .long 0x1f22 - .byte 0x1 - .long 0x560 - .uleb128 0xf - .long 0x560 - .byte 0x0 - .uleb128 0x1d - .long 0x1f47 - .long .LC561 - .byte 0x4 - .byte 0x1a - .byte 0xb8 - .uleb128 0x1e - .long .LC494 - .byte 0x1 - .uleb128 0x1e - .long .LC495 - .byte 0x2 - .uleb128 0x1e - .long .LC496 - .byte 0x3 - .uleb128 0x1e - .long .LC497 - .byte 0x4 - .byte 0x0 - .uleb128 0x2 - .long .LC498 - .byte 0x1b - .byte 0x2a - .long 0x1f52 - .uleb128 0x5 - .byte 0x4 - .long 0x1f58 - .uleb128 0x1f - .string "sem" - .byte 0x1 - .uleb128 0xa - .long 0x1fbf - .long .LC499 - .byte 0x14 - .byte 0x1c - .byte 0x35 - .uleb128 0xb - .long .LC500 - .byte 0x1c - .byte 0x36 - .long 0x76b - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC501 - .byte 0x1c - .byte 0x37 - .long 0x54 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC502 - .byte 0x1c - .byte 0x38 - .long 0x6d1 - .byte 0x2 - .byte 0x23 - .uleb128 0x6 - .uleb128 0xb - .long .LC503 - .byte 0x1c - .byte 0x39 - .long 0x6dc - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC504 - .byte 0x1c - .byte 0x3a - .long 0x760 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC505 - .byte 0x1c - .byte 0x3b - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .byte 0x0 - .uleb128 0xa - .long 0x1fda - .long .LC506 - .byte 0x4 - .byte 0x1c - .byte 0x7a - .uleb128 0xb - .long .LC507 - .byte 0x1c - .byte 0x7a - .long 0x1fe0 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .byte 0x0 - .uleb128 0x11 - .long .LC508 - .byte 0x1 - .uleb128 0x5 - .byte 0x4 - .long 0x1fda - .uleb128 0x2 - .long .LC509 - .byte 0x1d - .byte 0x4 - .long 0xc0 - .uleb128 0x2 - .long .LC510 - .byte 0x1d - .byte 0x5 - .long 0x42 - .uleb128 0x2 - .long .LC511 - .byte 0x1d - .byte 0x6 - .long 0x30 - .uleb128 0x2 - .long .LC512 - .byte 0x1d - .byte 0x7 - .long 0x66 - .uleb128 0x2 - .long .LC513 - .byte 0x1d - .byte 0xc - .long 0x42 - .uleb128 0x2 - .long .LC514 - .byte 0x1d - .byte 0xf - .long 0xc0 - .uleb128 0x2 - .long .LC515 - .byte 0x1d - .byte 0x10 - .long 0x78 - .uleb128 0x2 - .long .LC516 - .byte 0x1d - .byte 0x11 - .long 0x42 - .uleb128 0x2 - .long .LC517 - .byte 0x1d - .byte 0x12 - .long 0x66 - .uleb128 0x2 - .long .LC518 - .byte 0x1d - .byte 0x13 - .long 0x2e0 - .uleb128 0x2 - .long .LC519 - .byte 0x1d - .byte 0x14 - .long 0xc0 - .uleb128 0x16 - .string "INT" - .byte 0x1d - .byte 0x15 - .long 0x78 - .uleb128 0x2 - .long .LC520 - .byte 0x1d - .byte 0x16 - .long 0x8a - .uleb128 0x2 - .long .LC521 - .byte 0x1d - .byte 0x18 - .long 0x78 - .uleb128 0x2 - .long .LC522 - .byte 0x1e - .byte 0x4 - .long 0x208b - .uleb128 0xa - .long 0x20ec - .long .LC523 - .byte 0x24 - .byte 0x1e - .byte 0x4 - .uleb128 0xb - .long .LC524 - .byte 0x1e - .byte 0xb - .long 0x20fd - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC525 - .byte 0x1e - .byte 0xd - .long 0x9ac - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC526 - .byte 0x1e - .byte 0xe - .long 0x9ac - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC527 - .byte 0x1e - .byte 0xf - .long 0x9ac - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC528 - .byte 0x1e - .byte 0x11 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .uleb128 0xb - .long .LC529 - .byte 0x1e - .byte 0x12 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x20 - .byte 0x0 - .uleb128 0x2 - .long .LC530 - .byte 0x1e - .byte 0x5 - .long 0x20f7 - .uleb128 0x5 - .byte 0x4 - .long 0x208b - .uleb128 0x2 - .long .LC531 - .byte 0x1e - .byte 0x7 - .long 0x2108 - .uleb128 0x5 - .byte 0x4 - .long 0x210e - .uleb128 0x1a - .long 0x211f - .byte 0x1 - .uleb128 0xf - .long 0x20ec - .uleb128 0xf - .long 0x78 - .byte 0x0 - .uleb128 0x2 - .long .LC532 - .byte 0x1f - .byte 0x8 - .long 0x212a - .uleb128 0xa - .long 0x21a6 - .long .LC533 - .byte 0x20 - .byte 0x1f - .byte 0x8 - .uleb128 0xc - .string "kq" - .byte 0x1f - .byte 0x1a - .long 0x21fa - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC534 - .byte 0x1f - .byte 0x1c - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC535 - .byte 0x1f - .byte 0x1e - .long 0x21e9 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC536 - .byte 0x1f - .byte 0x1f - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC537 - .byte 0x1f - .byte 0x21 - .long 0x21e9 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC538 - .byte 0x1f - .byte 0x22 - .long 0x2205 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC539 - .byte 0x1f - .byte 0x24 - .long 0x220b - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC540 - .byte 0x1f - .byte 0x25 - .long 0x2205 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .byte 0x0 - .uleb128 0x2 - .long .LC541 - .byte 0x1f - .byte 0x9 - .long 0x21b1 - .uleb128 0x5 - .byte 0x4 - .long 0x212a - .uleb128 0x20 - .long 0x21de - .byte 0x4 - .byte 0x1f - .byte 0xc - .uleb128 0x1e - .long .LC542 - .byte 0x0 - .uleb128 0x1e - .long .LC543 - .byte 0x1 - .uleb128 0x1e - .long .LC544 - .byte 0x2 - .uleb128 0x1e - .long .LC545 - .byte 0x4 - .uleb128 0x1e - .long .LC546 - .byte 0x8 - .byte 0x0 - .uleb128 0x2 - .long .LC547 - .byte 0x1f - .byte 0x14 - .long 0x1f5e - .uleb128 0x2 - .long .LC548 - .byte 0x1f - .byte 0x15 - .long 0x21f4 - .uleb128 0x5 - .byte 0x4 - .long 0x1f5e - .uleb128 0x2 - .long .LC549 - .byte 0x1f - .byte 0x16 - .long 0x78 - .uleb128 0x5 - .byte 0x4 - .long 0x78 - .uleb128 0x5 - .byte 0x4 - .long 0x560 - .uleb128 0x2 - .long .LC550 - .byte 0x20 - .byte 0xe - .long 0x221c - .uleb128 0xa - .long 0x2299 - .long .LC551 - .byte 0x20 - .byte 0x20 - .byte 0xe - .uleb128 0xb - .long .LC552 - .byte 0x20 - .byte 0x13 - .long 0x22a4 - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC553 - .byte 0x20 - .byte 0x15 - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC554 - .byte 0x20 - .byte 0x16 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .uleb128 0xb - .long .LC555 - .byte 0x20 - .byte 0x18 - .long 0x5d8 - .byte 0x2 - .byte 0x23 - .uleb128 0xc - .uleb128 0xb - .long .LC556 - .byte 0x20 - .byte 0x19 - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x10 - .uleb128 0xb - .long .LC557 - .byte 0x20 - .byte 0x1b - .long 0x592 - .byte 0x2 - .byte 0x23 - .uleb128 0x14 - .uleb128 0xb - .long .LC558 - .byte 0x20 - .byte 0x1c - .long 0x78 - .byte 0x2 - .byte 0x23 - .uleb128 0x18 - .uleb128 0xb - .long .LC559 - .byte 0x20 - .byte 0x1e - .long 0x2e0 - .byte 0x2 - .byte 0x23 - .uleb128 0x1c - .byte 0x0 - .uleb128 0x2 - .long .LC560 - .byte 0x20 - .byte 0xf - .long 0x22a4 - .uleb128 0x5 - .byte 0x4 - .long 0x221c - .uleb128 0x1d - .long 0x22c9 - .long .LC562 - .byte 0x4 - .byte 0x21 - .byte 0x12 - .uleb128 0x1e - .long .LC563 - .byte 0x0 - .uleb128 0x1e - .long .LC564 - .byte 0x1 - .uleb128 0x1e - .long .LC565 - .byte 0x2 - .byte 0x0 - .uleb128 0x2 - .long .LC566 - .byte 0x22 - .byte 0xb - .long 0x22d4 - .uleb128 0xa - .long 0x230b - .long .LC567 - .byte 0xc - .byte 0x22 - .byte 0xb - .uleb128 0xb - .long .LC552 - .byte 0x22 - .byte 0x13 - .long 0x230b - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xc - .string "key" - .byte 0x22 - .byte 0x14 - .long 0x236f - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC504 - .byte 0x22 - .byte 0x15 - .long 0x560 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x2 - .long .LC568 - .byte 0x22 - .byte 0xc - .long 0x2316 - .uleb128 0x5 - .byte 0x4 - .long 0x22d4 - .uleb128 0x2 - .long .LC569 - .byte 0x22 - .byte 0xd - .long 0x2327 - .uleb128 0xa - .long 0x235e - .long .LC570 - .byte 0xc - .byte 0x22 - .byte 0xd - .uleb128 0xb - .long .LC571 - .byte 0x22 - .byte 0x1a - .long 0x237a - .byte 0x2 - .byte 0x23 - .uleb128 0x0 - .uleb128 0xb - .long .LC572 - .byte 0x22 - .byte 0x1b - .long 0xc0 - .byte 0x2 - .byte 0x23 - .uleb128 0x4 - .uleb128 0xb - .long .LC573 - .byte 0x22 - .byte 0x1c - .long 0x2395 - .byte 0x2 - .byte 0x23 - .uleb128 0x8 - .byte 0x0 - .uleb128 0x2 - .long .LC574 - .byte 0x22 - .byte 0xe - .long 0x2369 - .uleb128 0x5 - .byte 0x4 - .long 0x2327 - .uleb128 0x2 - .long .LC575 - .byte 0x22 - .byte 0xf - .long 0xc0 - .uleb128 0x5 - .byte 0x4 - .long 0x230b - .uleb128 0xe - .long 0x2395 - .byte 0x1 - .long 0xc0 - .uleb128 0xf - .long 0x235e - .uleb128 0xf - .long 0x236f - .byte 0x0 - .uleb128 0x5 - .byte 0x4 - .long 0x2380 - .uleb128 0x21 - .long 0x23f1 - .byte 0x1 - .long .LC577 - .byte 0x1 - .byte 0x21 - .byte 0x1 - .byte 0x2 - .uleb128 0x22 - .string "sz" - .byte 0x1 - .byte 0x20 - .long 0x23f1 - .uleb128 0x22 - .string "sy" - .byte 0x1 - .byte 0x20 - .long 0x23f1 - .uleb128 0x22 - .string "key" - .byte 0x1 - .byte 0x20 - .long 0x23f6 - .uleb128 0x23 - .long .LC576 - .byte 0x1 - .byte 0x20 - .long 0x23fc - .uleb128 0x24 - .string "y" - .byte 0x1 - .byte 0x22 - .long 0x201d - .uleb128 0x24 - .string "z" - .byte 0x1 - .byte 0x22 - .long 0x201d - .uleb128 0x24 - .string "sum" - .byte 0x1 - .byte 0x22 - .long 0x201d - .byte 0x0 - .uleb128 0x10 - .long 0x201d - .uleb128 0x5 - .byte 0x4 - .long 0x23f1 - .uleb128 0x5 - .byte 0x4 - .long 0x201d - .uleb128 0x25 - .long 0x2447 - .long 0x239b - .long .LFB19 - .long .LFE19 - .byte 0x1 - .byte 0x55 - .uleb128 0x26 - .long 0x23a9 - .byte 0x1 - .byte 0x51 - .uleb128 0x26 - .long 0x23b3 - .byte 0x2 - .byte 0x91 - .sleb128 12 - .uleb128 0x26 - .long 0x23bd - .byte 0x1 - .byte 0x56 - .uleb128 0x26 - .long 0x23c8 - .byte 0x2 - .byte 0x91 - .sleb128 20 - .uleb128 0x27 - .long 0x23d3 - .byte 0x1 - .byte 0x52 - .uleb128 0x27 - .long 0x23dc - .byte 0x1 - .byte 0x51 - .uleb128 0x28 - .long 0x23e5 - .byte 0x0 - .uleb128 0x21 - .long 0x249d - .byte 0x1 - .long .LC578 - .byte 0x1 - .byte 0xa9 - .byte 0x1 - .byte 0x2 - .uleb128 0x22 - .string "sz" - .byte 0x1 - .byte 0xa8 - .long 0x23f1 - .uleb128 0x22 - .string "sy" - .byte 0x1 - .byte 0xa8 - .long 0x23f1 - .uleb128 0x22 - .string "key" - .byte 0x1 - .byte 0xa8 - .long 0x23f6 - .uleb128 0x23 - .long .LC576 - .byte 0x1 - .byte 0xa8 - .long 0x23fc - .uleb128 0x24 - .string "y" - .byte 0x1 - .byte 0xaa - .long 0x201d - .uleb128 0x24 - .string "z" - .byte 0x1 - .byte 0xaa - .long 0x201d - .uleb128 0x24 - .string "sum" - .byte 0x1 - .byte 0xaa - .long 0x201d - .byte 0x0 - .uleb128 0x25 - .long 0x24e2 - .long 0x2447 - .long .LFB21 - .long .LFE21 - .byte 0x1 - .byte 0x55 - .uleb128 0x26 - .long 0x2455 - .byte 0x2 - .byte 0x91 - .sleb128 8 - .uleb128 0x26 - .long 0x245f - .byte 0x1 - .byte 0x52 - .uleb128 0x26 - .long 0x2469 - .byte 0x1 - .byte 0x57 - .uleb128 0x26 - .long 0x2474 - .byte 0x2 - .byte 0x91 - .sleb128 20 - .uleb128 0x27 - .long 0x247f - .byte 0x1 - .byte 0x52 - .uleb128 0x27 - .long 0x2488 - .byte 0x1 - .byte 0x51 - .uleb128 0x28 - .long 0x2491 - .byte 0x0 - .uleb128 0x29 - .long 0x2553 - .byte 0x1 - .long .LC579 - .byte 0x1 - .value 0x131 - .byte 0x1 - .long 0x78 - .long .LFB23 - .long .LFE23 - .byte 0x1 - .byte 0x55 - .uleb128 0x2a - .long .LC576 - .byte 0x1 - .value 0x130 - .long 0x23fc - .byte 0x1 - .byte 0x57 - .uleb128 0x2b - .string "src" - .byte 0x1 - .value 0x130 - .long 0x23f6 - .byte 0x1 - .byte 0x56 - .uleb128 0x2b - .string "key" - .byte 0x1 - .value 0x130 - .long 0x23f6 - .byte 0x2 - .byte 0x91 - .sleb128 16 - .uleb128 0x2a - .long .LC572 - .byte 0x1 - .value 0x130 - .long 0x78 - .byte 0x1 - .byte 0x52 - .uleb128 0x2c - .string "i" - .byte 0x1 - .value 0x132 - .long 0x78 - .byte 0x1 - .byte 0x53 - .uleb128 0x2d - .long .LC580 - .byte 0x1 - .value 0x133 - .long 0x78 - .byte 0x2 - .byte 0x91 - .sleb128 -16 - .byte 0x0 - .uleb128 0x29 - .long 0x25c4 - .byte 0x1 - .long .LC581 - .byte 0x1 - .value 0x144 - .byte 0x1 - .long 0x78 - .long .LFB25 - .long .LFE25 - .byte 0x1 - .byte 0x55 - .uleb128 0x2a - .long .LC576 - .byte 0x1 - .value 0x143 - .long 0x23fc - .byte 0x1 - .byte 0x57 - .uleb128 0x2b - .string "src" - .byte 0x1 - .value 0x143 - .long 0x23f6 - .byte 0x1 - .byte 0x56 - .uleb128 0x2b - .string "key" - .byte 0x1 - .value 0x143 - .long 0x23f6 - .byte 0x2 - .byte 0x91 - .sleb128 16 - .uleb128 0x2a - .long .LC572 - .byte 0x1 - .value 0x143 - .long 0x78 - .byte 0x1 - .byte 0x52 - .uleb128 0x2c - .string "i" - .byte 0x1 - .value 0x145 - .long 0x78 - .byte 0x1 - .byte 0x53 - .uleb128 0x2d - .long .LC580 - .byte 0x1 - .value 0x146 - .long 0x78 - .byte 0x2 - .byte 0x91 - .sleb128 -16 - .byte 0x0 - .uleb128 0x2e - .long .LC582 - .byte 0xc - .byte 0x5b - .long 0xc88 - .byte 0x1 - .byte 0x1 - .uleb128 0x2e - .long .LC583 - .byte 0xc - .byte 0x5c - .long 0x25de - .byte 0x1 - .byte 0x1 - .uleb128 0x5 - .byte 0x4 - .long 0xc88 - .uleb128 0x11 - .long .LC584 - .byte 0x1 - .uleb128 0x11 - .long .LC585 - .byte 0x1 - .uleb128 0x2f - .long .LC586 - .byte 0x1 - .byte 0x1e - .long 0xbf7 - .byte 0x1 - .byte 0x5 - .byte 0x3 - .long tea_nilbuf - .byte 0x0 - .section .debug_abbrev - .uleb128 0x1 - .uleb128 0x11 - .byte 0x1 - .uleb128 0x10 - .uleb128 0x6 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x1b - .uleb128 0xe - .uleb128 0x25 - .uleb128 0xe - .uleb128 0x13 - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x2 - .uleb128 0x16 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x24 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3e - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x4 - .uleb128 0x24 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3e - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x5 - .uleb128 0xf - .byte 0x0 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x6 - .uleb128 0x17 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x7 - .uleb128 0xd - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x8 - .uleb128 0x1 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x9 - .uleb128 0x21 - .byte 0x0 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2f - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0xa - .uleb128 0x13 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0xb - .uleb128 0xd - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0xc - .uleb128 0xd - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0xd - .uleb128 0xf - .byte 0x0 - .uleb128 0xb - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0xe - .uleb128 0x15 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x27 - .uleb128 0xc - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0xf - .uleb128 0x5 - .byte 0x0 - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x10 - .uleb128 0x26 - .byte 0x0 - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x11 - .uleb128 0x13 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3c - .uleb128 0xc - .byte 0x0 - .byte 0x0 - .uleb128 0x12 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x13 - .uleb128 0x35 - .byte 0x0 - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x14 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0xb - .uleb128 0x5 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x15 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0x5 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x16 - .uleb128 0x16 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x17 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x18 - .uleb128 0x13 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .byte 0x0 - .byte 0x0 - .uleb128 0x19 - .uleb128 0xd - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x1a - .uleb128 0x15 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x27 - .uleb128 0xc - .byte 0x0 - .byte 0x0 - .uleb128 0x1b - .uleb128 0x17 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x1c - .uleb128 0x16 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x1d - .uleb128 0x4 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x1e - .uleb128 0x28 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x1c - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x1f - .uleb128 0x13 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3c - .uleb128 0xc - .byte 0x0 - .byte 0x0 - .uleb128 0x20 - .uleb128 0x4 - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x21 - .uleb128 0x2e - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x27 - .uleb128 0xc - .uleb128 0x20 - .uleb128 0xb - .byte 0x0 - .byte 0x0 - .uleb128 0x22 - .uleb128 0x5 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x23 - .uleb128 0x5 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x24 - .uleb128 0x34 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x25 - .uleb128 0x2e - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x31 - .uleb128 0x13 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x40 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x26 - .uleb128 0x5 - .byte 0x0 - .uleb128 0x31 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x27 - .uleb128 0x34 - .byte 0x0 - .uleb128 0x31 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x28 - .uleb128 0x34 - .byte 0x0 - .uleb128 0x31 - .uleb128 0x13 - .byte 0x0 - .byte 0x0 - .uleb128 0x29 - .uleb128 0x2e - .byte 0x1 - .uleb128 0x1 - .uleb128 0x13 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x27 - .uleb128 0xc - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x11 - .uleb128 0x1 - .uleb128 0x12 - .uleb128 0x1 - .uleb128 0x40 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x2a - .uleb128 0x5 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x2b - .uleb128 0x5 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x2c - .uleb128 0x34 - .byte 0x0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x2d - .uleb128 0x34 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0x5 - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .uleb128 0x2e - .uleb128 0x34 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x3c - .uleb128 0xc - .byte 0x0 - .byte 0x0 - .uleb128 0x2f - .uleb128 0x34 - .byte 0x0 - .uleb128 0x3 - .uleb128 0xe - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x49 - .uleb128 0x13 - .uleb128 0x3f - .uleb128 0xc - .uleb128 0x2 - .uleb128 0xa - .byte 0x0 - .byte 0x0 - .byte 0x0 - .section .debug_pubnames,"",@progbits - .long 0x59 - .value 0x2 - .long .Ldebug_info0 - .long 0x2603 - .long 0x2402 - .string "tea_code" - .long 0x249d - .string "tea_decode" - .long 0x24e2 - .string "tea_encrypt" - .long 0x2553 - .string "tea_decrypt" - .long 0x25f0 - .string "tea_nilbuf" - .long 0x0 - .section .debug_aranges,"",@progbits - .long 0x1c - .value 0x2 - .long .Ldebug_info0 - .byte 0x4 - .byte 0x0 - .value 0x0 - .value 0x0 - .long .Ltext0 - .long .Letext0-.Ltext0 - .long 0x0 - .long 0x0 - .section .debug_str,"MS",@progbits,1 -.LC409: - .string "sc_eax" -.LC316: - .string "cmcred_euid" -.LC37: - .string "__time_t" -.LC393: - .string "ai_next" -.LC565: - .string "NUM_PF" -.LC82: - .string "__wchar_t" -.LC241: - .string "clockinfo" -.LC199: - .string "_RuneRange" -.LC92: - .string "_size" -.LC124: - .string "int64_t" -.LC197: - .string "nranges" -.LC301: - .string "msghdr" -.LC581: - .string "tea_decrypt" -.LC290: - .string "sa_family" -.LC186: - .string "sigset_t" -.LC477: - .string "pthread_key_t" -.LC216: - .string "d_reclen" -.LC392: - .string "ai_addr" -.LC313: - .string "cmsgcred" -.LC195: - .string "types" -.LC310: - .string "cmsg_len" -.LC478: - .string "pthread_once_t" -.LC510: - .string "UBYTE" -.LC399: - .string "sc_fs" -.LC203: - .string "sputrune" -.LC573: - .string "hashfunc" -.LC346: - .string "sin6_len" -.LC556: - .string "length" -.LC557: - .string "mem_data" -.LC276: - .string "nstat" -.LC385: - .string "addrinfo" -.LC127: - .string "uint32_t" -.LC245: - .string "profhz" -.LC340: - .string "__u6_addr8" -.LC183: - .string "tv_nsec" -.LC404: - .string "sc_ebp" -.LC383: - .string "p_aliases" -.LC277: - .string "iovec" -.LC513: - .string "bool" -.LC7: - .string "short unsigned int" -.LC217: - .string "d_type" -.LC42: - .string "__uint_fast16_t" -.LC97: - .string "_lbfsize" -.LC357: - .string "ipv6mr_multiaddr" -.LC253: - .string "tm_yday" -.LC3: - .string "unsigned char" -.LC439: - .string "si_addr" -.LC129: - .string "intptr_t" -.LC343: - .string "in6_addr" -.LC79: - .string "__useconds_t" -.LC226: - .string "dd_seek" -.LC156: - .string "mode_t" -.LC286: - .string "af_name" -.LC192: - .string "l_pid" -.LC170: - .string "useconds_t" -.LC374: - .string "n_addrtype" -.LC362: - .string "ip6_mtuinfo" -.LC158: - .string "off_t" -.LC497: - .string "MUTEX_TYPE_MAX" -.LC516: - .string "BYTE" -.LC179: - .string "timeval" -.LC570: - .string "yhash" -.LC349: - .string "sin6_flowinfo" -.LC93: - .string "__sbuf" -.LC398: - .string "sc_gs" -.LC411: - .string "sc_err" -.LC272: - .string "st_gen" -.LC101: - .string "_seek" -.LC306: - .string "msg_control" -.LC387: - .string "ai_family" -.LC89: - .string "size_t" -.LC419: - .string "sc_ownedfp" -.LC422: - .string "sc_spare2" -.LC467: - .string "pthread_attr_t" -.LC348: - .string "sin6_port" -.LC338: - .string "imr_multiaddr" -.LC539: - .string "fd_data" -.LC83: - .string "__wint_t" -.LC293: - .string "sp_family" -.LC391: - .string "ai_canonname" -.LC153: - .string "id_t" -.LC39: - .string "__uintmax_t" -.LC303: - .string "msg_namelen" -.LC442: - .string "__spare__" -.LC408: - .string "sc_ecx" -.LC420: - .string "sc_spare1" -.LC70: - .string "__off_t" -.LC214: - .string "dirent" -.LC533: - .string "fdwatch" -.LC515: - .string "BOOL" -.LC36: - .string "__ssize_t" -.LC41: - .string "__uint_fast8_t" -.LC347: - .string "sin6_family" -.LC287: - .string "af_arg" -.LC445: - .string "__sa_sigaction" -.LC464: - .string "sched_priority" -.LC559: - .string "flag" -.LC403: - .string "sc_esi" -.LC181: - .string "tv_usec" -.LC339: - .string "imr_interface" -.LC61: - .string "__fsfilcnt_t" -.LC483: - .string "pthread_rwlock" -.LC164: - .string "suseconds_t" -.LC415: - .string "sc_esp" -.LC457: - .string "sigvec" -.LC149: - .string "fsfilcnt_t" -.LC358: - .string "ipv6mr_interface" -.LC525: - .string "before_sleep" -.LC509: - .string "QWORD" -.LC402: - .string "sc_edi" -.LC322: - .string "msg_accrights" -.LC443: - .string "siginfo_t" -.LC256: - .string "tm_zone" -.LC397: - .string "sc_onstack" -.LC294: - .string "sp_protocol" -.LC94: - .string "__sFILE" -.LC85: - .string "__mbstate8" -.LC494: - .string "PTHREAD_MUTEX_ERRORCHECK" -.LC407: - .string "sc_edx" -.LC590: - .string "sigval" -.LC255: - .string "tm_gmtoff" -.LC331: - .string "sockaddr_in" -.LC296: - .string "ss_len" -.LC117: - .string "u_int" -.LC207: - .string "mapupper" -.LC511: - .string "sbyte" -.LC121: - .string "int8_t" -.LC184: - .string "__fd_mask" -.LC544: - .string "FDW_WRITE" -.LC562: - .string "ENUM_PROFILER" -.LC501: - .string "filter" -.LC551: - .string "buffer" -.LC521: - .string "socket_t" -.LC375: - .string "n_net" -.LC230: - .string "dd_td" -.LC77: - .string "__udev_t" -.LC446: - .string "sigaction" -.LC324: - .string "sf_hdtr" -.LC314: - .string "cmcred_pid" -.LC500: - .string "ident" -.LC332: - .string "sin_len" -.LC454: - .string "ss_size" -.LC297: - .string "ss_family" -.LC356: - .string "ipv6_mreq" -.LC204: - .string "invalid_rune" -.LC514: - .string "DWORD" -.LC576: - .string "dest" -.LC136: - .string "quad_t" -.LC589: - .string "GNU C 3.3.3 [FreeBSD] 20031106" -.LC492: - .string "pthread_addr_t" -.LC112: - .string "div_t" -.LC359: - .string "in6_pktinfo" -.LC498: - .string "sem_t" -.LC469: - .string "pthread_mutex_t" -.LC189: - .string "flock" -.LC549: - .string "KQUEUE" -.LC528: - .string "passes_per_sec" -.LC429: - .string "sigev_notify" -.LC248: - .string "tm_hour" -.LC476: - .string "pthread_cond_attr" -.LC133: - .string "u_int32_t" -.LC532: - .string "FDWATCH" -.LC212: - .string "variable_len" -.LC410: - .string "sc_trapno" -.LC395: - .string "sigcontext" -.LC530: - .string "LPHEART" -.LC289: - .string "sa_len" -.LC99: - .string "_close" -.LC541: - .string "LPFDWATCH" -.LC271: - .string "st_flags" -.LC376: - .string "servent" -.LC154: - .string "ino_t" -.LC425: - .string "sigval_ptr" -.LC561: - .string "pthread_mutextype" -.LC88: - .string "fpos_t" -.LC32: - .string "__ptrdiff_t" -.LC13: - .string "__uint64_t" -.LC175: - .string "vm_size_t" -.LC159: - .string "pid_t" -.LC20: - .string "__float_t" -.LC191: - .string "l_len" -.LC221: - .string "dd_fd" -.LC91: - .string "_base" -.LC522: - .string "HEART" -.LC378: - .string "s_aliases" -.LC63: - .string "__id_t" -.LC453: - .string "ss_sp" -.LC187: - .string "fd_set" -.LC55: - .string "__va_list" -.LC98: - .string "_cookie" -.LC517: - .string "WORD" -.LC566: - .string "HASHNODE" -.LC302: - .string "msg_name" -.LC351: - .string "sin6_scope_id" -.LC86: - .string "_mbstateL" -.LC114: - .string "lldiv_t" -.LC18: - .string "__double_t" -.LC574: - .string "LPHASH" -.LC345: - .string "sockaddr_in6" -.LC578: - .string "tea_decode" -.LC17: - .string "__critical_t" -.LC100: - .string "_read" -.LC265: - .string "st_size" -.LC71: - .string "__pid_t" -.LC229: - .string "dd_lock" -.LC520: - .string "UINT" -.LC106: - .string "_blksize" -.LC496: - .string "PTHREAD_MUTEX_NORMAL" -.LC321: - .string "omsghdr" -.LC264: - .string "st_rdev" -.LC16: - .string "long unsigned int" -.LC506: - .string "klist" -.LC103: - .string "_extra" -.LC155: - .string "key_t" -.LC137: - .string "qaddr_t" -.LC564: - .string "PF_HEARTBEAT" -.LC236: - .string "bintime" -.LC242: - .string "tick" -.LC205: - .string "runetype" -.LC263: - .string "st_gid" -.LC568: - .string "LPHASHNODE" -.LC463: - .string "sched_param" -.LC232: - .string "_telldir" -.LC538: - .string "fd_event_idx" -.LC219: - .string "d_name" -.LC76: - .string "__timer_t" -.LC211: - .string "variable" -.LC295: - .string "sockaddr_storage" -.LC9: - .string "__uint32_t" -.LC587: - .string "tea.c" -.LC141: - .string "clock_t" -.LC50: - .string "__vm_offset_t" -.LC575: - .string "KEYT" -.LC396: - .string "sc_mask" -.LC486: - .string "pthread_barrier_t" -.LC270: - .string "st_blocks" -.LC473: - .string "pthread_cond_t" -.LC547: - .string "KEVENT" -.LC65: - .string "__key_t" -.LC312: - .string "cmsg_type" -.LC145: - .string "dev_t" -.LC466: - .string "pthread" -.LC111: - .string "quot" -.LC584: - .string "rusage" -.LC231: - .string "__sFILEX" -.LC344: - .string "__u6_addr" -.LC171: - .string "vm_offset_t" -.LC430: - .string "__sigev_u" -.LC459: - .string "sv_mask" -.LC28: - .string "__int_least8_t" -.LC485: - .string "pthread_rwlockattr" -.LC104: - .string "_ubuf" -.LC284: - .string "l_linger" -.LC209: - .string "maplower_ext" -.LC105: - .string "_nbuf" -.LC51: - .string "__vm_ooffset_t" -.LC146: - .string "fflags_t" -.LC555: - .string "read_point" -.LC261: - .string "st_nlink" -.LC5: - .string "short int" -.LC128: - .string "uint64_t" -.LC298: - .string "__ss_pad1" -.LC300: - .string "__ss_pad2" -.LC84: - .string "__dev_t" -.LC169: - .string "uid_t" -.LC455: - .string "ss_flags" -.LC479: - .string "pthread_once" -.LC251: - .string "tm_year" -.LC31: - .string "__int_least64_t" -.LC12: - .string "long long int" -.LC246: - .string "tm_sec" -.LC505: - .string "udata" -.LC354: - .string "ro_dst" -.LC54: - .string "__vm_size_t" -.LC484: - .string "pthread_rwlockattr_t" -.LC193: - .string "l_type" -.LC147: - .string "fixpt_t" -.LC360: - .string "ipi6_addr" -.LC53: - .string "__vm_pindex_t" -.LC334: - .string "sin_port" -.LC433: - .string "si_signo" -.LC188: - .string "__fds_bits" -.LC503: - .string "fflags" -.LC524: - .string "func" -.LC329: - .string "in_addr" -.LC144: - .string "daddr_t" -.LC14: - .string "long long unsigned int" -.LC558: - .string "mem_size" -.LC282: - .string "linger" -.LC78: - .string "__uid_t" -.LC462: - .string "ss_onstack" -.LC588: - .string "/home/work/libthecore/src" -.LC220: - .string "_dirdesc" -.LC108: - .string "FILE" -.LC327: - .string "trailers" -.LC6: - .string "__uint16_t" -.LC157: - .string "nlink_t" -.LC269: - .string "st_blksize" -.LC527: - .string "last_time" -.LC162: - .string "segsz_t" -.LC173: - .string "vm_paddr_t" -.LC508: - .string "knote" -.LC172: - .string "vm_ooffset_t" -.LC488: - .string "pthread_barrierattr_t" -.LC328: - .string "trl_cnt" -.LC472: - .string "pthread_mutex_attr" -.LC292: - .string "sockproto" -.LC56: - .string "char" -.LC249: - .string "tm_mday" -.LC113: - .string "ldiv_t" -.LC434: - .string "si_errno" -.LC218: - .string "d_namlen" -.LC560: - .string "LPBUFFER" -.LC412: - .string "sc_eip" -.LC309: - .string "cmsghdr" -.LC502: - .string "flags" -.LC225: - .string "dd_len" -.LC352: - .string "route_in6" -.LC258: - .string "st_dev" -.LC198: - .string "ranges" -.LC499: - .string "kevent" -.LC512: - .string "sh_int" -.LC278: - .string "iov_base" -.LC563: - .string "PF_IDLE" -.LC123: - .string "int32_t" -.LC208: - .string "runetype_ext" -.LC554: - .string "write_point_pos" -.LC273: - .string "stat" -.LC582: - .string "_DefaultRuneLocale" -.LC580: - .string "resize" -.LC545: - .string "FDW_WRITE_ONESHOT" -.LC237: - .string "frac" -.LC30: - .string "__int_least32_t" -.LC288: - .string "sockaddr" -.LC394: - .string "sig_atomic_t" -.LC438: - .string "si_status" -.LC495: - .string "PTHREAD_MUTEX_RECURSIVE" -.LC474: - .string "pthread_cond" -.LC196: - .string "_RuneEntry" -.LC125: - .string "uint8_t" -.LC274: - .string "st_lspare" -.LC353: - .string "ro_rt" -.LC418: - .string "sc_fpformat" -.LC81: - .string "__rune_t" -.LC27: - .string "__int_fast64_t" -.LC57: - .string "__gnuc_va_list" -.LC80: - .string "__ct_rune_t" -.LC330: - .string "s_addr" -.LC390: - .string "ai_addrlen" -.LC366: - .string "h_name" -.LC382: - .string "p_name" -.LC491: - .string "pthread_spinlock" -.LC337: - .string "ip_mreq" -.LC138: - .string "caddr_t" -.LC384: - .string "p_proto" -.LC178: - .string "__sigset_t" -.LC166: - .string "timer_t" -.LC585: - .string "pthread_barrier_attr" -.LC569: - .string "HASH" -.LC456: - .string "stack_t" -.LC304: - .string "msg_iov" -.LC120: - .string "uint" -.LC535: - .string "kqevents" -.LC447: - .string "__sigaction_u" -.LC449: - .string "sa_mask" -.LC470: - .string "pthread_mutex" -.LC311: - .string "cmsg_level" -.LC168: - .string "udev_t" -.LC177: - .string "__bits" -.LC361: - .string "ipi6_ifindex" -.LC48: - .string "__uint_least64_t" -.LC542: - .string "FDW_NONE" -.LC280: - .string "sa_family_t" -.LC259: - .string "st_ino" -.LC317: - .string "cmcred_gid" -.LC440: - .string "si_value" -.LC487: - .string "pthread_barrier" -.LC437: - .string "si_uid" -.LC281: - .string "socklen_t" -.LC335: - .string "sin_addr" -.LC139: - .string "c_caddr_t" -.LC95: - .string "_flags" -.LC283: - .string "l_onoff" -.LC182: - .string "timespec" -.LC482: - .string "pthread_rwlock_t" -.LC240: - .string "it_value" -.LC318: - .string "cmcred_ngroups" -.LC23: - .string "__intptr_t" -.LC122: - .string "int16_t" -.LC364: - .string "ip6m_mtu" -.LC421: - .string "sc_fpstate" -.LC38: - .string "__uintfptr_t" -.LC423: - .string "__sighandler_t" -.LC252: - .string "tm_wday" -.LC75: - .string "__suseconds_t" -.LC49: - .string "__u_register_t" -.LC29: - .string "__int_least16_t" -.LC110: - .string "wchar_t" -.LC436: - .string "si_pid" -.LC536: - .string "nkqevents" -.LC223: - .string "dd_size" -.LC26: - .string "__int_fast32_t" -.LC323: - .string "msg_accrightslen" -.LC553: - .string "write_point" -.LC234: - .string "tz_minuteswest" -.LC490: - .string "pthread_spinlock_t" -.LC367: - .string "h_aliases" -.LC21: - .string "__intfptr_t" -.LC319: - .string "cmcred_groups" -.LC2: - .string "signed char" -.LC368: - .string "h_addrtype" -.LC305: - .string "msg_iovlen" -.LC461: - .string "sigstack" -.LC47: - .string "__uint_least32_t" -.LC341: - .string "__u6_addr16" -.LC388: - .string "ai_socktype" -.LC33: - .string "__register_t" -.LC435: - .string "si_code" -.LC201: - .string "encoding" -.LC67: - .string "__mode_t" -.LC238: - .string "itimerval" -.LC160: - .string "register_t" -.LC130: - .string "uintptr_t" -.LC235: - .string "tz_dsttime" -.LC507: - .string "slh_first" -.LC202: - .string "sgetrune" -.LC424: - .string "sigval_int" -.LC552: - .string "next" -.LC546: - .string "FDW_EOF" -.LC206: - .string "maplower" -.LC142: - .string "clockid_t" -.LC380: - .string "s_proto" -.LC224: - .string "dd_buf" -.LC10: - .string "unsigned int" -.LC45: - .string "__uint_least8_t" -.LC414: - .string "sc_efl" -.LC267: - .string "st_mtimespec" -.LC320: - .string "osockaddr" -.LC35: - .string "__size_t" -.LC118: - .string "u_long" -.LC326: - .string "hdr_cnt" -.LC244: - .string "stathz" -.LC405: - .string "sc_isp" -.LC531: - .string "HEARTFUNC" -.LC371: - .string "netent" -.LC475: - .string "pthread_condattr_t" -.LC537: - .string "kqrevents" -.LC572: - .string "size" -.LC134: - .string "u_int64_t" -.LC373: - .string "n_aliases" -.LC190: - .string "l_start" -.LC432: - .string "__siginfo" -.LC386: - .string "ai_flags" -.LC431: - .string "sigev_value" -.LC504: - .string "data" -.LC15: - .string "__clock_t" -.LC250: - .string "tm_mon" -.LC365: - .string "hostent" -.LC194: - .string "l_whence" -.LC25: - .string "__int_fast16_t" -.LC315: - .string "cmcred_uid" -.LC493: - .string "pthread_startroutine_t" -.LC452: - .string "sigaltstack" -.LC143: - .string "critical_t" -.LC543: - .string "FDW_READ" -.LC308: - .string "msg_flags" -.LC428: - .string "sigevent" -.LC567: - .string "yhash_node" -.LC579: - .string "tea_encrypt" -.LC489: - .string "pthread_barrierattr" -.LC115: - .string "u_char" -.LC74: - .string "__socklen_t" -.LC426: - .string "__sigev_signo" -.LC163: - .string "ssize_t" -.LC325: - .string "headers" -.LC369: - .string "h_length" -.LC228: - .string "dd_flags" -.LC518: - .string "LONG" -.LC11: - .string "__int64_t" -.LC279: - .string "iov_len" -.LC268: - .string "st_ctimespec" -.LC227: - .string "dd_rewind" -.LC465: - .string "pthread_t" -.LC583: - .string "_CurrentRuneLocale" -.LC46: - .string "__uint_least16_t" -.LC370: - .string "h_addr_list" -.LC451: - .string "__siginfohandler_t" -.LC210: - .string "mapupper_ext" -.LC471: - .string "pthread_mutexattr_t" -.LC540: - .string "fd_rw" -.LC534: - .string "nfiles" -.LC96: - .string "_file" -.LC151: - .string "in_addr_t" -.LC427: - .string "__sigev_notify_kqueue" -.LC68: - .string "__nl_item" -.LC586: - .string "tea_nilbuf" -.LC0: - .string "__int8_t" -.LC333: - .string "sin_family" -.LC233: - .string "timezone" -.LC336: - .string "sin_zero" -.LC60: - .string "__fsblkcnt_t" -.LC150: - .string "gid_t" -.LC577: - .string "tea_code" -.LC285: - .string "accept_filter_arg" -.LC550: - .string "BUFFER" -.LC148: - .string "fsblkcnt_t" -.LC222: - .string "dd_loc" -.LC275: - .string "st_birthtimespec" -.LC413: - .string "sc_cs" -.LC69: - .string "__nlink_t" -.LC34: - .string "__segsz_t" -.LC107: - .string "_offset" -.LC185: - .string "fd_mask" -.LC116: - .string "u_short" -.LC526: - .string "opt_time" -.LC243: - .string "spare" -.LC140: - .string "v_caddr_t" -.LC350: - .string "sin6_addr" -.LC87: - .string "__mbstate_t" -.LC213: - .string "_RuneLocale" -.LC44: - .string "__uint_fast64_t" -.LC119: - .string "ushort" -.LC215: - .string "d_fileno" -.LC372: - .string "n_name" -.LC40: - .string "__uintptr_t" -.LC62: - .string "__gid_t" -.LC257: - .string "ostat" -.LC406: - .string "sc_ebx" -.LC468: - .string "pthread_attr" -.LC58: - .string "__clockid_t" -.LC548: - .string "LPKEVENT" -.LC8: - .string "__int32_t" -.LC22: - .string "__intmax_t" -.LC200: - .string "magic" -.LC444: - .string "__sa_handler" -.LC416: - .string "sc_ss" -.LC52: - .string "__vm_paddr_t" -.LC239: - .string "it_interval" -.LC379: - .string "s_port" -.LC523: - .string "heart" -.LC342: - .string "__u6_addr32" -.LC377: - .string "s_name" -.LC450: - .string "sig_t" -.LC102: - .string "_write" -.LC1: - .string "__uint8_t" -.LC363: - .string "ip6m_addr" -.LC481: - .string "mutex" -.LC460: - .string "sv_flags" -.LC180: - .string "tv_sec" -.LC260: - .string "st_mode" -.LC254: - .string "tm_isdst" -.LC64: - .string "__ino_t" -.LC299: - .string "__ss_align" -.LC448: - .string "sa_flags" -.LC381: - .string "protoent" -.LC126: - .string "uint16_t" -.LC176: - .string "__sigset" -.LC401: - .string "sc_ds" -.LC66: - .string "long int" -.LC355: - .string "rtentry" -.LC131: - .string "u_int8_t" -.LC519: - .string "ULONG" -.LC152: - .string "in_port_t" -.LC109: - .string "rune_t" -.LC72: - .string "__rlim_t" -.LC291: - .string "sa_data" -.LC132: - .string "u_int16_t" -.LC19: - .string "double" -.LC417: - .string "sc_len" -.LC165: - .string "time_t" -.LC43: - .string "__uint_fast32_t" -.LC90: - .string "va_list" -.LC24: - .string "__int_fast8_t" -.LC135: - .string "u_quad_t" -.LC529: - .string "pulse" -.LC247: - .string "tm_min" -.LC167: - .string "u_register_t" -.LC571: - .string "table" -.LC307: - .string "msg_controllen" -.LC400: - .string "sc_es" -.LC262: - .string "st_uid" -.LC389: - .string "ai_protocol" -.LC480: - .string "state" -.LC441: - .string "si_band" -.LC266: - .string "st_atimespec" -.LC161: - .string "rlim_t" -.LC73: - .string "__sa_family_t" -.LC59: - .string "__fflags_t" -.LC174: - .string "vm_pindex_t" -.LC458: - .string "sv_handler" -.LC4: - .string "__int16_t" - .ident "GCC: (GNU) 3.3.3 [FreeBSD] 20031106" diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 64e1639..730510c 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -13,13 +13,13 @@ set(CLIENT_PLUGIN_PVIO_SHMEM STATIC CACHE STRING "") set(DEFAULT_SSL_VERIFY_SERVER_CERT OFF CACHE STRING "") add_subdirectory(mariadb-connector-c-3.4.5 EXCLUDE_FROM_ALL) -add_subdirectory(cryptopp) add_subdirectory(spdlog-1.15.3) +add_subdirectory(libsodium) if (WIN32) set_target_properties(ed25519_ref10 PROPERTIES FOLDER vendor) set_target_properties(mariadb_obj PROPERTIES FOLDER vendor) set_target_properties(mariadbclient PROPERTIES FOLDER vendor) - set_target_properties(cryptopp-static PROPERTIES FOLDER vendor) set_target_properties(spdlog PROPERTIES FOLDER vendor) + set_target_properties(sodium PROPERTIES FOLDER vendor) endif() \ No newline at end of file diff --git a/vendor/cryptopp/3way.cpp b/vendor/cryptopp/3way.cpp deleted file mode 100644 index 4228e5e..0000000 --- a/vendor/cryptopp/3way.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// 3way.cpp - modified by Wei Dai from Joan Daemen's 3way.c -// The original code and all modifications are in the public domain. - -#include "pch.h" -#include "3way.h" -#include "misc.h" - -NAMESPACE_BEGIN(CryptoPP) - -#if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) -void ThreeWay_TestInstantiations() -{ - ThreeWay::Encryption x1; - ThreeWay::Decryption x2; -} -#endif - -namespace -{ - const word32 START_E = 0x0b0b; // round constant of first encryption round - const word32 START_D = 0xb1b1; // round constant of first decryption round -} - -static inline word32 reverseBits(word32 a) -{ - a = ((a & 0xAAAAAAAA) >> 1) | ((a & 0x55555555) << 1); - a = ((a & 0xCCCCCCCC) >> 2) | ((a & 0x33333333) << 2); - return ((a & 0xF0F0F0F0) >> 4) | ((a & 0x0F0F0F0F) << 4); -} - -#define mu(a0, a1, a2) \ -{ \ - a1 = reverseBits(a1); \ - word32 t = reverseBits(a0); \ - a0 = reverseBits(a2); \ - a2 = t; \ -} - -#define pi_gamma_pi(a0, a1, a2) \ -{ \ - word32 b0, b2; \ - b2 = rotlConstant<1>(a2); \ - b0 = rotlConstant<22>(a0); \ - a0 = rotlConstant<1>(b0 ^ (a1|(~b2))); \ - a2 = rotlConstant<22>(b2 ^ (b0|(~a1))); \ - a1 ^= (b2|(~b0)); \ -} - -// thanks to Paulo Barreto for this optimized theta() -#define theta(a0, a1, a2) \ -{ \ - word32 b0, b1, c; \ - c = a0 ^ a1 ^ a2; \ - c = rotlConstant<16>(c) ^ rotlConstant<8>(c); \ - b0 = (a0 << 24) ^ (a2 >> 8) ^ (a1 << 8) ^ (a0 >> 24); \ - b1 = (a1 << 24) ^ (a0 >> 8) ^ (a2 << 8) ^ (a1 >> 24); \ - a0 ^= c ^ b0; \ - a1 ^= c ^ b1; \ - a2 ^= c ^ (b0 >> 16) ^ (b1 << 16); \ -} - -#define rho(a0, a1, a2) \ -{ \ - theta(a0, a1, a2); \ - pi_gamma_pi(a0, a1, a2); \ -} - -void ThreeWay::Base::UncheckedSetKey(const byte *uk, unsigned int length, const NameValuePairs ¶ms) -{ - AssertValidKeyLength(length); - - m_rounds = GetRoundsAndThrowIfInvalid(params, this); - - for (unsigned int i=0; i<3; i++) - m_k[i] = (word32)uk[4*i+3] | ((word32)uk[4*i+2]<<8) | ((word32)uk[4*i+1]<<16) | ((word32)uk[4*i]<<24); - - if (!IsForwardTransformation()) - { - theta(m_k[0], m_k[1], m_k[2]); - mu(m_k[0], m_k[1], m_k[2]); - m_k[0] = ByteReverse(m_k[0]); - m_k[1] = ByteReverse(m_k[1]); - m_k[2] = ByteReverse(m_k[2]); - } -} - -void ThreeWay::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const -{ - typedef BlockGetAndPut Block; - - word32 a0, a1, a2; - Block::Get(inBlock)(a0)(a1)(a2); - - word32 rc = START_E; - - for(unsigned i=0; i Block; - - word32 a0, a1, a2; - Block::Get(inBlock)(a0)(a1)(a2); - - word32 rc = START_D; - - mu(a0, a1, a2); - for(unsigned i=0; i, public FixedKeyLength<12>, public VariableRounds<11> -{ - CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "3-Way";} -}; - -/// \brief ThreeWay block cipher -/// \sa 3-Way -class ThreeWay : public ThreeWay_Info, public BlockCipherDocumentation -{ - /// \brief Class specific implementation and overrides used to operate the cipher. - /// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions - class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl - { - public: - void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms); - - protected: - unsigned int m_rounds; - FixedSizeSecBlock m_k; - }; - - /// \brief Class specific methods used to operate the cipher in the forward direction. - /// \details Implementations and overrides in \p Enc apply to \p ENCRYPTION. - class CRYPTOPP_NO_VTABLE Enc : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - - /// \brief Class specific methods used to operate the cipher in the reverse direction. - /// \details Implementations and overrides in \p Dec apply to \p DECRYPTION. - class CRYPTOPP_NO_VTABLE Dec : public Base - { - public: - void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; - }; - -public: - typedef BlockCipherFinal Encryption; - typedef BlockCipherFinal Decryption; -}; - -typedef ThreeWay::Encryption ThreeWayEncryption; -typedef ThreeWay::Decryption ThreeWayDecryption; - -NAMESPACE_END - -#endif diff --git a/vendor/cryptopp/CMakeLists.txt b/vendor/cryptopp/CMakeLists.txt deleted file mode 100644 index 9569e1e..0000000 --- a/vendor/cryptopp/CMakeLists.txt +++ /dev/null @@ -1,1348 +0,0 @@ -# Please ensure your changes or patch meets minimum requirements. -# The minimum requirements are 2.8.6. It roughly equates to -# Ubuntu 14.05 LTS or Solaris 11.3. Please do not check in something -# for 3.5.0 or higher because it will break LTS operating systems -# and a number of developer boards used for testing. To test your -# changes, please set up a Ubuntu 14.05 LTS system. - -# Should we be setting things like this? We are not a C project -# so nothing should be done with the C compiler. But there is -# no reliable way to tell CMake we are C++. -# Cannot set this... Breaks Linux PowerPC with Clang: -# SET(CMAKE_C_COMPILER ${CMAKE_CXX_COMPILER}) -# # error "The CMAKE_C_COMPILER is set to a C++ compiler" - -if(NOT DEFINED cryptopp_DISPLAY_CMAKE_SUPPORT_WARNING) - set(cryptopp_DISPLAY_CMAKE_SUPPORT_WARNING 1) -endif() -if(cryptopp_DISPLAY_CMAKE_SUPPORT_WARNING) - message( STATUS -"*************************************************************************\n" -"The Crypto++ library does not officially support CMake. CMake support is a\n" -"community effort, and the library works with the folks using CMake to help\n" -"improve it. If you find an issue then please fix it or report it at\n" -"https://github.com/noloader/cryptopp-cmake.\n" -"-- *************************************************************************" -) -endif() - -# Print useful information -message( STATUS "CMake version ${CMAKE_VERSION}" ) -message( STATUS "System ${CMAKE_SYSTEM_NAME}" ) -message( STATUS "Processor ${CMAKE_SYSTEM_PROCESSOR}" ) - -cmake_minimum_required(VERSION 3.10) -if (${CMAKE_VERSION} VERSION_LESS "3.0.0") - project(cryptopp) - set(cryptopp_VERSION_MAJOR 8) - set(cryptopp_VERSION_MINOR 6) - set(cryptopp_VERSION_PATCH 0) -else () - cmake_policy(SET CMP0048 NEW) - project(cryptopp VERSION 8.6.0) - if (NOT ${CMAKE_VERSION} VERSION_LESS "3.1.0") - cmake_policy(SET CMP0054 NEW) - endif () -endif () - -# Need to set SRC_DIR manually after removing the Python library code. -set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - -# Make RelWithDebInfo the default (it does e.g. add '-O2 -g -DNDEBUG' for GNU) -# If not in multi-configuration environments, no explicit build type or CXX -# flags are set by the user and if we are the root CMakeLists.txt file. -if (NOT CMAKE_CONFIGURATION_TYPES AND - NOT CMAKE_NO_BUILD_TYPE AND - NOT CMAKE_BUILD_TYPE AND - NOT CMAKE_CXX_FLAGS AND - CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(CMAKE_BUILD_TYPE RelWithDebInfo) -endif () - -include(GNUInstallDirs) -include(CheckCXXCompilerFlag) - -# We now carry around test programs. test_cxx.cpp is the default C++ one. -# Also see https://github.com/weidai11/cryptopp/issues/741. -set(TEST_PROG_DIR ${SRC_DIR}/TestPrograms) -set(TEST_CXX_FILE ${TEST_PROG_DIR}/test_cxx.cpp) - -# https://github.com/noloader/cryptopp-cmake/issues/56 -# https://stackoverflow.com/a/40152725 -if (APPLE) - set(USE_INTERMEDIATE_OBJECTS_TARGET OFF) -endif() - -#============================================================================ -# Settable options -#============================================================================ - -option(BUILD_STATIC "Build static library" ON) -option(BUILD_SHARED "Build shared library" OFF) -option(BUILD_TESTING "Build library tests" OFF) -option(BUILD_DOCUMENTATION "Use Doxygen to create the HTML based API documentation" OFF) -option(USE_INTERMEDIATE_OBJECTS_TARGET "Use a common intermediate objects target for the static and shared library targets" OFF) - -if (${CMAKE_VERSION} VERSION_GREATER "3.1") - option(USE_OPENMP "Enable OpenMP to parallelize some of the algorithms. Note that this isn't always faster, see https://www.cryptopp.com/wiki/OpenMP" OFF) -endif() - - -# These are IA-32 options. -option(DISABLE_ASM "Disable ASM" OFF) -option(DISABLE_SSSE3 "Disable SSSE3" OFF) -option(DISABLE_SSE4 "Disable SSE4" OFF) -option(DISABLE_AESNI "Disable AES-NI" OFF) -option(DISABLE_CLMUL "Disable CLMUL" OFF) -option(DISABLE_SHA "Disable SHA" OFF) -option(DISABLE_AVX "Disable AVX" OFF) -option(DISABLE_AVX2 "Disable AVX2" OFF) - -# These are ARM A-32 options -option(DISABLE_ARM_NEON "Disable NEON" OFF) - -# These are Aarch64 options -option(DISABLE_ARM_AES "Disable ASIMD" OFF) -option(DISABLE_ARM_AES "Disable AES" OFF) -option(DISABLE_ARM_PMULL "Disable PMULL" OFF) -option(DISABLE_ARM_SHA "Disable SHA" OFF) - -# These are PowerPC options -option(DISABLE_ALTIVEC "Disable Altivec" OFF) -option(DISABLE_POWER7 "Disable POWER7" OFF) -option(DISABLE_POWER8 "Disable POWER8" OFF) -option(DISABLE_POWER9 "Disable POWER9" OFF) - -set(CRYPTOPP_DATA_DIR "" CACHE PATH "Crypto++ test data directory") - -#============================================================================ -# Compiler options -#============================================================================ - -set(CRYPTOPP_COMPILE_DEFINITIONS) -set(CRYPTOPP_COMPILE_OPTIONS) - -# Stop hiding the damn output... -# set(CMAKE_VERBOSE_MAKEFILE ON) - -# Stop CMake complaining... -if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(MACOSX_RPATH FALSE) -endif() - -# Always 1 ahead in Master. Also see http://groups.google.com/forum/#!topic/cryptopp-users/SFhqLDTQPG4 -set(LIB_VER ${cryptopp_VERSION_MAJOR}${cryptopp_VERSION_MINOR}${cryptopp_VERSION_PATCH}) - -if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - list(APPEND CRYPTOPP_COMPILE_OPTIONS -wd68 -wd186 -wd279 -wd327 -wd161 -wd3180) -endif () - -# Also see http://github.com/weidai11/cryptopp/issues/395 -if (DISABLE_ASM) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM) -endif () -if (DISABLE_SSSE3) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3) -endif () -if (DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4) -endif () -if (DISABLE_CLMUL) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_CLMUL) -endif () -if (DISABLE_AESNI) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI) -endif () -if (DISABLE_RDRAND) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_RDRAND) -endif () -if (DISABLE_RDSEED) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_RDSEED) -endif () -if (DISABLE_AVX) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AVX) -endif () -if (DISABLE_AVX2) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AVX2) -endif () -if (DISABLE_SHA) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA) -endif () -if (DISABLE_ARM_NEON) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ARM_NEON) -endif () -if (DISABLE_ARM_ASIMD) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ARM_ASIMD) -endif () -if (DISABLE_ARM_AES) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ARM_AES) -endif () -if (DISABLE_ARM_PMULL) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ARM_PMULL) -endif () -if (DISABLE_ARM_SHA) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ARM_SHA) -endif () -if (DISABLE_ALTIVEC) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ALTIVEC) -endif () -if (DISABLE_POWER7) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER7) -endif () -if (DISABLE_POWER8) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER8) -endif () -if (DISABLE_POWER9) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER9) -endif () -if (NOT CRYPTOPP_DATA_DIR STREQUAL "") - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "CRYPTOPP_DATA_DIR=${CRYPTOPP_DATA_DIR}") -endif () - -############################################################################### - -# Try to find a Posix compatible grep and sed. Solaris, Digital Unix, -# Tru64, HP-UX and a few others need tweaking - -if (EXISTS /usr/xpg4/bin/grep) - set(GREP_CMD /usr/xpg4/bin/grep) -elseif (EXISTS /usr/gnu/bin/grep) - set(GREP_CMD /usr/gnu/bin/grep) -elseif (EXISTS /usr/linux/bin/grep) - set(GREP_CMD /usr/linux/bin/grep) -else () - set(GREP_CMD grep) -endif () - -if (EXISTS /usr/xpg4/bin/sed) - set(SED_CMD /usr/xpg4/bin/sed) -elseif (EXISTS /usr/gnu/bin/sed) - set(SED_CMD /usr/gnu/bin/sed) -elseif (EXISTS /usr/linux/bin/sed) - set(SED_CMD /usr/linux/bin/sed) -else () - set(SED_CMD sed) -endif () - -############################################################################### - -function(CheckCompileOption opt var) - - if (MSVC) - - # TODO: improve this... - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - elseif (CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" - COMMAND ${GREP_CMD} -i -c -E "illegal value ignored" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # No dereference below. Thanks for the warning, CMake (not!). - if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. - elseif (CMAKE_CXX_COMPILER MATCHES "xlC") - - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" - COMMAND ${GREP_CMD} -i -c -E "Unrecognized value" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # No dereference below. Thanks for the warning, CMake (not!). - if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - else () - - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - endif () - -endfunction(CheckCompileOption) - -function(CheckCompileLinkOption opt var prog) - - if (MSVC) - - # TODO: improve this... - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - elseif (APPLE) - - message(STATUS "Performing Test ${var}") - try_compile(COMMAND_SUCCESS ${CMAKE_BINARY_DIR} ${prog} COMPILE_DEFINITIONS ${opt}) - if (COMMAND_SUCCESS) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - else () - - message(STATUS "Performing Test ${var}") - try_compile(COMMAND_SUCCESS ${CMAKE_BINARY_DIR} ${prog} COMPILE_DEFINITIONS ${opt}) - if (COMMAND_SUCCESS) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - endif () - -endfunction(CheckCompileLinkOption) - -function(AddCompileOption opt) - - if ("${COMMAND_OUTPUT}" NOT STREQUAL "") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "${opt}") - endif () - -endfunction(AddCompileOption) - -############################################################################### - -function(DumpMachine output pattern) - - if (MSVC) - - # CMake does not provide a generic shell/terminal mechanism - # and Microsoft environments don't know what 'sh' is. - set(${output} 0 PARENT_SCOPE) - - else () - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" - COMMAND ${GREP_CMD} -i -c -E "${pattern}" - OUTPUT_VARIABLE ${output} - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(${output} "${${output}}" PARENT_SCOPE) - endif() - -endfunction(DumpMachine) - -# Thanks to Anonimal for MinGW; see http://github.com/weidai11/cryptopp/issues/466 -DumpMachine(CRYPTOPP_AMD64 "(x86_64|AMD64|amd64)") -DumpMachine(CRYPTOPP_I386 "^i.86$") -DumpMachine(CRYPTOPP_MINGW32 "^mingw32") -DumpMachine(CRYPTOPP_MINGW64 "(w64-mingw32|mingw64)") -DumpMachine(CRYPTOPP_ARMV8 "(armv8|arm64|aarch32|aarch64)") -DumpMachine(CRYPTOPP_ARM32 "(arm|armhf|arm7l|eabihf)") -DumpMachine(CRYPTOPP_PPC32 "^(powerpc|ppc)") -DumpMachine(CRYPTOPP_PPC64 "^ppc64") - -# Cleanup 32/64 bit -if (CRYPTOPP_AMD64) - set (CRYPTOPP_I386 0) -endif () - -if (CRYPTOPP_ARMV8) - set (CRYPTOPP_ARM32 0) -endif () - -if (CRYPTOPP_PPC64) - set (CRYPTOPP_PPC32 0) -endif () - - -############################################################################### - -# Test SunCC for a string like 'CC: Sun C++ 5.13 SunOS_i386' -if (NOT CRYPTOPP_SOLARIS AND NOT MSVC) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c "SunOS" - OUTPUT_VARIABLE CRYPTOPP_SOLARIS - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () - -# Test GCC for a string like 'i386-pc-solaris2.11' -if (NOT CRYPTOPP_SOLARIS AND NOT MSVC) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" - COMMAND ${GREP_CMD} -i -c "Solaris" - OUTPUT_VARIABLE CRYPTOPP_SOLARIS - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () - -# Fixup PowerPC. If both 32-bit and 64-bit use 64-bit. -if (CRYPTOPP_PPC32 AND CRYPTOPP_PPC64) - unset(CRYPTOPP_PPC32) -endif () - -# Fixup for xlC compiler. -dumpmachine fails so we miss PowerPC -# TODO: something better than proxying the platform via compiler -# Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. -if (CMAKE_CXX_COMPILER MATCHES "xlC") - message ("-- Fixing platform due to IBM xlC") - set(CRYPTOPP_PPC64 1) -endif () - -# DumpMachine SunCC style -if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - - # SunCC is 32-bit, but it builds both 32 and 64 bit. Use - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c "Sparc" - OUTPUT_VARIABLE CRYPTOPP_SPARC - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c -E "i386|i86" - OUTPUT_VARIABLE CRYPTOPP_I386 - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "i386" - OUTPUT_VARIABLE KERNEL_I386 - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "amd64" - OUTPUT_VARIABLE KERNEL_AMD64 - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "Sparc" - OUTPUT_VARIABLE KERNEL_SPARC - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c -E "UltraSarc|Sparc64|SparcV9" - OUTPUT_VARIABLE KERNEL_SPARC64 - OUTPUT_STRIP_TRAILING_WHITESPACE) - -endif () - -############################################################################### - -# TODO: what about ICC and LLVM on Windows? -if (MSVC) - if (CMAKE_SYSTEM_VERSION MATCHES "10\\.0.*") - # https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "_WIN32_WINNT=0x0A00") - endif () - # winapifamily.h is missing on AppVeyor machines - INCLUDE (CheckIncludeFiles) - CHECK_INCLUDE_FILES (winapifamily.h HAVE_WINAPIFAMILY_H) - if (HAVE_WINAPIFAMILY_H) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "/FIwinapifamily.h") - endif() -endif () - -# Enable PIC for all target machines except 32-bit i386 due to register pressures. -if (NOT CRYPTOPP_I386) - SET(CMAKE_POSITION_INDEPENDENT_CODE 1) -endif () - -# IBM XLC compiler options for AIX and Linux. -# Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. -if (CMAKE_CXX_COMPILER MATCHES "xlC") - - #CheckCompileLinkOption("-qxlcompatmacros" CRYPTOPP_XLC_COMPAT "${TEST_CXX_FILE}") - #if (CRYPTOPP_XLC_COMPAT) - # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qxlcompatmacros") - #endif () - - CheckCompileLinkOption("-qrtti" CRYPTOPP_PPC_RTTI "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_RTTI) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qrtti") - endif () - - CheckCompileLinkOption("-qmaxmem=-1" CRYPTOPP_PPC_MAXMEM "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_MAXMEM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qmaxmem=-1") - endif () - - CheckCompileLinkOption("-qthreaded" CRYPTOPP_PPC_THREADED "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_THREADED) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qthreaded") - endif () -endif () - -# Solaris specific -if (CRYPTOPP_SOLARIS) - - # SunCC needs -template=no%extdef - if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-template=no%extdef") - endif () - - # SunCC needs -xregs=no%appl on Sparc (not x86) for libraries (not test program) - # TODO: wire this up properly - if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" AND (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64)) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-xregs=no%appl") - endif () - - # GCC needs to enable use of '/' for division in the assembler - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-Wa,--divide") - endif () - -endif () - -#============================================================================ -# Sources & headers -#============================================================================ - -# Library headers -file(GLOB cryptopp_HEADERS ${SRC_DIR}/*.h) - -# Remove headers used to build test suite -list(REMOVE_ITEM cryptopp_HEADERS - ${SRC_DIR}/bench.h - ${SRC_DIR}/validate.h - ) - -# Test sources. You can use the GNUmakefile to generate the list: `make sources`. -set(cryptopp_SOURCES_TEST - ${SRC_DIR}/test.cpp - ${SRC_DIR}/bench1.cpp - ${SRC_DIR}/bench2.cpp - ${SRC_DIR}/bench3.cpp - ${SRC_DIR}/validat0.cpp - ${SRC_DIR}/validat1.cpp - ${SRC_DIR}/validat2.cpp - ${SRC_DIR}/validat3.cpp - ${SRC_DIR}/validat4.cpp - ${SRC_DIR}/validat5.cpp - ${SRC_DIR}/validat6.cpp - ${SRC_DIR}/validat7.cpp - ${SRC_DIR}/validat8.cpp - ${SRC_DIR}/validat9.cpp - ${SRC_DIR}/validat10.cpp - ${SRC_DIR}/regtest1.cpp - ${SRC_DIR}/regtest2.cpp - ${SRC_DIR}/regtest3.cpp - ${SRC_DIR}/regtest4.cpp - ${SRC_DIR}/datatest.cpp - ${SRC_DIR}/fipsalgt.cpp - ${SRC_DIR}/fipstest.cpp - ${SRC_DIR}/dlltest.cpp - #${SRC_DIR}/adhoc.cpp - ) - -# Library sources. You can use the GNUmakefile to generate the list: `make sources`. -# Makefile sorted them at http://github.com/weidai11/cryptopp/pull/426. -file(GLOB cryptopp_SOURCES ${SRC_DIR}/*.cpp) -list(SORT cryptopp_SOURCES) -list(REMOVE_ITEM cryptopp_SOURCES - ${SRC_DIR}/cryptlib.cpp - ${SRC_DIR}/cpu.cpp - ${SRC_DIR}/integer.cpp - ${SRC_DIR}/pch.cpp - ${SRC_DIR}/simple.cpp - ${SRC_DIR}/adhoc.cpp - ${cryptopp_SOURCES_TEST} - ) -set(cryptopp_SOURCES - ${SRC_DIR}/cryptlib.cpp - ${SRC_DIR}/cpu.cpp - ${SRC_DIR}/integer.cpp - ${cryptopp_SOURCES} - ) - -if(ANDROID) - include_directories(${ANDROID_NDK}/sources/android/cpufeatures) - list(APPEND cryptopp_SOURCES ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c) -endif() - -set(cryptopp_SOURCES_ASM) - -if (MSVC AND NOT DISABLE_ASM) - if (${CMAKE_GENERATOR} MATCHES ".*ARM") - message(STATUS "Disabling ASM because ARM is specified as target platform.") - else () - enable_language(ASM_MASM) - list(APPEND cryptopp_SOURCES_ASM - ${SRC_DIR}/rdrand.asm - ${SRC_DIR}/rdseed.asm - ) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - list(APPEND cryptopp_SOURCES_ASM - ${SRC_DIR}/x64dll.asm - ${SRC_DIR}/x64masm.asm - ) - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X64") - else () - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X86" COMPILE_FLAGS "/safeseh") - endif () - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES LANGUAGE ASM_MASM) - endif () -endif () - -#============================================================================ -# Architecture flags -#============================================================================ - -# TODO: Android, AIX, IBM xlC, iOS and a few other profiles are missing. - -# New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. -# Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER MATCHES "xlC") - - if (CRYPTOPP_AMD64 OR CRYPTOPP_I386) - - # For Darwin and a GCC port compiler, we need to check for -Wa,-q first. -Wa,-q - # is a GCC option, and it tells GCC to use the Clang Integrated Assembler. We - # need LLVM's assembler because GAS is too old on Apple platforms. GAS will - # not assemble modern ISA, like AVX or AVX2. - if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") - CheckCompileLinkOption("-Wa,-q" CRYPTOPP_X86_WAQ - "${TEST_PROG_DIR}/test_x86_sse2.cpp") - - if (CRYPTOPP_X86_WAQ) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-Wa,-q") - endif () - endif () - - # Now we can move on to normal feature testing. - CheckCompileLinkOption("-msse2" CRYPTOPP_X86_SSE2 - "${TEST_PROG_DIR}/test_x86_sse2.cpp") - CheckCompileLinkOption("-mssse3" CRYPTOPP_X86_SSSE3 - "${TEST_PROG_DIR}/test_x86_ssse3.cpp") - CheckCompileLinkOption("-msse4.1" CRYPTOPP_X86_SSE41 - "${TEST_PROG_DIR}/test_x86_sse41.cpp") - CheckCompileLinkOption("-msse4.2" CRYPTOPP_X86_SSE42 - "${TEST_PROG_DIR}/test_x86_sse42.cpp") - CheckCompileLinkOption("-mssse3 -mpclmul" CRYPTOPP_X86_CLMUL - "${TEST_PROG_DIR}/test_x86_clmul.cpp") - CheckCompileLinkOption("-msse4.1 -maes" CRYPTOPP_X86_AES - "${TEST_PROG_DIR}/test_x86_aes.cpp") - CheckCompileLinkOption("-mavx" CRYPTOPP_X86_AVX - "${TEST_PROG_DIR}/test_x86_avx.cpp") - CheckCompileLinkOption("-mavx2" CRYPTOPP_X86_AVX2 - "${TEST_PROG_DIR}/test_x86_avx2.cpp") - CheckCompileLinkOption("-msse4.2 -msha" CRYPTOPP_X86_SHA - "${TEST_PROG_DIR}/test_x86_sha.cpp") - if (EXISTS "${TEST_PROG_DIR}/test_asm_mixed.cpp") - CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM - "${TEST_PROG_DIR}/test_asm_mixed.cpp") - else () - CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM - "${TEST_PROG_DIR}/test_mixed_asm.cpp") - endif () - - # https://github.com/weidai11/cryptopp/issues/756 - if (NOT CRYPTOPP_MIXED_ASM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_MIXED_ASM") - endif () - - if (NOT CRYPTOPP_X86_SSE2 AND NOT DISABLE_ASM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ASM") - elseif (CRYPTOPP_X86_SSE2 AND NOT DISABLE_ASM) - set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") - set_source_files_properties(${SRC_DIR}/donna_sse.cpp PROPERTIES COMPILE_FLAGS "-msse2") - endif () - if (NOT CRYPTOPP_X86_SSSE3 AND NOT DISABLE_SSSE3) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSSE3") - elseif (CRYPTOPP_X86_SSSE3 AND NOT DISABLE_SSSE3) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/keccak_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/lsh256_sse.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/lsh512_sse.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - if (NOT CRYPTOPP_X86_SSE41 AND NOT DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4") - elseif (CRYPTOPP_X86_SSE41 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - endif () - if (NOT CRYPTOPP_X86_SSE42 AND NOT DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4") - elseif (CRYPTOPP_X86_SSE42 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2") - if (NOT CRYPTOPP_X86_CLMUL AND NOT DISABLE_CLMUL) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_CLMUL") - elseif (CRYPTOPP_X86_CLMUL AND NOT DISABLE_CLMUL) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul") - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-mpclmul") - endif () - if (NOT CRYPTOPP_X86_AES AND NOT DISABLE_AES) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AESNI") - elseif (CRYPTOPP_X86_AES AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -maes") - endif () - if (NOT CRYPTOPP_X86_AVX2 AND NOT DISABLE_AVX2) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AVX2") - elseif (CRYPTOPP_X86_AVX2 AND NOT DISABLE_AVX2) - set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2") - set_source_files_properties(${SRC_DIR}/lsh256_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2") - set_source_files_properties(${SRC_DIR}/lsh512_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2") - endif () - if (NOT CRYPTOPP_X86_SHA AND NOT DISABLE_SHA) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SHANI") - elseif (CRYPTOPP_X86_SHA AND NOT DISABLE_SHA) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") - endif () - endif () - endif () - - elseif (CRYPTOPP_ARMV8) - - # This checks for - CheckCompileLinkOption("-march=armv8-a" CRYPTOPP_ARM_ACLE_HEADER - "${TEST_PROG_DIR}/test_arm_acle_header.cpp") - - # Use if available - if (CRYPTOPP_ARM_NEON_HEADER) - CheckCompileOption("-march=armv8-a -DCRYPTOPP_ARM_ACLE_HEADER=1" CRYPTOPP_ARMV8A_ASIMD) - CheckCompileOption("-march=armv8-a+crc -DCRYPTOPP_ARM_ACLE_HEADER=1" CRYPTOPP_ARMV8A_CRC) - CheckCompileOption("-march=armv8-a+crypto -DCRYPTOPP_ARM_ACLE_HEADER=1" CRYPTOPP_ARMV8A_CRYPTO) - else () - CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_ASIMD) - CheckCompileOption("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) - CheckCompileOption("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) - endif () - - if (CRYPTOPP_ARMV8A_ASIMD) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - else () - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ARM_ASIMD") - endif () - if (CRYPTOPP_ARMV8A_CRC) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc") - else () - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ARM_CRC32") - endif () - if (CRYPTOPP_ARMV8A_CRYPTO) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - else () - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ARM_AES") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ARM_PMULL") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ARM_SHA") - endif () - - elseif (CRYPTOPP_ARM32) - - # This checks for - CheckCompileLinkOption("-march=armv7-a -mfpu=neon" CRYPTOPP_ARM_NEON_HEADER - "${TEST_PROG_DIR}/test_arm_neon_header.cpp") - - # Use if available - if (CRYPTOPP_ARM_NEON_HEADER) - CheckCompileLinkOption("-march=armv7-a -mfpu=neon -DCRYPTOPP_ARM_NEON_HEADER=1" CRYPTOPP_ARMV7A_NEON - "${TEST_PROG_DIR}/test_arm_neon.cpp") - else () - CheckCompileLinkOption("-march=armv7-a -mfpu=neon" CRYPTOPP_ARMV7A_NEON - "${TEST_PROG_DIR}/test_arm_neon.cpp") - endif () - - if (CRYPTOPP_ARMV7A_NEON) - - # Add Cryptogams ASM files for ARM on Linux. Linux is required due to GNU Assembler. - # AES requires -mthumb under Clang. Do not add -mthumb for SHA for any files. - if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - list(APPEND cryptopp_SOURCES ${SRC_DIR}/aes_armv4.S) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/sha1_armv4.S) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/sha256_armv4.S) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/sha512_armv4.S) - - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES LANGUAGE CXX) - set_source_files_properties(${SRC_DIR}/sha1_armv4.S PROPERTIES LANGUAGE CXX) - set_source_files_properties(${SRC_DIR}/sha256_armv4.S PROPERTIES LANGUAGE CXX) - set_source_files_properties(${SRC_DIR}/sha512_armv4.S PROPERTIES LANGUAGE CXX) - - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mthumb -mfpu=neon -Wa,--noexecstack") - else () - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - endif () - - set_source_files_properties(${SRC_DIR}/sha1_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - set_source_files_properties(${SRC_DIR}/sha256_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - set_source_files_properties(${SRC_DIR}/sha512_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - endif () - - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - else () - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ARM_NEON") - endif () - - elseif (CRYPTOPP_PPC32 OR CRYPTOPP_PPC64) - - # XLC requires -qaltivec in addition to Arch or CPU option - # Disable POWER9 due to https://github.com/weidai11/cryptopp/issues/986. - if (CMAKE_CXX_COMPILER MATCHES "xlC") - set(CRYPTOPP_ALTIVEC_FLAGS "-qaltivec") - set(CRYPTOPP_POWER4_FLAGS "-qarch=pwr4 -qaltivec") - set(CRYPTOPP_POWER5_FLAGS "-qarch=pwr5 -qaltivec") - set(CRYPTOPP_POWER6_FLAGS "-qarch=pwr6 -qaltivec") - set(CRYPTOPP_POWER7_VSX_FLAG "-qarch=pwr7 -qvsx -qaltivec") - set(CRYPTOPP_POWER7_PWR_FLAGS "-qarch=pwr7 -qaltivec") - set(CRYPTOPP_POWER8_FLAGS "-qarch=pwr8 -qaltivec") - #set(CRYPTOPP_POWER9_FLAGS "-qarch=pwr9 -qaltivec") - else () - set(CRYPTOPP_ALTIVEC_FLAGS "-maltivec") - set(CRYPTOPP_POWER7_VSX_FLAGS "-mcpu=power7 -mvsx") - set(CRYPTOPP_POWER7_PWR_FLAGS "-mcpu=power7") - set(CRYPTOPP_POWER8_FLAGS "-mcpu=power8") - #set(CRYPTOPP_POWER9_FLAGS "-mcpu=power9") - endif () - - CheckCompileLinkOption("${CRYPTOPP_ALTIVEC_FLAGS}" PPC_ALTIVEC_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cpp") - - # Hack for XLC. Find the lowest PWR architecture. - if (CMAKE_CXX_COMPILER MATCHES "xlC") - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER4_FLAGS}" PPC_POWER4_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cpp") - if (PPC_POWER4_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER4_FLAGS}") - endif () - endif () - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER5_FLAGS}" PPC_POWER5_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cpp") - if (PPC_POWER5_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER5_FLAGS}") - endif () - endif () - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER6_FLAGS}" PPC_POWER6_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cpp") - if (PPC_POWER6_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER6_FLAGS}") - endif () - endif () - endif () - - # Hack for XLC and GCC. Find the right combination for PWR7 and the VSX unit. - CheckCompileLinkOption("${CRYPTOPP_POWER7_VSX_FLAGS}" PPC_POWER7_FLAG - "${TEST_PROG_DIR}/test_ppc_power7.cpp") - if (PPC_POWER7_FLAG) - set (CRYPTOPP_POWER7_FLAGS "${CRYPTOPP_POWER7_VSX_FLAGS}") - else () - CheckCompileLinkOption("${CRYPTOPP_POWER7_PWR_FLAGS}" PPC_POWER7_FLAG - "${TEST_PROG_DIR}/test_ppc_power7.cpp") - if (PPC_POWER7_FLAG) - set (CRYPTOPP_POWER7_FLAGS "${CRYPTOPP_POWER7_PWR_FLAGS}") - endif () - endif () - - CheckCompileLinkOption("${CRYPTOPP_POWER8_FLAGS}" PPC_POWER8_FLAG - "${TEST_PROG_DIR}/test_ppc_power8.cpp") - - # Disable POWER9 due to https://github.com/weidai11/cryptopp/issues/986. - #CheckCompileLinkOption("${CRYPTOPP_POWER9_FLAGS}" PPC_POWER9_FLAG - # "${TEST_PROG_DIR}/test_ppc_power9.cpp") - - #if (PPC_POWER9_FLAG AND NOT DISABLE_POWER9) - # set_source_files_properties(${SRC_DIR}/ppc_power9.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER9_FLAGS}) - #endif () - - if (PPC_POWER8_FLAG AND NOT DISABLE_POWER8) - set_source_files_properties(${SRC_DIR}/ppc_power8.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - #set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - #set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - endif () - - if (PPC_POWER7_FLAG AND NOT DISABLE_POWER7) - set_source_files_properties(${SRC_DIR}/ppc_power7.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - endif () - - if (PPC_ALTIVEC_FLAG AND NOT DISABLE_ALTIVEC) - set_source_files_properties(${SRC_DIR}/ppc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - endif () - - # Drop to Altivec if Power8 unavailable - if (NOT PPC_POWER8_FLAG) - if (PPC_ALTIVEC_FLAG) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - endif () - endif () - - if (NOT PPC_ALTIVEC_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ALTIVEC") - elseif (NOT PPC_POWER7_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER7") - elseif (NOT PPC_POWER8_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER8") - #elseif (NOT PPC_POWER9_FLAG) - # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER9") - endif () - - endif () -endif () - -# New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. -if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - - if (CRYPTOPP_AMD64 OR CRYPTOPP_I386) - - CheckCompileLinkOption("-xarch=sse2" CRYPTOPP_X86_SSE2 - "${TEST_PROG_DIR}/test_x86_sse2.cpp") - CheckCompileLinkOption("-xarch=ssse3" CRYPTOPP_X86_SSSE3 - "${TEST_PROG_DIR}/test_x86_ssse3.cpp") - CheckCompileLinkOption("-xarch=sse4_1" CRYPTOPP_X86_SSE41 - "${TEST_PROG_DIR}/test_x86_sse41.cpp") - CheckCompileLinkOption("-xarch=sse4_2" CRYPTOPP_X86_SSE42 - "${TEST_PROG_DIR}/test_x86_sse42.cpp") - CheckCompileLinkOption("-xarch=aes" CRYPTOPP_X86_CLMUL - "${TEST_PROG_DIR}/test_x86_clmul.cpp") - CheckCompileLinkOption("-xarch=aes" CRYPTOPP_X86_AES - "${TEST_PROG_DIR}/test_x86_aes.cpp") - CheckCompileLinkOption("-xarch=avx" CRYPTOPP_X86_AVX - "${TEST_PROG_DIR}/test_x86_avx.cpp") - CheckCompileLinkOption("-xarch=avx2" CRYPTOPP_X86_AVX2 - "${TEST_PROG_DIR}/test_x86_avx2.cpp") - CheckCompileLinkOption("-xarch=sha" CRYPTOPP_X86_SHA - "${TEST_PROG_DIR}/test_x86_sha.cpp") - - # Each -xarch=XXX options must be added to LDFLAGS if the option is used during a compile. - set(XARCH_LDFLAGS "") - - if (CRYPTOPP_X86_SSE2 AND NOT DISABLE_ASM) - set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") - set(XARCH_LDFLAGS "-xarch=sse2") - endif () - if (CRYPTOPP_X86_SSSE3 AND NOT DISABLE_SSSE3) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=ssse3") - if (CRYPTOPP_X86_SSE41 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_1") - endif () - if (CRYPTOPP_X86_SSE42 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_2") - if (CRYPTOPP_X86_CLMUL AND NOT DISABLE_CLMUL) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - endif () - if (CRYPTOPP_X86_AES AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=aes") - endif () - #if (CRYPTOPP_X86_AVX AND NOT DISABLE_AVX) - # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") - # set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx") - #endif () - if (CRYPTOPP_X86_AVX2 AND NOT DISABLE_AVX2) - set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx2") - endif () - if (CRYPTOPP_X86_SHA AND NOT DISABLE_SHA) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sha") - endif () - endif () - endif () - - # https://stackoverflow.com/a/6088646/608639 - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - - # elseif (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64) - - endif () -endif () - -#============================================================================ -# Compiler flags -#============================================================================ - -# add_compile_definitions added in CMake 3.12 -if (${CMAKE_VERSION} VERSION_LESS "3.12") - # https://stackoverflow.com/q/61250087 - add_definitions("${CMAKE_CPP_FLAGS}" "${CMAKE_CXX_FLAGS}" "${CRYPTOPP_COMPILE_DEFINITIONS}" "${CRYPTOPP_COMPILE_OPTIONS}") -else() - add_compile_definitions("${CMAKE_CPP_FLAGS}" "${CRYPTOPP_COMPILE_DEFINITIONS}") - add_compile_options("${CMAKE_CXX_FLAGS}" "${CRYPTOPP_COMPILE_OPTIONS}") -endif() - -#============================================================================ -# Compile targets -#============================================================================ - -# Work around the archaic versions of cmake that do not support -# target_compile_xxxx commands -# !!! DO NOT try to use the old way for newer version - it does not work !!! -function(cryptopp_target_compile_properties target) - # CMake >= 2.8.12 - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CRYPTOPP_COMPILE_OPTIONS}") - else() - string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_OPTIONS}") - set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${PROP_STR}") - endif() - # CMake >= 2.8.11 - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_compile_definitions(${target} PUBLIC ${CRYPTOPP_COMPILE_DEFINITIONS}) - else() - string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_DEFINITIONS}") - set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS "${CRYPTOPP_COMPILE_DEFINITIONS}") - endif() -endfunction() - -set(cryptopp_LIBRARY_SOURCES ${cryptopp_SOURCES_ASM}) -if (USE_INTERMEDIATE_OBJECTS_TARGET AND NOT ${CMAKE_VERSION} VERSION_LESS "2.8.8") - add_library(cryptopp-object OBJECT ${cryptopp_SOURCES}) - cryptopp_target_compile_properties(cryptopp-object) - - list(APPEND cryptopp_LIBRARY_SOURCES - $ - ) -else () - list(APPEND cryptopp_LIBRARY_SOURCES - ${cryptopp_SOURCES} - ) -endif () - -if (BUILD_STATIC) - add_library(cryptopp-static STATIC ${cryptopp_LIBRARY_SOURCES}) - cryptopp_target_compile_properties(cryptopp-static) - # CMake >= 2.8.11 - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_include_directories(cryptopp-static PUBLIC $ $) - else () - set_target_properties(cryptopp-static PROPERTIES INCLUDE_DIRECTORIES "$ $") - endif () -endif () - -if (BUILD_SHARED) - add_library(cryptopp-shared SHARED ${cryptopp_LIBRARY_SOURCES}) - cryptopp_target_compile_properties(cryptopp-shared) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_include_directories(cryptopp-shared PUBLIC $ $) - else () - set_target_properties(cryptopp-shared PROPERTIES INCLUDE_DIRECTORIES "$ $") - endif () -endif () - -# Set filenames for targets to be "cryptopp" -if (NOT MSVC) - set(COMPAT_VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}) - - if (BUILD_STATIC) - set_target_properties(cryptopp-static - PROPERTIES - OUTPUT_NAME cryptopp) - endif () - if (BUILD_SHARED) - set_target_properties(cryptopp-shared - PROPERTIES - SOVERSION ${COMPAT_VERSION} - OUTPUT_NAME cryptopp) - endif () -endif () - -# Add alternate ways to invoke the build for the shared library that are -# similar to how the crypto++ 'make' tool works. -# see https://github.com/noloader/cryptopp-cmake/issues/32 -if (BUILD_STATIC) - # add_custom_target(static DEPENDS cryptopp-static) -endif () -if (BUILD_SHARED) - add_custom_target(shared DEPENDS cryptopp-shared) - add_custom_target(dynamic DEPENDS cryptopp-shared) -endif () - -#============================================================================ -# Third-party libraries -#============================================================================ - -if (WIN32) - if (BUILD_STATIC) - target_link_libraries(cryptopp-static ws2_32) - endif () - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ws2_32) - endif () -endif () - -# This may need to be expanded to "Solaris" -if (CRYPTOPP_SOLARIS) - if (BUILD_STATIC) - target_link_libraries(cryptopp-static nsl socket) - endif () - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared nsl socket) - endif () -endif () - -find_package(Threads) -if (BUILD_STATIC) - target_link_libraries(cryptopp-static ${CMAKE_THREAD_LIBS_INIT}) -endif () -if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ${CMAKE_THREAD_LIBS_INIT}) -endif () - - -#============================================================================ -# Setup OpenMP -#============================================================================ -if (${CMAKE_VERSION} VERSION_GREATER "3.1" AND USE_OPENMP) - find_package(OpenMP) - - if (OPENMP_FOUND OR OPENMP_CXX_FOUND) - message(STATUS "OpenMP: Found libomp without any special flags") - endif() - - # If OpenMP wasn't found, try if we can find it in the default Macports location - if((NOT OPENMP_FOUND) AND (NOT OPENMP_CXX_FOUND) AND EXISTS "/opt/local/lib/libomp/libomp.dylib") # older cmake uses OPENMP_FOUND, newer cmake also sets OPENMP_CXX_FOUND, homebrew installations seem only to get the latter set. - set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp -I/opt/local/include/libomp/") - set(OpenMP_CXX_LIB_NAMES omp) - set(OpenMP_omp_LIBRARY /opt/local/lib/libomp/libomp.dylib) - - find_package(OpenMP) - if (OPENMP_FOUND OR OPENMP_CXX_FOUND) - message(STATUS "OpenMP: Found libomp in macports default location.") - else() - message(FATAL_ERROR "OpenMP: Didn't find libomp. Tried macports default location but also didn't find it.") - endif() - endif() - - # If OpenMP wasn't found, try if we can find it in the default Homebrew location - if((NOT OPENMP_FOUND) AND (NOT OPENMP_CXX_FOUND) AND EXISTS "/usr/local/opt/libomp/lib/libomp.dylib") - set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include") - set(OpenMP_CXX_LIB_NAMES omp) - set(OpenMP_omp_LIBRARY /usr/local/opt/libomp/lib/libomp.dylib) - - find_package(OpenMP) - if (OPENMP_FOUND OR OPENMP_CXX_FOUND) - message(STATUS "OpenMP: Found libomp in homebrew default location.") - else() - message(FATAL_ERROR "OpenMP: Didn't find libomp. Tried homebrew default location but also didn't find it.") - endif() - endif() - - set(Additional_OpenMP_Libraries_Workaround "") - - # Workaround because older cmake on apple doesn't support FindOpenMP - if((NOT OPENMP_FOUND) AND (NOT OPENMP_CXX_FOUND)) - if((APPLE AND ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))) - AND ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0") AND (CMAKE_VERSION VERSION_LESS "3.12.0"))) - message(STATUS "OpenMP: Applying workaround for OSX OpenMP with old cmake that doesn't have FindOpenMP") - set(OpenMP_CXX_FLAGS "-Xclang -fopenmp") - set(Additional_OpenMP_Libraries_Workaround "-lomp") - else() - message(FATAL_ERROR "OpenMP: Did not find OpenMP. Build without USE_OPENMP if you want to allow this.") - endif() - endif() - - if(NOT TARGET OpenMP::OpenMP_CXX) - # We're on cmake < 3.9, handle behavior of the old FindOpenMP implementation - message(STATUS "OpenMP: Applying workaround for old CMake that doesn't define FindOpenMP using targets") - add_library(OpenMP_TARGET INTERFACE) - add_library(OpenMP::OpenMP_CXX ALIAS OpenMP_TARGET) - target_compile_options(OpenMP_TARGET INTERFACE ${OpenMP_CXX_FLAGS}) # add to all targets depending on this - find_package(Threads REQUIRED) - target_link_libraries(OpenMP_TARGET INTERFACE Threads::Threads) - target_link_libraries(OpenMP_TARGET INTERFACE ${OpenMP_CXX_FLAGS} ${Additional_OpenMP_Libraries_Workaround}) - endif() - - if (BUILD_STATIC) - target_link_libraries(cryptopp-static ${OpenMP_CXX_FLAGS}) # Workaround for Ubuntu 18.04 that otherwise doesn't set -fopenmp for linking - target_link_libraries(cryptopp-static OpenMP::OpenMP_CXX) - endif() - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ${OpenMP_CXX_FLAGS}) # Workaround for Ubuntu 18.04 that otherwise doesn't set -fopenmp for linking - target_link_libraries(cryptopp-shared OpenMP::OpenMP_CXX) - endif() -endif() - -#============================================================================ -# Tests -#============================================================================ - -enable_testing() -if (BUILD_TESTING) - add_executable(cryptest ${cryptopp_SOURCES_TEST}) - target_link_libraries(cryptest cryptopp-static) - - # Setting "cryptest" binary name to "cryptest.exe" - if (NOT (WIN32 OR CYGWIN)) - set_target_properties(cryptest PROPERTIES OUTPUT_NAME cryptest.exe) - endif () - if (NOT TARGET cryptest.exe) - add_custom_target(cryptest.exe) - add_dependencies(cryptest.exe cryptest) - endif () - - file(COPY ${SRC_DIR}/TestData DESTINATION ${PROJECT_BINARY_DIR}) - file(COPY ${SRC_DIR}/TestVectors DESTINATION ${PROJECT_BINARY_DIR}) - - add_test(NAME build_cryptest COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target cryptest) - add_test(NAME cryptest COMMAND $ v) - set_tests_properties(cryptest PROPERTIES DEPENDS build_cryptest) -endif () - -#============================================================================ -# Doxygen documentation -#============================================================================ - -if (BUILD_DOCUMENTATION) - find_package(Doxygen REQUIRED) - - set(in_source_DOCS_DIR "${SRC_DIR}/html-docs") - set(out_source_DOCS_DIR "${PROJECT_BINARY_DIR}/html-docs") - - add_custom_target(docs ALL - COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile -d CRYPTOPP_DOXYGEN_PROCESSING - WORKING_DIRECTORY ${SRC_DIR} - SOURCES ${SRC_DIR}/Doxyfile - ) - - if (NOT ${in_source_DOCS_DIR} STREQUAL ${out_source_DOCS_DIR}) - add_custom_command( - TARGET docs POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${in_source_DOCS_DIR}" "${out_source_DOCS_DIR}" - COMMAND ${CMAKE_COMMAND} -E remove_directory "${in_source_DOCS_DIR}" - ) - endif () -endif () - -#============================================================================ -# Install -#============================================================================ - -set(export_name "cryptopp-targets") - -# Runtime package -if (BUILD_SHARED) - export(TARGETS cryptopp-shared FILE ${export_name}.cmake ) - install( - TARGETS cryptopp-shared - EXPORT ${export_name} - DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) -endif () - -# Development package -if (BUILD_STATIC) - export(TARGETS cryptopp-static FILE ${export_name}.cmake ) - install(TARGETS cryptopp-static EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif () -install(FILES ${cryptopp_HEADERS} DESTINATION include/cryptopp) - -# CMake Package -if (NOT CMAKE_VERSION VERSION_LESS 2.8.8) - include(CMakePackageConfigHelpers) - write_basic_package_version_file("${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake" VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}.${cryptopp_VERSION_PATCH} COMPATIBILITY SameMajorVersion) - install(FILES cryptopp-config.cmake ${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake DESTINATION "lib/cmake/cryptopp") - install(EXPORT ${export_name} DESTINATION "lib/cmake/cryptopp") -endif () - -# Tests -if (BUILD_TESTING) - install(TARGETS cryptest DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(DIRECTORY ${SRC_DIR}/TestData DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) - install(DIRECTORY ${SRC_DIR}/TestVectors DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) -endif () - -# Documentation -if (BUILD_DOCUMENTATION) - install(DIRECTORY "${out_source_DOCS_DIR}" DESTINATION ${CMAKE_INSTALL_DOCDIR}) -endif () - -# Print a configuration summary. We want CXX and CXXFLAGS, but they are not includd in ALL. -if (CRYPTOPP_I386) - message(STATUS "Platform: i386/i686") -elseif (CRYPTOPP_AMD64) - message(STATUS "Platform: x86_64") -elseif (CRYPTOPP_ARM32) - message(STATUS "Platform: ARM-32") -elseif (CRYPTOPP_ARMV8) - message(STATUS "Platform: ARMv8") -elseif (CRYPTOPP_SPARC) - message(STATUS "Platform: Sparc") -elseif (CRYPTOPP_SPARC64) - message(STATUS "Platform: Sparc64") -elseif (CRYPTOPP_PPC32) - message(STATUS "Platform: PowerPC") -elseif (CRYPTOPP_PPC64) - message(STATUS "Platform: PowerPC-64") -elseif (CRYPTOPP_MINGW32) - message(STATUS "Platform: MinGW-32") -elseif (CRYPTOPP_MINGW64) - message(STATUS "Platform: MinGW-64") -endif () -if (CRYPTOPP_ARMV7A_NEON) - message(STATUS "NEON: TRUE") -endif () -message(STATUS "Compiler: ${CMAKE_CXX_COMPILER}") -message(STATUS "Compiler options: ${CMAKE_CXX_FLAGS} ${CRYPTOPP_COMPILE_OPTIONS}") -message(STATUS "Compiler definitions: ${CRYPTOPP_COMPILE_DEFINITIONS}") -message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") diff --git a/vendor/cryptopp/Doxyfile b/vendor/cryptopp/Doxyfile deleted file mode 100644 index 05f7b46..0000000 --- a/vendor/cryptopp/Doxyfile +++ /dev/null @@ -1,2429 +0,0 @@ -# Doxyfile 1.8.13 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = Crypto++ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = 8.6 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "Free C++ class library of cryptographic schemes" - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -# The logo looks really bad here. Don't use it. -# PROJECT_LOGO = Logo-Steel.png - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = html-docs - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = NO - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = NO - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = NO - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = NO - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = NO - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = NO - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = NO - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = . \ - GNUmakefile \ - GNUmakefile-cross \ - rdrand.asm - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. - -FILE_PATTERNS = *.h \ - *.cpp - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = adhoc.cpp - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = *test* \ - *validat* - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = . - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 3 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = . - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = YES - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = com.cryptopp.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = com.cryptopp.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Crypto++ - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /