Browse Source

Merge pull request #4277

4a09e1d key.cpp: fail with a friendlier message on missing ssl EC support (Andrew Poelstra)
0.10
Wladimir J. van der Laan 11 years ago
parent
commit
d01574f792
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 21
      src/init.cpp
  2. 12
      src/key.cpp
  3. 3
      src/key.h

21
src/init.cpp

@ -11,6 +11,7 @@
#include "addrman.h" #include "addrman.h"
#include "checkpoints.h" #include "checkpoints.h"
#include "key.h"
#include "main.h" #include "main.h"
#include "miner.h" #include "miner.h"
#include "net.h" #include "net.h"
@ -394,6 +395,23 @@ void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
} }
} }
/** Sanity checks
* Ensure that Bitcoin is running in a usable environment with all
* necessary library support.
*/
bool InitSanityCheck(void)
{
if(!ECC_InitSanityCheck()) {
InitError("OpenSSL appears to lack support for elliptic curve cryptography. For more "
"information, visit https://en.bitcoin.it/wiki/OpenSSL_and_EC_Libraries");
return false;
}
// TODO: remaining sanity checks, see #4081
return true;
}
/** Initialize bitcoin. /** Initialize bitcoin.
* @pre Parameters should be parsed and config file should be read. * @pre Parameters should be parsed and config file should be read.
*/ */
@ -598,6 +616,9 @@ bool AppInit2(boost::thread_group& threadGroup)
std::string strWalletFile = GetArg("-wallet", "wallet.dat"); std::string strWalletFile = GetArg("-wallet", "wallet.dat");
#endif #endif
// ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log // ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log
// Sanity check
if (!InitSanityCheck())
return InitError(_("Initialization sanity check failed. Bitcoin Core is shutting down."));
std::string strDataDir = GetDataDir().string(); std::string strDataDir = GetDataDir().string();
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET

12
src/key.cpp

@ -631,3 +631,15 @@ bool CExtPubKey::Derive(CExtPubKey &out, unsigned int nChild) const {
out.nChild = nChild; out.nChild = nChild;
return pubkey.Derive(out.pubkey, out.vchChainCode, nChild, vchChainCode); return pubkey.Derive(out.pubkey, out.vchChainCode, nChild, vchChainCode);
} }
bool ECC_InitSanityCheck() {
EC_KEY *pkey = EC_KEY_new_by_curve_name(NID_secp256k1);
if(pkey == NULL)
return false;
EC_KEY_free(pkey);
// TODO Is there more EC functionality that could be missing?
return true;
}

3
src/key.h

@ -306,4 +306,7 @@ struct CExtKey {
void SetMaster(const unsigned char *seed, unsigned int nSeedLen); void SetMaster(const unsigned char *seed, unsigned int nSeedLen);
}; };
/** Check that required EC support is available at runtime */
bool ECC_InitSanityCheck(void);
#endif #endif

Loading…
Cancel
Save