Add SHA256 dispatcher

This commit is contained in:
Pieter Wuille 2017-07-13 23:26:04 -07:00
parent 4d50f38fe0
commit 2991c91d88
5 changed files with 23 additions and 2 deletions

View file

@ -4,6 +4,7 @@
#include "bench.h"
#include "crypto/sha256.h"
#include "key.h"
#include "validation.h"
#include "util.h"
@ -12,6 +13,7 @@
int
main(int argc, char** argv)
{
SHA256AutoDetect();
RandomInit();
ECC_Start();
SetupEnvironment();

View file

@ -8,6 +8,8 @@
#include <string.h>
#include <atomic>
// Internal implementation code.
namespace
{
@ -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
@ -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;
}

View file

@ -7,6 +7,7 @@
#include <stdint.h>
#include <stdlib.h>
#include <string>
/** A hasher class for SHA-256. */
class CSHA256
@ -25,4 +26,9 @@ public:
CSHA256& Reset();
};
/** Autodetect the best available SHA256 implementation.
* Returns the name of the implementation.
*/
std::string SHA256AutoDetect();
#endif // BITCOIN_CRYPTO_SHA256_H

View file

@ -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());

View file

@ -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"
@ -33,6 +34,7 @@ extern void noui_connect();
BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
{
SHA256AutoDetect();
RandomInit();
ECC_Start();
SetupEnvironment();