PIVX Core  5.6.99
P2P Digital Currency
crypto_hash.cpp
Go to the documentation of this file.
1 // Copyright (c) 2016 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 <iostream>
6 
7 #include "bench.h"
8 #include "crypto/ripemd160.h"
9 #include "crypto/sha1.h"
10 #include "crypto/sha256.h"
11 #include "crypto/sha512.h"
12 #include "crypto/siphash.h"
13 #include "random.h"
14 
15 /* Number of bytes to hash per iteration */
16 static const uint64_t BUFFER_SIZE = 1000*1000;
17 
18 static void RIPEMD160(benchmark::State& state)
19 {
20  uint8_t hash[CRIPEMD160::OUTPUT_SIZE];
21  std::vector<uint8_t> in(BUFFER_SIZE,0);
22  while (state.KeepRunning())
23  CRIPEMD160().Write(in.data(), in.size()).Finalize(hash);
24 }
25 
26 static void SHA1(benchmark::State& state)
27 {
28  uint8_t hash[CSHA1::OUTPUT_SIZE];
29  std::vector<uint8_t> in(BUFFER_SIZE,0);
30  while (state.KeepRunning())
31  CSHA1().Write(in.data(), in.size()).Finalize(hash);
32 }
33 
34 static void SHA256(benchmark::State& state)
35 {
36  uint8_t hash[CSHA256::OUTPUT_SIZE];
37  std::vector<uint8_t> in(BUFFER_SIZE,0);
38  while (state.KeepRunning())
39  CSHA256().Write(in.data(), in.size()).Finalize(hash);
40 }
41 
42 static void SHA256_32b(benchmark::State& state)
43 {
44  std::vector<uint8_t> in(32,0);
45  while (state.KeepRunning()) {
46  CSHA256()
47  .Write(in.data(), in.size())
48  .Finalize(in.data());
49  }
50 }
51 
52 static void SHA512(benchmark::State& state)
53 {
54  uint8_t hash[CSHA512::OUTPUT_SIZE];
55  std::vector<uint8_t> in(BUFFER_SIZE,0);
56  while (state.KeepRunning())
57  CSHA512().Write(in.data(), in.size()).Finalize(hash);
58 }
59 
60 static void FastRandom_32bit(benchmark::State& state)
61 {
62  FastRandomContext rng(true);
63  uint32_t x = 0;
64  while (state.KeepRunning()) {
65  x += rng.rand32();
66  }
67 }
68 
69 static void FastRandom_1bit(benchmark::State& state)
70 {
71  FastRandomContext rng(true);
72  uint32_t x = 0;
73  while (state.KeepRunning()) {
74  x += rng.randbool();
75  }
76 }
77 
78 BENCHMARK(RIPEMD160, 440);
79 BENCHMARK(SHA1, 570);
80 BENCHMARK(SHA256, 340);
81 BENCHMARK(SHA512, 330);
82 
83 BENCHMARK(SHA256_32b, 4700 * 1000);
84 BENCHMARK(FastRandom_32bit, 110 * 1000 * 1000);
85 BENCHMARK(FastRandom_1bit, 440 * 1000 * 1000);
A hasher class for RIPEMD-160.
Definition: ripemd160.h:13
CRIPEMD160 & Write(const unsigned char *data, size_t len)
Definition: ripemd160.cpp:247
void Finalize(unsigned char hash[OUTPUT_SIZE])
Definition: ripemd160.cpp:273
static const size_t OUTPUT_SIZE
Definition: ripemd160.h:20
A hasher class for SHA1.
Definition: sha1.h:13
CSHA1 & Write(const unsigned char *data, size_t len)
Definition: sha1.cpp:154
static const size_t OUTPUT_SIZE
Definition: sha1.h:20
void Finalize(unsigned char hash[OUTPUT_SIZE])
Definition: sha1.cpp:180
A hasher class for SHA-256.
Definition: sha256.h:13
static const size_t OUTPUT_SIZE
Definition: sha256.h:20
void Finalize(unsigned char hash[OUTPUT_SIZE])
Definition: sha256.cpp:168
CSHA256 & Write(const unsigned char *data, size_t len)
Definition: sha256.cpp:142
A hasher class for SHA-512.
Definition: sha512.h:13
static constexpr size_t OUTPUT_SIZE
Definition: sha512.h:20
void Finalize(unsigned char hash[OUTPUT_SIZE])
Definition: sha512.cpp:185
CSHA512 & Write(const unsigned char *data, size_t len)
Definition: sha512.cpp:159
Fast randomness source.
Definition: random.h:107
bool KeepRunning()
Definition: bench.h:69
BENCHMARK(RIPEMD160, 440)