poly1305.cpp raw

   1  // Copyright (c) 2019-present The Bitcoin Core developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #include <bench/bench.h>
   6  #include <crypto/poly1305.h>
   7  // IWYU incorrectly suggests removing this header.
   8  // See https://github.com/include-what-you-use/include-what-you-use/issues/2014.
   9  #include <util/byte_units.h> // IWYU pragma: keep
  10  
  11  #include <cstddef>
  12  #include <cstdint>
  13  #include <span>
  14  #include <vector>
  15  
  16  /* Number of bytes to process per iteration */
  17  static constexpr uint64_t BUFFER_SIZE_TINY  = 64;
  18  static constexpr uint64_t BUFFER_SIZE_SMALL = 256;
  19  static constexpr uint64_t BUFFER_SIZE_LARGE{1_MiB};
  20  
  21  static void POLY1305(benchmark::Bench& bench, size_t buffersize)
  22  {
  23      std::vector<std::byte> tag(Poly1305::TAGLEN, {});
  24      std::vector<std::byte> key(Poly1305::KEYLEN, {});
  25      std::vector<std::byte> in(buffersize, {});
  26      bench.batch(in.size()).unit("byte").run([&] {
  27          Poly1305{key}.Update(in).Finalize(tag);
  28      });
  29  }
  30  
  31  static void POLY1305_64BYTES(benchmark::Bench& bench)
  32  {
  33      POLY1305(bench, BUFFER_SIZE_TINY);
  34  }
  35  
  36  static void POLY1305_256BYTES(benchmark::Bench& bench)
  37  {
  38      POLY1305(bench, BUFFER_SIZE_SMALL);
  39  }
  40  
  41  static void POLY1305_1MB(benchmark::Bench& bench)
  42  {
  43      POLY1305(bench, BUFFER_SIZE_LARGE);
  44  }
  45  
  46  BENCHMARK(POLY1305_64BYTES);
  47  BENCHMARK(POLY1305_256BYTES);
  48  BENCHMARK(POLY1305_1MB);
  49