summaryrefslogtreecommitdiff
path: root/libs/tdlib/td/benchmark/bench_crypto.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/tdlib/td/benchmark/bench_crypto.cpp')
-rw-r--r--libs/tdlib/td/benchmark/bench_crypto.cpp213
1 files changed, 0 insertions, 213 deletions
diff --git a/libs/tdlib/td/benchmark/bench_crypto.cpp b/libs/tdlib/td/benchmark/bench_crypto.cpp
deleted file mode 100644
index 44d309ef11..0000000000
--- a/libs/tdlib/td/benchmark/bench_crypto.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-//
-// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018
-//
-// 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"
-
-#include "td/utils/crypto.h"
-#include "td/utils/int_types.h"
-#include "td/utils/logging.h"
-#include "td/utils/port/thread.h"
-#include "td/utils/Random.h"
-#include "td/utils/Slice.h"
-
-#include <openssl/sha.h>
-
-#include <array>
-#include <atomic>
-#include <cstdint>
-#include <cstdlib>
-#include <random>
-#include <string>
-#include <vector>
-
-static constexpr int DATA_SIZE = 8 << 10;
-
-class SHA1Bench : public td::Benchmark {
- public:
- alignas(64) unsigned char data[DATA_SIZE];
-
- std::string get_description() const override {
- return PSTRING() << "SHA1 OpenSSL [" << (DATA_SIZE >> 10) << "KB]";
- }
-
- void start_up() override {
- for (int i = 0; i < DATA_SIZE; i++) {
- data[i] = 123;
- data[i] = 0;
- }
- }
-
- void run(int n) override {
- for (int i = 0; i < n; i++) {
- unsigned char md[20];
- SHA1(data, DATA_SIZE, md);
- }
- }
-};
-
-class AESBench : public td::Benchmark {
- public:
- alignas(64) unsigned char data[DATA_SIZE];
- td::UInt256 key;
- td::UInt256 iv;
-
- std::string get_description() const override {
- return PSTRING() << "AES OpenSSL [" << (DATA_SIZE >> 10) << "KB]";
- }
-
- void start_up() override {
- for (int i = 0; i < DATA_SIZE; i++) {
- data[i] = 123;
- }
- td::Random::secure_bytes(key.raw, sizeof(key));
- td::Random::secure_bytes(iv.raw, sizeof(iv));
- }
-
- void run(int n) override {
- td::MutableSlice data_slice(data, DATA_SIZE);
- for (int i = 0; i < n; i++) {
- td::aes_ige_encrypt(key, &iv, data_slice, data_slice);
- }
- }
-};
-
-BENCH(Rand, "std_rand") {
- int res = 0;
- for (int i = 0; i < n; i++) {
- res ^= std::rand();
- }
- td::do_not_optimize_away(res);
-}
-
-BENCH(CppRand, "mt19937_rand") {
- std::uint_fast32_t res = 0;
- std::mt19937 g(123);
- for (int i = 0; i < n; i++) {
- res ^= g();
- }
- td::do_not_optimize_away(res);
-}
-
-BENCH(TdRand32, "td_rand_fast32") {
- td::uint32 res = 0;
- for (int i = 0; i < n; i++) {
- res ^= td::Random::fast_uint32();
- }
- td::do_not_optimize_away(res);
-}
-
-BENCH(TdRandFast, "td_rand_fast") {
- int res = 0;
- for (int i = 0; i < n; i++) {
- res ^= td::Random::fast(0, RAND_MAX);
- }
- td::do_not_optimize_away(res);
-}
-
-#if !TD_THREAD_UNSUPPORTED
-BENCH(SslRand, "ssl_rand_int32") {
- std::vector<td::thread> v;
- std::atomic<td::uint32> sum;
- for (int i = 0; i < 3; i++) {
- v.push_back(td::thread([&] {
- td::int32 res = 0;
- for (int j = 0; j < n; j++) {
- res ^= td::Random::secure_int32();
- }
- sum += res;
- }));
- }
- for (auto &x : v) {
- x.join();
- }
- v.clear();
- td::do_not_optimize_away(sum.load());
-}
-#endif
-
-BENCH(SslRandBuf, "ssl_rand_bytes") {
- td::int32 res = 0;
- std::array<td::int32, 1000> buf;
- for (int i = 0; i < n; i += static_cast<int>(buf.size())) {
- td::Random::secure_bytes(reinterpret_cast<td::uint8 *>(buf.data()), sizeof(buf[0]) * buf.size());
- for (auto x : buf) {
- res ^= x;
- }
- }
- td::do_not_optimize_away(res);
-}
-
-BENCH(Pbkdf2, "pbkdf2") {
- std::string password = "cucumber";
- std::string salt = "abcdefghijklmnopqrstuvw";
- std::string key(32, ' ');
- td::pbkdf2_sha256(password, salt, n, key);
-}
-
-class Crc32Bench : public td::Benchmark {
- public:
- alignas(64) unsigned char data[DATA_SIZE];
-
- std::string get_description() const override {
- return PSTRING() << "Crc32 zlib [" << (DATA_SIZE >> 10) << "KB]";
- }
-
- void start_up() override {
- for (int i = 0; i < DATA_SIZE; i++) {
- data[i] = 123;
- data[i] = 0;
- }
- }
-
- void run(int n) override {
- td::uint64 res = 0;
- for (int i = 0; i < n; i++) {
- res += td::crc32(td::Slice(data, DATA_SIZE));
- }
- td::do_not_optimize_away(res);
- }
-};
-
-class Crc64Bench : public td::Benchmark {
- public:
- alignas(64) unsigned char data[DATA_SIZE];
-
- std::string get_description() const override {
- return PSTRING() << "Crc64 Anton [" << (DATA_SIZE >> 10) << "KB]";
- }
-
- void start_up() override {
- for (int i = 0; i < DATA_SIZE; i++) {
- data[i] = 123;
- data[i] = 0;
- }
- }
-
- void run(int n) override {
- td::uint64 res = 0;
- for (int i = 0; i < n; i++) {
- res += td::crc64(td::Slice(data, DATA_SIZE));
- }
- td::do_not_optimize_away(res);
- }
-};
-
-int main() {
- td::bench(Pbkdf2Bench());
- td::bench(RandBench());
- td::bench(CppRandBench());
- td::bench(TdRand32Bench());
- td::bench(TdRandFastBench());
-#if !TD_THREAD_UNSUPPORTED
- td::bench(SslRandBench());
-#endif
- td::bench(SslRandBufBench());
- td::bench(SHA1Bench());
- td::bench(AESBench());
- td::bench(Crc32Bench());
- td::bench(Crc64Bench());
- return 0;
-}