ellswift.cpp raw

   1  // Copyright (c) 2022-2023 The Limenka 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 <key.h>
   7  #include <pubkey.h>
   8  #include <random.h>
   9  #include <span.h>
  10  #include <uint256.h>
  11  
  12  #include <algorithm>
  13  #include <cassert>
  14  
  15  static void EllSwiftCreate(benchmark::Bench& bench)
  16  {
  17      ECC_Context ecc_context{};
  18  
  19      CKey key = GenerateRandomKey();
  20      uint256 entropy = GetRandHash();
  21  
  22      bench.batch(1).unit("pubkey").run([&] {
  23          auto ret = key.EllSwiftCreate(MakeByteSpan(entropy));
  24          /* Use the first 32 bytes of the ellswift encoded public key as next private key. */
  25          key.Set(ret.data(), ret.data() + 32, true);
  26          assert(key.IsValid());
  27          /* Use the last 32 bytes of the ellswift encoded public key as next entropy. */
  28          std::copy(ret.begin() + 32, ret.begin() + 64, MakeWritableByteSpan(entropy).begin());
  29      });
  30  }
  31  
  32  BENCHMARK(EllSwiftCreate, benchmark::PriorityLevel::HIGH);
  33