Changeset View
Changeset View
Standalone View
Standalone View
src/key_io.cpp
Show First 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | if (data.size() == hash.size() + script_prefix.size() && | ||||
hash.begin()); | hash.begin()); | ||||
return ScriptHash(hash); | return ScriptHash(hash); | ||||
} | } | ||||
return CNoDestination(); | return CNoDestination(); | ||||
} | } | ||||
} // namespace | } // namespace | ||||
CKey DecodeSecret(const std::string &str) { | CKey DecodeSecret(const std::string &str) { | ||||
return DecodeSecret(str, Params()); | |||||
} | |||||
CKey DecodeSecret(const std::string &str, const CChainParams ¶ms) { | |||||
CKey key; | CKey key; | ||||
std::vector<uint8_t> data; | std::vector<uint8_t> data; | ||||
if (DecodeBase58Check(str, data, 34)) { | if (DecodeBase58Check(str, data, 34)) { | ||||
const std::vector<uint8_t> &privkey_prefix = | const std::vector<uint8_t> &privkey_prefix = | ||||
Params().Base58Prefix(CChainParams::SECRET_KEY); | params.Base58Prefix(CChainParams::SECRET_KEY); | ||||
if ((data.size() == 32 + privkey_prefix.size() || | if ((data.size() == 32 + privkey_prefix.size() || | ||||
(data.size() == 33 + privkey_prefix.size() && data.back() == 1)) && | (data.size() == 33 + privkey_prefix.size() && data.back() == 1)) && | ||||
std::equal(privkey_prefix.begin(), privkey_prefix.end(), | std::equal(privkey_prefix.begin(), privkey_prefix.end(), | ||||
data.begin())) { | data.begin())) { | ||||
bool compressed = data.size() == 33 + privkey_prefix.size(); | bool compressed = data.size() == 33 + privkey_prefix.size(); | ||||
key.Set(data.begin() + privkey_prefix.size(), | key.Set(data.begin() + privkey_prefix.size(), | ||||
data.begin() + privkey_prefix.size() + 32, compressed); | data.begin() + privkey_prefix.size() + 32, compressed); | ||||
} | } | ||||
} | } | ||||
if (!data.empty()) { | if (!data.empty()) { | ||||
memory_cleanse(data.data(), data.size()); | memory_cleanse(data.data(), data.size()); | ||||
} | } | ||||
return key; | return key; | ||||
} | } | ||||
std::string EncodeSecret(const CKey &key) { | std::string EncodeSecret(const CKey &key) { | ||||
return EncodeSecret(key, Params()); | |||||
} | |||||
std::string EncodeSecret(const CKey &key, const CChainParams ¶ms) { | |||||
assert(key.IsValid()); | assert(key.IsValid()); | ||||
std::vector<uint8_t> data = Params().Base58Prefix(CChainParams::SECRET_KEY); | std::vector<uint8_t> data = params.Base58Prefix(CChainParams::SECRET_KEY); | ||||
data.insert(data.end(), key.begin(), key.end()); | data.insert(data.end(), key.begin(), key.end()); | ||||
if (key.IsCompressed()) { | if (key.IsCompressed()) { | ||||
data.push_back(1); | data.push_back(1); | ||||
} | } | ||||
std::string ret = EncodeBase58Check(data); | std::string ret = EncodeBase58Check(data); | ||||
memory_cleanse(data.data(), data.size()); | memory_cleanse(data.data(), data.size()); | ||||
return ret; | return ret; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 80 Lines • Show Last 20 Lines |