Skip to content

Commit

Permalink
Add SHA256 dispatcher
Browse files Browse the repository at this point in the history
  • Loading branch information
sipa committed Jul 20, 2017
1 parent 4d50f38 commit 2991c91
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/bench/bench_bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "bench.h"

#include "crypto/sha256.h"
#include "key.h"
#include "validation.h"
#include "util.h"
Expand All @@ -12,6 +13,7 @@
int
main(int argc, char** argv)
{
SHA256AutoDetect();
RandomInit();
ECC_Start();
SetupEnvironment();
Expand Down
13 changes: 11 additions & 2 deletions src/crypto/sha256.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#include <string.h>

#include <atomic>

// Internal implementation code.
namespace
{
Expand Down Expand Up @@ -131,8 +133,15 @@ void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks)
}

} // namespace sha256

void (*Transform)(uint32_t*, const unsigned char*, size_t) = sha256::Transform;

} // namespace

std::string SHA256AutoDetect()
{
return "standard";
}

////// SHA-256

Expand All @@ -150,12 +159,12 @@ CSHA256& CSHA256::Write(const unsigned char* data, size_t len)
memcpy(buf + bufsize, data, 64 - bufsize);
bytes += 64 - bufsize;
data += 64 - bufsize;
sha256::Transform(s, buf, 1);
Transform(s, buf, 1);
bufsize = 0;
}
if (end - data >= 64) {
size_t blocks = (end - data) / 64;
sha256::Transform(s, data, blocks);
Transform(s, data, blocks);
data += 64 * blocks;
bytes += 64 * blocks;
}
Expand Down
6 changes: 6 additions & 0 deletions src/crypto/sha256.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include <stdint.h>
#include <stdlib.h>
#include <string>

/** A hasher class for SHA-256. */
class CSHA256
Expand All @@ -25,4 +26,9 @@ class CSHA256
CSHA256& Reset();
};

/** Autodetect the best available SHA256 implementation.
* Returns the name of the implementation.
*/
std::string SHA256AutoDetect();

#endif // BITCOIN_CRYPTO_SHA256_H
2 changes: 2 additions & 0 deletions src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1161,6 +1161,8 @@ bool AppInitSanityChecks()
// ********************************************************* Step 4: sanity checks

// Initialize elliptic curve code
std::string sha256_algo = SHA256AutoDetect();
LogPrintf("Using the '%s' SHA256 implementation\n", sha256_algo);
RandomInit();
ECC_Start();
globalVerifyHandle.reset(new ECCVerifyHandle());
Expand Down
2 changes: 2 additions & 0 deletions src/test/test_bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "chainparams.h"
#include "consensus/consensus.h"
#include "consensus/validation.h"
#include "crypto/sha256.h"
#include "fs.h"
#include "key.h"
#include "validation.h"
Expand All @@ -33,6 +34,7 @@ extern void noui_connect();

BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
{
SHA256AutoDetect();
RandomInit();
ECC_Start();
SetupEnvironment();
Expand Down

0 comments on commit 2991c91

Please sign in to comment.