diff options
| author | Arseny Smirnov <arseny30@gmail.com> | 2018-12-31 22:04:05 +0300 |
|---|---|---|
| committer | Arseny Smirnov <arseny30@gmail.com> | 2017-12-31 23:08:40 +0300 |
| commit | 71d03f39c364367a8a7c51f783a41099297de826 (patch) | |
| tree | 4c0c57f9ddb87f46d58192e1ebfd2c40f6d2c315 /benchmark/bench_handshake.cpp | |
Project import generated by Copybara.
GitOrigin-RevId: 318483224ad6164d9966f731d60cde37039bb2d4
Diffstat (limited to 'benchmark/bench_handshake.cpp')
| -rw-r--r-- | benchmark/bench_handshake.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/benchmark/bench_handshake.cpp b/benchmark/bench_handshake.cpp new file mode 100644 index 000000000..d17889e74 --- /dev/null +++ b/benchmark/bench_handshake.cpp @@ -0,0 +1,76 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2017 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#include "td/utils/benchmark.h" // for bench, do_not_optimize_away, etc + +#include "td/mtproto/crypto.h" + +#include "td/utils/base64.h" +#include "td/utils/logging.h" +#include "td/utils/Slice.h" + +#include <map> + +#if TD_LINUX || TD_ANDROID || TD_TIZEN +#include <semaphore.h> +#endif + +namespace td { + +static int32 g = 3; +static string prime_base64 = + "xxyuucaxyQSObFIvcPE_c5gNQCOOPiHBSTTQN1Y9kw9IGYoKp8FAWCKUk9IlMPTb-jNvbgrJJROVQ67UTM58NyD9UfaUWHBaxozU_mtrE6vcl0ZRKW" + "kyhFTxj6-MWV9kJHf-lrsqlB1bzR1KyMxJiAcI-ps3jjxPOpBgvuZ8-aSkppWBEFGQfhYnU7VrD2tBDbp02KhLKhSzFE4O8ShHVP0X7ZUNWWW0ud1G" + "WC2xF40WnGvEZbDW_5yjko_vW5rk5Bj8Feg-vqD4f6n_Xu1wBQ3tKEn0e_lZ2VaFDOkphR8NgRX2NbEF7i5OFdBLJFS_b0-t8DSxBAMRnNjjuS_MW" + "w"; + +class HandshakeBench : public Benchmark { + std::string get_description() const override { + return "Handshake"; + } + + class FakeDhCallback : public DhCallback { + public: + int is_good_prime(Slice prime_str) const override { + auto it = cache.find(prime_str.str()); + if (it == cache.end()) { + return -1; + } + return it->second; + } + void add_good_prime(Slice prime_str) const override { + cache[prime_str.str()] = 1; + } + void add_bad_prime(Slice prime_str) const override { + cache[prime_str.str()] = 0; + } + mutable std::map<string, int> cache; + } dh_callback; + + void run(int n) override { + DhHandshake a; + DhHandshake b; + auto prime = base64url_decode(prime_base64).move_as_ok(); + for (int i = 0; i < n; i += 2) { + a.set_config(g, prime); + b.set_config(g, prime); + b.set_g_a(a.get_g_b()); + a.set_g_a(b.get_g_b()); + a.run_checks(&dh_callback).ensure(); + b.run_checks(&dh_callback).ensure(); + auto a_key = a.gen_key(); + auto b_key = b.gen_key(); + CHECK(a_key.first == b_key.first); + } + } +}; +} // namespace td + +int main() { + SET_VERBOSITY_LEVEL(VERBOSITY_NAME(DEBUG)); + td::bench(td::HandshakeBench()); + return 0; +} |
