X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fkeystore.cpp;fp=src%2Fkeystore.cpp;h=23f9e32fa2a08cd815a5fa42d8a9404eaac971c8;hb=3e0e10add3f8d1dffd419dc8968935b124389690;hp=2e4de87af5e96a852f141de4646f5b724657f96c;hpb=0d10cb7a1f6314760ef8895490e5c1042c3549b1;p=novacoin.git diff --git a/src/keystore.cpp b/src/keystore.cpp index 2e4de87..23f9e32 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -1,21 +1,12 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. #include "headers.h" -#include "db.h" #include "crypter.h" - -std::vector CKeyStore::GenerateNewKey() -{ - RandAddSeedPerfmon(); - CKey key; - key.MakeNewKey(); - if (!AddKey(key)) - throw std::runtime_error("CKeyStore::GenerateNewKey() : AddKey failed"); - return key.GetPubKey(); -} +#include "db.h" +#include "script.h" bool CKeyStore::GetPubKey(const CBitcoinAddress &address, std::vector &vchPubKeyOut) const { @@ -28,11 +19,43 @@ bool CKeyStore::GetPubKey(const CBitcoinAddress &address, std::vector 0); + return result; +} + + +bool CBasicKeyStore::GetCScript(const uint160 &hash, CScript& redeemScriptOut) const +{ + CRITICAL_BLOCK(cs_KeyStore) + { + ScriptMap::const_iterator mi = mapScripts.find(hash); + if (mi != mapScripts.end()) + { + redeemScriptOut = (*mi).second; + return true; + } + } + return false; +} + bool CCryptoKeyStore::SetCrypted() { CRITICAL_BLOCK(cs_KeyStore) @@ -46,16 +69,6 @@ bool CCryptoKeyStore::SetCrypted() return true; } -std::vector CCryptoKeyStore::GenerateNewKey() -{ - RandAddSeedPerfmon(); - CKey key; - key.MakeNewKey(); - if (!AddKey(key)) - throw std::runtime_error("CCryptoKeyStore::GenerateNewKey() : AddKey failed"); - return key.GetPubKey(); -} - bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn) { CRITICAL_BLOCK(cs_KeyStore) @@ -74,6 +87,7 @@ bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn) if (vchSecret.size() != 32) return false; CKey key; + key.SetPubKey(vchPubKey); key.SetSecret(vchSecret); if (key.GetPubKey() == vchPubKey) break; @@ -96,7 +110,8 @@ bool CCryptoKeyStore::AddKey(const CKey& key) std::vector vchCryptedSecret; std::vector vchPubKey = key.GetPubKey(); - if (!EncryptSecret(vMasterKey, key.GetSecret(), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) + bool fCompressed; + if (!EncryptSecret(vMasterKey, key.GetSecret(fCompressed), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) return false; if (!AddCryptedKey(key.GetPubKey(), vchCryptedSecret)) @@ -135,6 +150,7 @@ bool CCryptoKeyStore::GetKey(const CBitcoinAddress &address, CKey& keyOut) const return false; if (vchSecret.size() != 32) return false; + keyOut.SetPubKey(vchPubKey); keyOut.SetSecret(vchSecret); return true; } @@ -167,14 +183,15 @@ bool CCryptoKeyStore::EncryptKeys(CKeyingMaterial& vMasterKeyIn) return false; fUseCrypto = true; - CKey key; BOOST_FOREACH(KeyMap::value_type& mKey, mapKeys) { - if (!key.SetSecret(mKey.second)) + CKey key; + if (!key.SetSecret(mKey.second.first, mKey.second.second)) return false; const std::vector vchPubKey = key.GetPubKey(); std::vector vchCryptedSecret; - if (!EncryptSecret(vMasterKeyIn, key.GetSecret(), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) + bool fCompressed; + if (!EncryptSecret(vMasterKeyIn, key.GetSecret(fCompressed), Hash(vchPubKey.begin(), vchPubKey.end()), vchCryptedSecret)) return false; if (!AddCryptedKey(vchPubKey, vchCryptedSecret)) return false;