mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-11 11:16:09 -05:00
![Ryan Ofsky](/assets/img/avatar_default.png)
Replace calls to AsBytePtr with direct calls to AsBytes or reinterpret_cast. AsBytePtr is just a wrapper around reinterpret_cast. It accepts any type of pointer as an argument and uses reinterpret_cast to cast the argument to a std::byte pointer. Despite taking any type of pointer as an argument, it is not useful to call AsBytePtr on most types of pointers, because byte representations of most types will be implmentation-specific. Also, because it is named similarly to the AsBytes function, AsBytePtr looks safer than it actually is. Both AsBytes and AsBytePtr call reinterpret_cast internally and may be unsafe to use with certain types, but AsBytes at least has some type checking and can only be called on Span objects, while AsBytePtr can be called on any pointer argument. Co-authored-by: Pieter Wuille <pieter@wuille.net>
31 lines
983 B
C++
31 lines
983 B
C++
// Copyright (c) 2022-2023 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <bench/bench.h>
|
|
|
|
#include <key.h>
|
|
#include <random.h>
|
|
|
|
static void EllSwiftCreate(benchmark::Bench& bench)
|
|
{
|
|
ECC_Start();
|
|
|
|
CKey key;
|
|
key.MakeNewKey(true);
|
|
|
|
uint256 entropy = GetRandHash();
|
|
|
|
bench.batch(1).unit("pubkey").run([&] {
|
|
auto ret = key.EllSwiftCreate(MakeByteSpan(entropy));
|
|
/* Use the first 32 bytes of the ellswift encoded public key as next private key. */
|
|
key.Set(UCharCast(ret.data()), UCharCast(ret.data()) + 32, true);
|
|
assert(key.IsValid());
|
|
/* Use the last 32 bytes of the ellswift encoded public key as next entropy. */
|
|
std::copy(ret.begin() + 32, ret.begin() + 64, MakeWritableByteSpan(entropy).begin());
|
|
});
|
|
|
|
ECC_Stop();
|
|
}
|
|
|
|
BENCHMARK(EllSwiftCreate, benchmark::PriorityLevel::HIGH);
|