| 379 | } // namespace |
| 380 | |
| 381 | CKey DecodeSecret(const std::string& str) |
| 382 | { |
| 383 | CKey key; |
| 384 | std::vector<unsigned char> data; |
| 385 | if (DecodeBase58Check(str, data, 34)) { |
| 386 | const std::vector<unsigned char>& privkey_prefix = Params().Base58Prefix(CChainParams::SECRET_KEY); |
| 387 | if ((data.size() == 32 + privkey_prefix.size() || (data.size() == 33 + privkey_prefix.size() && data.back() == 1)) && |
| 388 | std::equal(privkey_prefix.begin(), privkey_prefix.end(), data.begin())) { |
| 389 | bool compressed = data.size() == 33 + privkey_prefix.size(); |
| 390 | key.Set(data.begin() + privkey_prefix.size(), data.begin() + privkey_prefix.size() + 32, compressed); |
| 391 | } |
| 392 | } |
| 393 | if (!data.empty()) { |
| 394 | memory_cleanse(data.data(), data.size()); |
| 395 | } |
| 396 | return key; |
| 397 | } |
| 398 | |
| 399 | std::string EncodeSecret(const CKey& key) |
| 400 | { |